diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,2064 +1,202 @@
-2016-01-12  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Description): Added sentence saying CPSA was
-	designed and implemented at The MITRE Corporation.
-
-	* cpsa.cabal (Version): Tagged as version 2.5.4
-
-2015-10-02  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/{index,cpsauser}.html: Added width limit of 48em.
-
-2015-08-21  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/*/*.h:  Removed leading tabs.
-
-	* src/CPSA/Annotations/Formulas.hs (EitherS): Made EitherS an
-	instance of Applicative.
-
-	* cpsa.cabal (Version): Tagged as version 2.5.3
-
-2015-08-07  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsagoals.tex: Corrected the definition of satisfaction.
-
-2015-08-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsagoals.tex: Made minor fixes due to another review.  Also
-	fixed the definition of a characteristic skeleton.
-
-2015-08-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsaprimer.tex (section{Macros}\label{sec:macros}):  Added
-	text describing splicing.
-
-2015-07-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* README: Updated to reflect that Haskell Platform should always
-	be used.
-
-	* cpsa.cabal (Version): Tagged as version 2.5.2
-
-2015-07-09  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/ExpandedView.hs (purgeTraces): Added -p flag to
-	the graph program.  When present, the graph program purges traces
-	in skeletons it prints.
-
-2015-07-08  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.5.1
-
-2015-06-30  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs (occursIn): Restricted first argument
-	of occursIn to variables as the implementation returns incorrect
-	answers for other cases.  The code was called with a variable in
-	its first argument, so this correction does not change any
-	results.
-
-2015-06-25  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (geq): Removed dynamic role specific test
-	because it erroneously reports violations.  The existing static
-	role specific test correctly does the job.
-
-2015-06-18  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/{cpsaprimer,cpsagoals}.tex: Repaired errors and made
-	improvements in response to a review of this document.
-
-2015-05-21  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.5.0
-
-2015-04-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Loader.hs (ReturnFail): Added ReturnFail Monad so
-	that fail is correctly handled.  Added Functor and Applicative
-	instance to support GHC 7.10 base library.
-
-2015-04-20  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Source-Repository): Added github source repository.
-
-2015-04-10  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (mkListener): The role used for listener
-	strands is now the one stored in the protocol.  It has a single
-	variable x of sort mesg as its set of variables.  This change
-	enables satisfaction checking on skeleton that include listeners.
-
-2015-04-02  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (hull): Removed the hulling by
-	deorigination mode and returned to the hulling by compression
-	algorithm.  Hulling is only used on the initial preskeleton.
-
-	* src/CPSA/SAS/SAS.hs (form): Changed the output form from defsas
-	to defgoal.
-
-2015-03-30  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Loader.hs (loadPrimary): Improved the error
-	messages for ill-formed atomic formulas.
-
-	* src/CPSA/SAS/SAS.hs (loadPOV, loadOtherPreskel): Flushed the
-	check that an atom assumed to uniquely originate must originate in
-	a skeleton.  In this case, cpsasas generates a uniq assertion
-	rather than a uniq-at assertion.
-
-2015-03-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Loader.hs (findGoal): Allow more than one sentence
-	in a defgoal.
-
-	* src/CPSA/SAS/SAS.hs (Preskel): Added pnon predicate symbol.
-
-	* src/CPSA/Lib/Strand.hs (toSkeleton): Added hulling to the
-	process of converting an input preskeleton into a skeleton.
-
-2015-03-26  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/{Characteristic,Strand,Loader}.hs: Added new
-	toplevel form: defgoal.  The characteristic skeleton of the
-	antecedent in the goal is extracted and used as the initial
-	skeleton.
-
-2015-03-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/{Reduction,Strand,Loader}.hs: Made it so that when
-	a shape does not satisfy a goal, an environment showing why is
-	printed.  For each goal, the output is yes when the goal is
-	satisfied or (no (VAR VAL)...).
-
-2015-03-20  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/{Goal,Strand,Loader}.hs: Added goal loading and
-	satisfaction checking.  When a shape satisfies all goals in a
-	point-of-view skeleton, the shape is annotated with
-	(satifies-all-goals).
-
-2015-03-19  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs (Term): Added node variables and
-	constants for security goals.
-
-	* src/CPSA/SAS/SAS.hs (form): Changed the format of a shape
-	analysis sentences.  Instead of a bare formula, the formula is
-	wrapped in a defsas form, as in (defsas PROT SAS).  Removed the
-	protocol from role position predicates and parameter predicates.
-	Replaced function symbols uniq and sprec with uniq-at and str-prec
-	respectively.
-
-2015-03-17  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/SAS/SAS.hs (displayEq): Use = for function symbol
-	instead of equal.
-
-2014-11-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/prover9.pl: Added missing mesg predicates in output.
-
-2014-11-17  John D.  Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.4.0
-
-2014-11-15  John D.  Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/SAS/SAS.hs (nodeForm): Fixed bug where some role
-	predicates were mistakenly omitted.
-
-2014-11-13  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsaspec.tex: Updated the appendix of shape analysis
-	sentences to agree with what is produced by cpsasas.
-
-2014-11-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/SAS/SAS.hs (reduce): Added a function that eliminates
-	trivial homomorphism equations by substituting equivalent
-	variables and simplifying.
-
-2014-10-31  John D. Ramsdell  <ramsdell@.mitre.org>
-
-	* cpsasas: Added a program that produces shape analysis sentences
-	using the goal language used with protocol transformations.  This
-	language is superior to the one used by the cpsalogic program.
-
-	* cpsalogic: Removed this program as it has been replaced with
-	cpsasas.
-
-2014-09-05  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.3.5
-
-2014-09-02  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/unsorted.pl (decl_as_pairs):  Fixed bug in the case of
-	variables of sort mesg.
-
-2014-08-25  John D.  Ramsdell  <ramsdell@mitre.org>
-
-	* src/split.py: Added the skeleton split program that copies the
-	skeletons in a CPSA source file into separate files.
-
-2014-08-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/cpsajson.py (load): Added a reader in Python for JSON
-	produced by CPSA's pretty printer program cpsa3pp -j.
-
-2014-08-21  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/JSON/Main.hs: Added the program cpsajson that
-	translates JSON encoded CPSA into CPSA S-Expressions.  It expects
-	the JSON input to follow the conventions of the JSON produced by
-	the cpsapp program when given the -j option.
-
-	* src/CPSA/Lib/SExpr.hs (numOrSym): Enabled parsing a number with
-	a plus sign by removing the sign before translating the string of
-	digits into a number.
-
-2014-06-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.3.4
-
-	* doc/cpsauser.html:  Commented out Diffie-Hellman algebra
-	description.
-
-	* src/CPSA/Lib/Main.hs (useDiffieHellman): Added a compile time
-	switch that is used to disable the Diffie-Hellman algebra in a
-	release.
-
-2014-04-30  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Expand.hs:  Added splicing to the macro expander.
-	The splice symbol is ^.
-
-2014-04-21  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/DiffieHellman/Algebra.hs (agSolve): Added missing omit
-	when generating new equation.
-
-	* src/CPSA/DiffieHellman/Algebra.hs (genVars): Removed code that
-	conditionally generates new variables because the condition was
-	not reliable.
-
-2014-03-07  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/DiffieHellman/Algebra.hs: Changed the sort structure
-	of exponents.  The sort of exponents is now expr, and there is as
-	subsort for basis elements called expn.  Unification and matching
-	have been change so as to respect this sort structure.  This
-	change allows CPSA to solve Diffie-Hellman key exchange.
-
-2014-02-26  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Algebra.hs (specialize): Expunged specialize from
-	the interface and the algebras.
-
-2014-02-25  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/DiffieHellman/Algebra.hs (isAcquiredVar): Changed the
-	definition so that both variables of sort base and sort mesg are
-	acquired.
-
-	* src/CPSA/Lib/Algebra.hs (Term): Renamed isMesgVar to
-	isAcquiredVar.
-
-2014-02-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal:  Expunged Simple Diffie-Hellman and
-	Diffie-Hellman No Reciprocal algebras.
-
-2014-02-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.3.3
-
-2014-02-05  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs: Purged code for pruning.
-
-	* doc/cpsaspec.tex: Documented thinning and removed material on
-	pruning.
-
-2014-02-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (useThinning): Set flag to True so as use
-	thinning by default.
-
-2014-01-07  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.3.2
-
-2013-12-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/prover9.pl: Reverted to work with strings as tags fixing a
-	bug introduced in version 2.3.1.
-
-2013-12-14  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Extra-Source-Files):  Sorted the files.
-
-2013-10-15  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.3.1
-
-	* src/unsorted.pl: Added a missing occurs check and substitution.
-
-2013-10-11  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (prioritizeVertices): Reversed the sort
-	predicate so that high numbered priorities are considered first.
-
-2013-10-09  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* tst/epmo_acctnum.lisp: Stopped running this example as part of
-	the standard test suite because it now takes nearly 5000 steps.
-
-	* src/CPSA/Lib/Algebra.hs: Removed moreGeneral because the mgs
-	filter alleviates the need for this function.
-
-2013-10-08  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/{Strand.hs,Cohort.hs} (mgs): Replaced filters with
-	a most general homomorphism filter.
-
-2013-10-05  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (mga): Added a most general augmentation
-	filter as the MGU filter added to transformingNode did not remove
-	enough.
-
-2013-10-01  Moses D. Liskov  <mliskov@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (transformingNode): Applied the MGU
-	filter to the result of just one carried binding, not all of them.
-
-2013-10-01  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Extra-Source-Files): Deleted Diffie-Hellman tests as
-	support for DH never worked.
-
-2013-09-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/sexpr.pl: Reverted back to the case in which tags are
-	encoded as SWI-Prolog strings.
-
-2013-09-11  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Algebra.hs: Removed heldBy from the interface.
-
-	* src/CPSA/*/*.hs: Removed contexts from all datatypes.  This
-	language extension is deprecated and will soon be removed.
-
-2013-09-09  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/DiffieHellman/Algebra.hs (groupChase):  Add missing
-	case of chasing though group variables.
-
-2013-07-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-        * cpsa.cabal (Version):  Tagged as version 2.3.0
-
-	* src/CPSA/Lib/*.hs:  Added priorities to help guide the search.
-
-	* src/CPSA/Lib/Protocol.hs (mkRole): Positions are now used to
-	specify non-origination introductions rather than heights.
-
-	* doc/cpsaspec.tex: Reverted back to zero-based indexing.
-
-	* doc/cpsauser.tex: Removed Diffie-Hellman documentation as the
-	implementation of the algebra continues to have serious issues.
-
-2013-07-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/Tree.hs (makeTree): Skeletons without children
-	that are not marked "empty cohort" are now counted as live.
-
-2013-06-13  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Algebra.hs: Added isMesgVar for acquires check.
-
-	* src/CPSA/Lib/Strand.hs (thinStrand, thinManyStrands):  Added
-	transitive reduction before thinning.
-
-	* src/CPSA/*/Algebra.hs:  Removed support for GHC 6.x.
-
-2013-04-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/prover9.pl: Removed erroneous quotes that were added to the
-	translation of constants.
-
-2013-04-10  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/prover9.pl: Changed the formula translation algorithm so
-	that predicates for the sort declarations of variables are added
-	to generated formulas.  Previously, the sort information was
-	ignored.
-
-2013-03-29  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/DiffieHellman/Algebra.hs (mgu): Changed so function
-	performs substitutions on all vars on LHS, not just the ones not
-	that were originally on the LHS.
-
-2013-03-12  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Annotations/Annotations.hs (obligation): Replaced an
-	irrefutable pattern that raised an exception with a maybeToList.
-
-2013-03-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/DiffieHellman/Algebra.hs (sLoad):  Added code that
-	allows testing of unification and matching in GHCi.
-
-2013-02-28  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/*.html:  Convert to HTML 5 mainly by eliminating the DOCTYPE
-	element.
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.13
-
-2013-02-12  Paul D. Rowe  <prowe@mitre.org>
-
-	* src/perm.pl:  Fix permutation bug.
-
-2013-01-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* tst/Makefile ($EXE): Added optional extension for Cygwin users.
-	On Cygwin, put "export EXE=.exe" in a startup file.
-
-2012-11-13  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsaspec.tex (chapter{Generalization}): Corrected the
-	definition of a location in the text describing variable
-	separation.
-
-2012-11-09  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.12.
-
-2012-11-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/index.tex:  Added a section on useful tips.
-
-	* doc/cpsauser.tex:  Added description of Emacs Compilation Mode
-	support.
-
-2012-10-30  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/cpsaperm.scm: Added a Scheme program that renumbers the
-	strands in a skeleton while preserving all information in the
-	skeleton.
-
-2012-10-29  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsaintroslides.tex:  Added introductory slides for new
-	users.
-
-2012-10-26  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/cpsa.pl: Added support for penetrator non-origination
-	assumptions.
-
-2012-10-25  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/perm.pl: Added a program that renumbers the strands within a
-	skeleton.  This program also strips the skeleton of non-essential
-	information.
-
-2012-10-02  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Pretty/Main.hs (pjson):  Added JSON output option.
-
-2012-08-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.11.
-
-	* doc/cpsaprimer.tex (Appendix B): Added a discussion on shapes
-	that CPSA fails to find.  It explains that the missing shapes only
-	occur when interpreting roles unnaturally.
-
-	* tst/incompleteness_example.scm: Added the example used in the
-	primer that shows a shape CPSA fails to find.
-
-2012-08-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Expand.hs (include): Added a top-level form that
-	includes source file while performing macro expansion.
-
-2012-08-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Reduction.hs (breadth): Added comments describing
-	loop variables.
-
-	* src/CPSA/Lib/Strand.hs (skeletonize): Expunged hulling by
-	compression code.
-
-2012-08-03  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Reduction.hs (breadth,step): Added the tobig
-	variable so that all skeletons are produced that are below the
-	strand bound.
-
-	* src/CPSA/Lib/Main.hs (main,select,go): Added source file name to
-	"All input read" comment.
-
-2012-06-28  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.10.
-
-	* src/CPSA/Lib/Entry.hs (tryIO): Made error option in return value
-	a string so that error messages are correctly parsed by Emacs.
-
-2012-06-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Entry.hs (tryIO): The use of System.IO.Error.try
-	has been deprecated, so CPSA.LIB.Entry now exports a replacement.
-
-2012-06-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* {doc,tst}/Make.hs: Changed imports so that ExitCode and system
-	come from System.Exit and System.process, not System, which is
-	part of the haskell98 package that is now hidden by default.
-
-2012-05-25  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.9.
-
-	* src/CPSA/Lib/Reduction.hs (begin, search): Collapsing is
-	performed as a pre-processing stage before any tests are solved.
-	As a result, there is no need for hulling, and it has been
-	disabled.
-
-2012-05-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (augment): Removed the ability to turn
-	off displacement.
-
-	* src/CPSA/Lib/Strand.hs (augmentAndDisplace): Put skeletons
-	produced by displacement before the ones created by augmentation.
-
-2012-05-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/*.hs:  Added penetrator non-origination
-	assumptions (pen-non-orig).
-
-2012-05-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/SimpleDiffieHellman/Algebra.hs (normalize): Equality,
-	comparison, and substitution normalize exponentiated values.
-
-2012-05-21  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/SimpleDiffieHellman/Algebra.hs (idSubst, substChase):
-	Produce canonical form for double exponents.
-
-	* src/CPSA/SimpleDiffieHellman/Algebra.hs (equalTerm)
-	(compareTerm): Compare double exponents using lists for efficiency
-	and readability.
-
-2012-05-14  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/DiffieHellmanNoReciprocal/LinDiophEq.hs: Used the
-	method in the paper by Contejean and Devie for solving an
-	inhomogeneous equation using the algorithm for the homogeneous
-	equation solver.  The previous version buggy.
-
-2012-05-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/SVG.hs (kbutton): In a tree drawing, the label of
-	a shape is now blue.
-
-2012-02-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.8.
-
-2012-02-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (separateVariablesLimit): Added a hard
-	coded limit to the number of attempts to perform variable
-	separation during generalization.
-
-2012-02-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsa.mk,doc/Make.hs: Removed rules for *.sch files.
-
-2012-02-02  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (usePrunedStrandNotInPOV): Turned this
-	flag on.  It never was supposed to be off except for when
-	experimenting.
-
-2012-02-01  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.7.
-
-	* doc/cpsasdha.tex: Added a document describing the current
-	implementation of a Diffie-Hellman algebra.
-
-2012-01-25  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/*/Algebra.hs (encryptions): Used the C preprocessor to
-	all support for GHC 6.x while eliminating the annoying warnings
-	because Data.Map.foldWithKey has been deprecated in newer versions
-	of GHC.
-
-	* src/CPSA/Lib/Algebra.hs (encryptions): Changed the signature so
-	that an encryption returned by this function may have more than
-	one key used to prepare it as in the case of Diffie-Hellman
-	algebras.
-
-2011-12-20  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs (match): Handle algebra equation with
-	the rule match(invk(t), t', env) -> match(t, invk(t'), env) when
-	t' is not of the form invk(t").  Corrects a missing case in
-	previous algorithm.
-
-	* src/CPSA/Lib/Notation.hs (mesg): Print (hash a b ... z)
-	as #(a, b, ..., z).
-
-2011-12-09  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/SVG.hs (tooltip): Display tool tips with
-	<g><title>TOOLTIP</title>...</g> instead of <a
-	xlink:title='MESSAGE'>...</a> so that tool tips work in Firefox
-	and Chrome again.
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.6.
-
-2011-11-18  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* tst/deorig_mesg.scm (deorig-mesg):  Added an example showing
-	that variables of sort mesg make deorigination very hard.
-
-2011-11-07  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/*: Delete cpsatheory.tex, and replace references to it with
-	ones to the MTR "Completeness of CPSA".
-
-	* src/CPSA/Lib/Loader.hs (notListenerPrefix): Ensure each role
-	does not have the pattern <-t, +t, ...> so as to avoid confusion
-	with listeners.q
-
-2011-08-16  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.5.
-
-2011-08-15  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/cpsa.pl: Changed the internal form so that compound terms
-	are represented as function symbols applied to terms, not as
-	S-expressions.
-
-2011-08-12  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/*: Updated documentation to reflect support for hashing.
-
-2011-08-11  Paul Rowe  <prowe@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs: Added support for hashing.
-
-2011-07-26  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (ksubst): Made the flag validate the
-	first argument.
-
-	* src/CPSA/Lib/Strand.hs (compress): Added a flag validate.  When
-	false, compression does not check for intrastrand orderings that
-	create cycles.  Used in thinning.
-
-2011-05-18  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.4.
-
-2011-05-16  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/prover9.pl: Added a translator from cpsalogic output to
-	prover9 syntax.
-
-2011-05-13  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Reduction.hs (parMap): The option to compile CPSA
-	without using the parallel runtime has been removed.  The parallel
-	library comes with Haskell Platform, so it is always available
-	these days.
-
-	* cpsa.cabal (Executable cpsa): Added the GHC option -rtsopts when
-	the compiler is version 7.0.0 or greater.  In 7.0.0, needed
-	runtime option have been disabled for security reasons by default.
-
-2011-05-12  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Logic/Logic.hs (precForm): Shortened the predicate's
-	name from precedes to prec.
-
-	* src/CPSA/Logic/Logic.hs (origForm): Added the orig predicate
-	which asserts the node of origination for each uniquely originating
-	atom.
-
-	* src/CPSA/Lib/Reduction.hs (origs): Added nodes of origination
-	of uniquely originating atoms for POV and shapes for cpsalogic.
-
-	* src/CPSA/Lib/Reduction.hs (commentPreskel):  Rewrote this
-	function so as to make its much more understandable.
-
-2011-05-09  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsaspec.tex: Added the orig predicate to shape analysis
-	sentences so that eliminate a counterexample to Conjecture B.1.
-	The addition of this predicate in necessary because with out it,
-	there is no way to ensure that skeletons that model a description
-	of a skeleton preserve nodes of origination of uniquely
-	originating atoms.
-
-2011-05-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.3.
-
-2011-05-02  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsaprimer.tex: Added sections on macros, cpsaparameters,
-	and cpsalogic.
-
-	* doc/cpsaspec.tex: Extensively rewritten to improve readability
-	and reflect the current code base.  Added Appendix B that
-	describes the theory behind shape analysis sentences and
-	cpsalogic.
-
-	* src/CPSA/Lib/Strand.hs (pruneStrand): Added check for
-	homomorphism.  This fix slightly reduces CPSA's ability to prune.
-	This problem was notice while rewriting The CPSA Specification.
-
-2011-04-25  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Reduction.hs (commentPreskel): The format of the
-	homomorphism comment in a shape changed to (maps (STRAND-MAP
-	SUBST) ...), where there may be more than one homomorphism.
-
-2011-04-18  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Logic/Logic.hs (logic): Added the cpsalogic program.
-	It extracts an axiom in the language of first-order logic for each
-	problem and its shapes from a CPSA run. The axiom is modeled by
-	all realized skeletons.
-
-2011-04-14  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Reduction.hs (commentPreskel): Added the
-	preskeleton symbol to input that is not the point-of-view
-	skeleton, but is the one used to generate it.
-
-2011-04-11  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Reduction.hs (commentPreskel): For each shape,
-	added the homomorphism from the POV skeleton to it as a comment
-	using the key map.  The format is (map STRAND-MAP SUBST...), where
-	there may be more than one substitution depending on the algebra.
-
-	* src/CPSA/Lib/Algebra.hs: Added displayEnv to a Context.
-
-2011-04-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsadesign.tex: Updated to reflect the current code base.
-
-2011-03-29  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.2.
-
-	* src/CPSA/Lib/Cohort.hs (cowt): Added a duplicate substitution
-	removal filter so as to resolve a large memory usage bug when
-	analyzing Wang's Fair Exchange Protocol.
-
-	* tst/wang.lisp ("Wang's Fair Exchange Protocol"): Added new
-	test.
-
-2011-03-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsaprimer.tex: Added the hashed value as key idea:
-	(defmacro (hash x) (enc "hash" (cat "hash" x)))
-
-	* tst/epmo-key-hash.scm, tst/epmo_acctnum-key-hash.lsp: Variants
-	of epmo and empo_acctnum that use the hashed value as the key.
-
-2011-02-02  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (solved): Disabled condition 2a for
-	protocols with role variables that are all atoms.  The use of
-	condition 2a is never fruitful in this case.
-
-2011-02-01  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (solved): Added condition 2a to the
-	solved predicate so that CPSA now finds the shape in targetterms8.
-
-	* src/CPSA/Lib/Notation.hs (decl): The sort in a declaration is
-	now printed after the variables, as in "a, b: name".
-
-2010-12-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/SExpr.hs (abort): Close input handle when reporting
-	a failure.
-
-	* src/CPSA/Lib/SExpr.hs (isSym, isStr): Non-ASCII characters are
-	accepted as constituents of symbols and strings.
-
-2010-12-20  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.1.
-
-2010-12-16  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Diff/Main.hs (showDiff): Closed output handle when a
-	difference is found so as to ensure the output is flushed before
-	exiting signaling failure.
-
-2010-12-15  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/ExpandedView.hs (treelessView): Added
-	treelessView, an output format that just prints the skeletons.
-	It's meant to be used on cpsagraph input that is too large to
-	handle otherwise.
-
-2010-12-14  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/Loader.hs (loadFirst, loadNext): The loader
-	returns one preskeleton per call, rather than returning the list
-	of all preskeletons in the input.  This allows modes of operation
-	in which only a small portion of the input is in memory at any one
-	time.
-
-2010-12-10  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsa.mk, doc/Make.hs: Changed the extension associated with
-	cpsagraph output from .xml to .xhtml.
-
-	* doc/cpsa.mk, doc/Make.hs: Changed the extension associated with
-	cpsaparameters output from .params to _parameters.txt.
-
-2010-12-09  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/Tree.hs: Dump commented out copy of the old
-	algorithm.
-
-	* src/CPSA/Graph/ExpandedView.hs (kdrawer): Replaced tree
-	sorting with a queue to produce a breadth first ordering of the
-	tree on output.  This change has a big impact on performance on
-	large inputs.
-
-2010-12-08  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/ExpandedView.hs (zoomControl): Omit need to run a
-	script at load time by adding the attribute onchange="zoom(event)".
-
-2010-12-07  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/ExpandedView.hs: Changed the scripting to better
-	support very large documents.  Instead of running a script to
-	insert the new control, this version builds the controls into the
-	document.  The script run a load time just registers event
-	handlers.
-
-	* src/CPSA/Graph/Tree.hs (forest): Changed data structures used to
-	form the forest so as to replace linear searches on lists with
-	binary searches on maps and sets.
-
-2010-12-01  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version):  Tagged as version 2.2.0.
-
-2010-11-29  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/Preskeleton.hs (addNode): Use the color blue to
-	distinguish realized reception nodes from transmission nodes.
-
-	* src/CPSA/Lib/Strand.hs (augment): Removed hullForAugmentation.
-	Hulling is now always performed after contractions, regular
-	augmentations, and listener augmentations.
-
-2010-11-26  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/*.hs: Added support for the cpsagraph option
-	--zoom.  This option adds support for SVG diagram scaling in
-	the expanded format, the one that generates an XML compound
-	document.  If the browser supports HTML5 sliders, cpsagraph
-	generates them, otherwise, it generates old style drop down lists.
-
-2010-11-19  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/*.scm: Updated examples to use herald forms.
-
-	* src/CPSA/Lib/Main.hs (getHerald): Added support for a herald
-	form that allows options specified on the command line to be
-	specified within an input file.
-
-	* src/CPSA/SimpleDiffieHellman/Algebra.hs (outFlow, inFlow):
-	Updated to handle (gen) and (exp h x).
-
-2010-11-16  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (testStrand): Corrected a flaw in which
-	this function incorrectly computed the public messages available
-	at a node when the node ordering is reversed, such as when using
-	the -r option or a reverse-search role hint.
-
-2010-11-15  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Diff/Main.hs (main): Added cpsadiff, a program that
-	compares CPSA output files S-expression by S-expression, and
-	prints the first skeleton that differs.
-
-	* src/CPSA/Lib/Protocol.hs (Role):  Added the rsearch boolean that
-	is used to determine the order in which a strand is searched for a
-	test node.  The search is reversed if the role includes the
-	"reverse-search" key as one of its comments.
-
-	* src/CPSA/Lib/Entry.hs (gentlyReadSExpr): Added a version of the
-	S-expression reader that gently fails on error by printing the
-	error message to standard error and returning EOF.  Changed
-	cpsagraph, cpsashapes, and cpsapp to use this reader.  That way,
-	an aborted run can be processed by these programs.
-
-2010-11-05  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.1.2.
-
-	* src/CPSA/Lib/Main.hs (interp): Enabled displacement by default,
-	and changed the sense of the -d option.
-
-2010-10-25  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/SimpleDiffieHellman/Algebra.hs: Changed algebra
-	signature so that gen is a constant.
-
-2010-10-21  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (homomorphismFilter): Added a filter that
-	ensures there is a homomorphism from the parent to each member of
-	a cohort.
-
-2010-10-20  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (hullByDeOrigination): Added a mode to
-	hulling based on deorigination.
-
-2010-10-19  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/SimpleDiffieHellman/Algebra.hs (loadVar): For now,
-	variables of sort base are forbidden to deal with missing
-	contractions in the Diffie-Hellman Man-In-The-Middle example.
-
-2010-10-15  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/SimpleDiffieHellman/Algebra.hs: Made the Simple
-	Diffie-Hellman algebra what one gets where one requests the
-	algebra diffie-hellman.
-
-2010-10-14  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/{Basic,SimpleDiffieHellman}/Algebra.hs (places,
-	replace): Corrected these definitions so that they handle
-	occurrences of variables without a sort inclusion function.  For
-	example, the old version would not find I when in akey(invk(I))
-	when looking for the places at which akey(I) occurs.
-
-2010-10-13  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/SimpleDiffieHellman/Algebra.hs: Added an implementation
-	of the Simple Diffie-Hellman algebra, one that supports only
-	commutativity in exponents.
-
-	* src/CPSA/SimpleDiffieHellman/Algebra.hs (foldCarriedTerms,
-	carriedPlaces): Despite there names, these two functions follow
-	the definition of heldBy, not carriedBy.
-
-  	* src/CPSA/Lib/Protocol.hs (originates, originationPos): carriedBy
-	-> heldBy.
-
-	* src/CPSA/Lib/Cohort.hs (testNode): carriedBy -> heldBy.
-
-	* src/CPSA/Lib/Strand.hs (gainedPos, preskelWellFormed)
-	(deleteNodeRest): carriedBy -> heldBy.
-
-2010-10-12  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Algebra.hs: Changed the signature of unify and
-	match so they return a list rather than a Maybe.
-
-2010-10-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/DiffieHellman/Algebra.hs (specialize): Added code to
-	specialize an environment by mapping all generated variables to
-	one.  This is used when producing an environment for an instance.
-
-2010-10-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/DiffieHellman/Algebra.hs: Modified algebra so that
-	bases are no longer atoms, and implemented a more realistic
-	version of derivability.
-
-2010-10-02  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Algebra.hs: Added heldBy to support
-	Diffie-Hellman.
-
-2010-09-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Notation.hs (mesg): Use [x,y,..]k instead of
-	E(k;x,y,...).
-
-2010-09-17  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/LaTeXView.hs (writeLnPreskel): Add Tree number
-	before printing a protocol.
-
-2010-09-10  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.1.1.
-
-	* src/CPSA/Graph/Tree.hs (assemble): To handle incomplete outputs,
-	assemble ignores unavailable seen children instead of signaling an
-	error.
-
-2010-08-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (augCollapses): Pruning is now performed
-	only after augmentation, and only when the augmented strand is
-	involved.
-
-2010-08-12  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/LaTeXView.hs (matrix):  When drawing a skeleton,
-	communication edges between nodes with different messages is shown
-	with a dotted arrow as is already done for SVG diagrams.
-
-2010-08-09  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Notation.hs: Added an infix notation for XHTML and
-	LaTeX output.  Enable by specifying the -i flag when invoking
-	cpsagraph or cpsapp.
-
-2010-07-29  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.1.0.
-
-2010-07-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Cabal-Version): CPSA now assumes Cabal is version
-	1.6 or greater, and support for GHC 6.8 has been withdrawn.
-
-	* src/CPSA/Graph/Loader.hs (loadDefs): The graph program displays
-	the initial comments in an input file.
-
-2010-07-14  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Main.hs (options): Four new command line options
-	have been added:
-	  -d         --displacement     enable displacement
-	  -c         --check-nonces     check nonces first
-	  -t         --try-old-strands  try old strands first
-	  -r         --reverse-nodes    try old nodes first
-
-2010-07-09  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (contractAndOrder): Support for this
-	addition to authentication test solving has been removed.
-
-	* src/CPSA/Lib/Cohort.hs (contractions): Contraction has changed
-	so that it only solves the test for one position of the critical
-	message in the test node, not every position.  Previously, CPSA
-	was missing most general solutions due to contracting too many
-	positions at the same time.
-
-	* src/CPSA/Lib/Strand.hs (pruneStrands): The pruning condition now
-	checks to see that there is a variable renaming between the
-	preskeletons involved.  Previously, the only check ensured the map
-	was idempotent.
-
-2010-07-08  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (useEcapeSetInTargetTerms): Added an
-	option to include the escape set in the set of target terms.
-
-2010-06-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (gainedPos): In a skeleton, a node with a
-	uniquely originating atom that is gained must be after the node of
-	origination.  It used to be that only nodes in which the atom is
-	acquired must have the ordering.
-
-2010-06-18  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.0.5.
-
-	* doc/cpsatheory.tex: Added theory document on authentication
-	tests.
-
-2010-06-11  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (augCollapses): Added a collapsing phase
-	after adding a strand so that hulling succeeds without when
-	origination points on augmented strands move.
-
-	* src/CPSA/Lib/Strand.hs (hull): Added a better algorithm for
-	finding pairs of strands to hull.
-
-2010-06-07  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (cowt): As does cows, the cowt has to
-	iterate to ensure all places are considered.  This change fixes
-	the bug exposed by the tst/non_transforming.scm text case.
-
-2010-06-03  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (transformingNode): Removed junk in
-	output by applying the mgu filter to more substitutions used to
-	construct augmentations.  This fix has a dramatic effect on
-	performance for the NSL4 and NSL5 test cases.
-
-2010-05-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (cows): Update function to better match
-	correctness result in the upcoming algebra paper.
-
-2010-04-28  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.0.4.
-
-	* cpsa.cabal: Base versions are now base >= 3 &&< 5.
-
-2010-04-20  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (acyclicOrder): Fix acyclic check by
-	analyzing all edges in graph, not just communication edges.
-
-2010-04-15  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (firstSkeleton): Input skeletons are no
-	longer pruned.
-
-2010-03-30  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.0.3.
-
-	* src/CPSA/Lib/Cohort.hs (useEncryptionFirstOrder): Added switch
-	to determine critical message search order.
-
-	* src/CPSA/Lib/Strand.hs (skelNons, skelUniques): Use inheritRnon,
-	and inheritRunique for inherited origination assumptions.
-
-2010-03-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/pp.pl: Added an SWI-Prolog version of the pretty printer in
-	CPSA.Lib.Pretty.
-
-	* src/cpsa.pl: Added an SWI-Prolog version of the CPSA specific
-	pretty printer in CPSA.Lib.Printer and support for skeleton
-	transformations.
-
-2010-03-11  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.0.2.
-
-	* src/CPSA/Graph/Loader.hs (itrace): When computing the trace of
-	an instance, use the traces comment if it is available.
-
-2010-03-11  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.0.1.
-
-2010-03-10  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/cpsa.el: Added Emacs support for skeleton transformations.
-
-2010-03-07  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs (rootName):  Improved renaming
-	algorithm used to avoid collisions while printing variables.
-
-2010-03-05  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (roleOrigCheck): Added check that
-	unique origination position is preserved by inheritance.
-
-2010-03-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 2.0.0, the first release
-	for the public.
-
-2010-03-01  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/SExpr.hs (load): Load now returns one S-expression
-	per call.
-
-2010-02-19  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Loader.hs (loadPosBaseTerm): Added a missing check
-	that ensures a non-originating term at given length is an atom.
-
-	* doc/Make.hs (cpsa): Made *.sch the extension for problems
-	that use Diffie-Hellman.
-
-2010-02-15  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.5.5.
-
-	* src/CPSA/Lib/Loader.hs:  Added better error messages for roles
-	and preskeletons that are not well formed.
-
-2010-02-13  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs:  Enforce a canonical form for terms
-	so that term equality is just structural equality.
-
-2010-02-08  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (testNode): Changed order in which
-	critical message are picked to look at encryption tests before
-	nonce tests.
-
-2010-02-05  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.5.4.
-
-2010-02-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (origCheck): For pruning, added a check
-	that insures that origination assumptions are honored by the
-	homomorphisms associated with pruning.
-
-2010-01-29  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsauser.html (Visualization): Added a comment that notes
-	that cpsagraph draws dashed lines between nodes with terms that
-	are equivalent, but not syntactically identical.
-
-	* src/CPSA/Lib/Strand.hs (Preskel): Preskeletons retain a comment
-	that is given in the input.
-
-2010-01-21  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsa.mk (%.sch): Added a rule that runs CPSA with the
-	Diffie-Hellman algebra for *.sch files.
-
-	* tst/completeness-test.scm: Added new example
-
-2010-01-07  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (copresentVertices): Fixed a bug, and now
-	contractions with ordering codes works, when
-	Cohort.useContractionsWithOrdering is True.
-
-2010-01-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.5.3.
-
-2009-12-21  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (mgus): Enabled mgu filtering on
-	contractions and regular augmentation.
-
-2009-12-20  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs (moreGeneral): Original implementation
-	failed to consider variables in the range of the more general
-	substitution.
-
-2009-12-17  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/Preskeleton.hs (addEdge): In a skeleton diagram,
-	an edge between nodes that do not agree on their message is
-	displayed with a dashed line.
-
-2009-11-16  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.5.2.
-
-2009-11-10  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (precedesCheck): Added the requirement to
-	pruning that ordering relations associated with the more
-	general (pruned) strand are implied by the less general strand.
-
-2009-10-31  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Protocol.hs (Role): Added support for delaying the
-	inheritance of a role non-origination assumption by adding a
-	length specification to role non-origination declarations.
-
-2009-10-26  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.5.1.
-
-2009-10-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (specialization): Generalization no
-	longer uses pruning.
-
-2009-10-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* license.txt: Changed license to BSD.
-
-2009-10-15  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.5.0.
-
-2009-10-14  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/preskel.sh: Added a script to change defpreskeleton to
-	defskeleton.
-
-	* src/CPSA/Lib/Loader.hs (loadSExpr): Changed defpreskeleton
-	keyword to defskeleton.
-
-2009-10-10  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Extra-Source-Files): Added files left out of a
-	distribution so that the documentation compiles.
-
-	* {doc,tst}/README: Added a doc and tst read me
-
-2009-10-03  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (checkOrigs): Isomorphism orig check now
-	uses matching.  Isomorphism checking now works in diffie-hellman.
-
-2009-10-01  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Algebra.hs (encryptions): Encryptions that occur in
-	other encryption are now required to be later in the list.
-
-	* cpsa.cabal (Version): Tagged as version 1.4.9.
-
-2009-09-30  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (roleOrigCheck): Role origination check
-	is now omitted when the inheriting strand is too short to inherit
-	a unique origination assumption.
-
-2009-09-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (useMguFilter): Turned off all mgu
-	filtering for contractions and augmentations.
-
-	* src/CPSA/Lib/Algebra.hs: Changed signature for unification and
-	matching so as to pass through a variable generator for
-	Diffie-Hellman.  Threaded the variable generator throughout the
-	library as needed.
-
-	* src/CPSA/Diffie-Hellman/Algebra.hs:  Added a module for
-	analyzing protocols that use Diffie-Hellman.  Its unifier and
-	matcher make use of fresh variable generation.
-
-2009-09-16  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (mgus): Added a filter that removes
-	non-most general unifiers from a list of contractions after the
-	list has been filtered to ensure each member solves the test.  For
-	each role considered during augmentation, added a filter that
-	removes non-most general unifiers from the list of augmentations
-	after the list has been filtered to ensure each member solves the
-	test.
-
-2009-08-28  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (testDestroyingContractions): Added a
-	filter that removes non-most general unifiers from the generated
-	list of potential contractions.
-
-2009-08-18  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Displayer.hs (displayOpTerm, displayOpTerms): Terms
-	in the operation field may contain variables not in the skeleton.
-	Two functions were added for printing terms is the operation
-	field.  These functions extend the display context as needed.
-
-2009-08-05  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.4.8.
-
-	* tst/{encsig.scm,sigenc.scm}: Added tests for labeled named akey
-	operations.
-
-2009-08-03  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs:  Added labeled named akey operations
-	(pubk STRING ID) and (privk STRING ID).
-
-2009-08-02  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Algebra.hs (lte):  Added more general substitution
-	predicate to the algebra interface.
-
-2009-07-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.4.7.
-
-	* src/CPSA/Lib/Strand.hs (permutations): Reversed the order in
-	which strands are matched, and found a big performance
-	improvement.
-
-	* src/CPSA/Lib/Loader.hs (loadRole): Unused variables in a role
-	are now silently dropped instead of causing an error message.
-
-2009-07-21  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (permutations): Intertwined the
-	computation of permutations with the substitutions that match
-	traces.
-
-2009-07-11  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.4.6.
-
-2009-07-08  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsaprimer.tex (Section Advice): Added a description of how
-	to use CPSA for protocol design and made other improvements.
-
-2009-07-07  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (maybeAug): Use a role's trace as a
-	template instead of generating a fresh instance for that purpose.
-
-2009-07-01  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/LaTeXView.hs (latexView):
-
-2009-06-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Search.hs (solve): The top-level search loop is now
-	implemented in the IO monad using tail recursive functions so as to
-	ensure data is released when it should.
-
-2009-06-21  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Search.hs (solve): Added no isomorphism checking
-	mode (--noisochk).  In noisochk mode, isomorphism checks are
-	avoided by not identifying duplicate skeletons and by not
-	generalizing realized skeletons.
-
-	* src/CPSA/Lib/Search.hs (Params): Collected runtime parameters
-	into a record.
-
-	* src/CPSA/Lib/Search.hs (dump): Dump no longer generalizes
-	realized skeletons.  It just dumps them quickly.
-
-2009-06-19  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (generalize): Perform variable separation
-	last as it could take a long time.
-
-2009-06-17  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsaprimer.tex: Updated the Needham-Schroeder example, added
-	the collapsing operation, and fix other minor problems.
-
-2009-06-14  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsadesign.tex: This document was rewritten.  It now assumes
-	its reader have already read the CPSA specification
-	(doc/cpsaspec.tex).  As a result, it focuses on implementation
-	issues, and leaves correctness issues to the specification.
-
-2009-06-11  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (instRnon,instRunique): Filter
-	origination assumptions using the terms in the instance's trace.
-
-	* src/CPSA/Lib/Strand.hs (separateVariable): Don't memoize subsets
-	computation.  It causes memory problems when a large permutation
-	is used infrequently.
-
-2009-06-10  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.4.5.
-
-2009-05-29  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (isomorphic): Don't memoize
-	permutations--can cause excessive use of memory.
-
-2009-05-28  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Entry.hs: Code common to several programs has been
-	moved into the Entry module and shared.
-
-2009-05-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/{Search.hs,Expand.hs}: CPSA now expands macros
-	rather than using a preprocessor for the task.  The cpsapp program
-	now just pretty prints its input.
-
-	* src/CPSA/Pretty/Main.hs: The source for the cpsapp program has
-	moved into another directory as it no longer macro expands its
-	input.
-
-	* doc/cpsa.mk: Makefile no longer has preprocessor support.
-
-	* doc/cpsaoverview.tex: Add a short overview of CPSA.
-
-	* src/CPSA/Annotations/Formulas.hs (keywords): "t" and "f" are no
-	longer keywords in formulas.  Use (and) for truth and (or) for
-	falsehood.
-
-2009-05-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Macros/Main.hs (prettyPrint): Add -p option so that
-	cpsapp pretty prints without macro expansion.
-
-	* doc/cpsa.mk: Makefile now save preprocessor output.
-
-2009-05-12  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.4.4.
-
-	* cpsa.cabal (Flag par): Changed the default for the par flag to
-	true so that CPSA is compiled with multiprocessor support by
-	default.
-
-2009-05-11  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/SExpr.hs (Tokens): Added strictness annotations
-	that allows the reading of much larger input files and improves
-	performance.
-
-2009-05-10  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (collapse): Added the collapse operation
-	which applies to a shape.  It attempts to unify pairs of strands
-	and searches for shapes starting from the results.
-
-	* src/CPSA/Shapes/Shapes.hs (shapes): Reduced memory requirements
-	by use of shape notes and added support for output in which a
-	shape is a descendent of a shape.
-
-2009-05-09  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Search.hs (commentPreskel): Added a shape note to
-	be used by the cpsashapes program.
-
-2009-05-07  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (hull, enrich, prune): With the
-	correction of the pruning algorithm, the preskeleton reduction
-	rules are now applied in the order of hull, enrich, and then
-	prune.
-
-2009-05-05  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsaspec.tex: Added the sources to the CPSA document that
-	specifies CPSA as a reduction system.
-
-2009-05-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (pruneStrands): The pruning operation
-	now uses a substitution that is idempotent for strands other than
-	the pruned strand.
-
-2009-04-29  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.4.3.
-
-	* src/CPSA/Lib/Cohort.hs (specialization): The homomorphism check
-	is applied to the preskeleton because it matches the strand
-	mapping.  This fixes a bug that reject some valid generalizations.
-
-2009-04-19  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Algebra.hs (Subst): A substitution is now required
-	to be ordered.
-
-	* src/CPSA/Basic/Algebra.hs (unifyChase): The exported version of
-	a substitution no longer requires chasing to find the canonical
-	representative of the equivalence class of variables determined to
-	be equal.  This means there is a canonical representation of an
-	external version of a substitution that is ordered.
-
-	* src/CPSA/Basic/Algebra.hs (substitute): Corrected a bug in
-	substitution associated with variables of sort mesg.  The
-	correction effects tst/dy.scm only.
-
-2009-04-18  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs (IdMap): Use Data.Map Id Term for
-	substitutions instead of association lists.
-
-	* src/CPSA/Basic/Algebra.hs (loadVar): Removed sort "term" as a
-	synonym for "mesg".
-
-2009-04-14  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs (compose):  Corrected a bug in the
-	code that removes the trivial bindings from s2 to form s4.  The
-	fix changes the output for tst/dy.scm.
-
-2009-03-30  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.4.2.
-
-2009-03-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Search.hs (parMap): Added support for SMP
-	parallelism.  To enable, configure with -fpar.
-
-2009-03-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Printer.hs: Added a CPSA specific pretty printer
-	and made it so that the roles in protocols are laid out using the
-	group layout.
-
-2009-03-03  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Pretty.hs (grp): Added support for the group layout
-	and used it for the top-level lists.
-
-2009-03-01  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (unifyTerm): For contraction, the
-	unifyOnPaths function does not check to see if its result has the
-	desired properties and it turns out that sometimes it doesn't.
-	Now unifyTerm repeats its operations until the desired properties
-	hold.
-
-	* src/CPSA/Lib/Cohort.hs (unifyPast): For augmentation, the
-	original unifyPast failed to each to see if the final result has
-	the desired properties, and it turns out that sometimes it
-	doesn't.  Now unifyPast repeats its operations until the desired
-	properties hold.
-
-2009-02-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Loader.hs (loadInsts): Check for preskeletons
-	with no strands.
-
-2009-02-21  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Parameters/Main.hs,Flow.hs: Added a data flow analysis
-	of roles.
-
-2009-02-16  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.4.1.
-
-	* doc/*: Update document to reflect changes.
-
-2009-02-10  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Macros/*.hs: Added the macro preprocessor cpsapp.
-
-2009-02-08  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Annotations/Annotations.hs (loadFormulas): Allow base
-	terms as principals so as to allow keys as principals.
-
-2009-01-03  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (changeLocations): Changed variable
-	separation so that so that two candidates are generated for a
-	location configuration, one that maps the changes to uniques, and
-	the other does not.  This fixes a generalization bug.
-
-2009-01-31  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (solved): The cohort is now filtered so
-	that every member is solved.
-
-2009-01-03  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (changeLocations): When separating a
-	uniquely originating base term, either the term or its clone is
-	uniquely originating.
-
-2008-12-28  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs (Symbol): Removed tag as a sort, and
-	made tags constants of sort mesg.
-
-2008-12-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs (matchVarRenaming): Use sets to
-	improve injective test.
-
-2008-12-09  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.4.0.
-
-2008-12-08  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Search.hs (nextState): Added the --dfs command line
-	option to allow the selection of depth first search.
-
-	* src/CPSA/Graph/SVG.hs (kbutton): Duplicate nodes are now
-	rendered in italic so as to make it easier to distinguish them
-	from tree nodes.
-
-	* src/CPSA/*/{Main.hs,Search.hs}: Added default option values to
-	command line help message.
-
-2008-12-03  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs: Allowed variable declaration forms to
-	declare more than one variable of a given sort.
-
-	* src/CPSA/Basic/Algebra.hs: Added the sort data, a second
-	sort similar to sort text.  The second sort can be used to
-	partition nonce-like data from ordinary text-like data.
-
-	* src/CPSA/Basic/Algebra.hs: Changed the symbol used for the top
-	sort from "term" to "mesg".
-
-	* src/CPSA/Lib/SExpr.hs (isStr): The characters that make up a
-	string are the ASCII printing characters omitting double quote and
-	backslash.
-
-2008-12-02  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Search.hs (nextState): Switched back to
-	breadth-first-search and removed support for parallelism.
-	Breadth-first-search makes it more likely shapes are printed in
-	ill-fated runs.
-
-	* src/CPSA/Graph/Main.hs (interp): Changed the default output
-	format to expanded format.
-
-2008-12-01  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.3.2.
-
-2008-11-30  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (roleOrigCheck): Added new well-formed
-	preskeleton check.  Every uniquely originating role term mapped by
-	an instance must be mapped to a term that originates on the
-	instance's strand.
-
-2008-11-19  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Search.hs (nextState): Switched to
-	depth-first-search by adding freshly generated skeletons to the
-	front of the to do list.
-
-	* src/CPSA/Lib/Strand.hs (isomorphic): Added same number of
-	variables in isomorphism check to speed it up.
-
-	* src/CPSA/Lib/Algebra.hs: (matchVarRenaming) The special purpose
-	renaming detector was eliminated in favor of using matching and
-	predicate that decides if a match is one-to-one and
-	variable-to-variable.
-
-2008-11-16  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (deleteNode): Use the transitive closure
-	of the communication ordering before deleting a node.  This change
-	fixes a minimization bug.
-
-2008-11-14  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.3.1.
-
-	* src/CPSA/Lib/Cohort.hs (addListeners):  Listeners are now added
-	only for the decryption keys of the top most encryptions in the
-	escape set.  This fixes a bug caused by adding listeners for
-	decryption keys of internal encryptions in the escape set.
-
-	* src/CPSA/Lib/Algebra.hs (decryptionKey):  Changed the name from
-	keysUsedBy to reflect the fact only the decryption key from the
-	top most encryption is returned.
-
-	* src/CPSA/Lib/Algebra.hs (protectors): Changed the name from
-	decrypts to better reflect the purpose of the function.
-
-2008-11-10  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Annotations/Annotations.hs (obligations): The alist key
-	theorems was replaced with obligations as it lists the formulas
-	one is obligated to show are theorems to show the protocol is
-	sound.
-
-2008-11-07  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.3.0.
-
-	* doc/cpsauser.html:  Added cpsaannotations documentation.
-
-2008-11-02  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsadesign.tex: Added a complete draft of the algorithm part
-	of the design document.
-
-2008-10-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (deleteNode): When deleting a strand,
-	this function used to apply the inverse of the correct permutation
-	to the prob field, but now applies the correct permutation.
-
-2008-10-19  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/Main.hs (options): Add --compact option to select
-	the use of the compact output format.
-
-2008-10-15  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (targetTerms): Added term extraction from
-	the escape set for use as targets for binding with the carried
-	terms in an outbound when looking for a transforming node.  This
-	change allows CPSA to find the flaw in the Dolev-Yao Example 1.3
-	test case.
-
-2008-10-14  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (augmentations): Changed the augmentation
-	algorithm to use foldCarriedTerms.
-
-	* src/cpsacgi.py: Added expanded graph output to the CGI script.
-	Added support for annotations.
-
-2008-10-13  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/cpsaprimer.tex: The CPSA Tutorial was renamed to the CPSA
-	Primer.
-
-2008-10-08  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (forgetAssumption): Fix a bug that allows
-	assumption forgetting to work again.
-
-2008-10-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Algebra.hs (loadEnc): When enc has more that two
-	terms, a concatenation is added to all but the last term.
-
-	* src/CPSA/Lib/Strand.hs (tryPerm): An isomorphism testing bug was
-	fixed.  The permutation map was applied to the wrong ordering.
-
-2008-10-03  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.2.3.
-
-	* src/CPSA/Graph/ExpandedView.hs (header): The title generated for
-	the expanded view now includes the name of the first protocol to
-	be graphed.
-
-	* src/CPSA/Lib/Search.hs (search): The comment generated for
-	non-default strand bounded or step count limited runs contained
-	an illegal character that has been removed.
-
-	* src/CPSA/Basic/Algebra.hs (displaySubst): This function displays
-	substitutions without requiring that the sort of every variable be
-	known.  The function that infers enough sort information to
-	perform the display was correct, thus fixing a reported bug.
-
-2008-09-30  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Algebra.hs (Context): Changed the interface to
-	contexts to allow them to be extended.  Also, eliminated
-	displayEnv from the Context type class.  It can be written using
-	other functions in the interface.
-
-2008-09-26  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Cohort.hs (transformingNode): The fix on the 22th
-	wasn't right, it unified on all outgoing terms.  The function now
-	unifies an outgoing term only when it is a transforming node.
-
-2008-09-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/*/*.hs:  Loading works with all monads.  With this
-	change, there is no longer a need for using the flexible instances
-	language extension.
-
-2008-09-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.2.2.
-
-2008-09-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Cabal-Version): Updated to use Cabal 1.2 section
-	syntax.
-
-	* src/CPSA/Lib/Cohort.hs (transformingNode): Changed the
-	augmentation algorithm so that it continues looking for more
-	transforming nodes farther down a trace after it finds one
-	transforming node.
-
-	* src/CPSA/Lib/Search.hs (par): Added HAVE_PAR preprocessor symbol
-	which should be defined when Control.Parallel is available.
-
-	* src/CPSA/*/*.hs:  A major code clean up was completed.
-
-2008-09-17  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (Gist): Created a data structure designed
-	to support only skeleton isomorphism checks, thus improving the
-	performance and memory requirements associated with the check.
-
-2008-09-15  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Annotations/*.hs: Added the cpsaannotations program
-	that propagates annotations on protocols to annotations on
-	realized skeletons.
-
-2008-09-06  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Main.hs (main): Algebras export a name and the
-	origin used to generate fresh variables.
-
-2008-08-29  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (weakenOrderings): Corrected a bug by
-	adding the strand succession edges before taking the transitive
-	closure.
-
-2008-08-25  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.2.1.
-
-2008-08-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (weakenOrderings): Changed the weakening
-	algorithm so as to use the transitive closure.  The result is all
-	possible weakenings are considered, and a reported bug was fixed.
-
-2008-08-19  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Graph/ExpandedView.hs (kdrawer): Added the definition
-	of the marker for arrow heads so that arrow heads now appear in
-	preskeleton drawings.
-
-2008-08-18  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.2.0.
-
-	* src/CPSA/Lib/Utilities.hs (permutations): Used permutations from
-	Haskell 1.3 as a model, and ensured the identity permutation is
-	the first one in the result.
-
-	* doc/cpsatutorial.tex, doc/cpsauser.html: Changed the
-	introductions to note that the search for shapes in the current
-	implementation is known to be not complete.  See tst/dy.scm.
-
-2008-08-11  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* tst/Makefile: Changed the file extensions to be consistent with
-	the ones used in doc/cpsa.mk.
-
-	* src/CPSA/Basic/Loader.hs: Added tags as non-atomic terms, and
-	removed tagged concatenation.
-
-	* src/CPSA/Graph/ExpandedView.hs: Added support for the expanded
-	view option (-x) in cpsagraph.
-
-2008-08-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal: Added support for local installation.
-
-	* doc/cpsa.mk: Added GNU Make rules for inclusion.
-
-	* src/CPSA/Lib/Search.hs: Reorganized search loop so that
-	S-expression printing is done outside the search code.
-
-	* src/CPSA/Lib/Search.hs: Modified the abort dump routine so that
-	it minimizes when it is asked to print a realized skeleton.
-
-2008-07-31  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/*/Loader.hs: Ignore top-level S-expression of the form
-	(comment S-EXP*) rather than signal an error so as to allow file
-	level comments as S-expressions.
-
-	* src/CPSA/*/*: Renamed cpsabasic to cpsa, as that program can now
-	provide support for more than one algebra.
-
-2008-07-28  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Algebra.hs: Added foldTerms to interface. It folds
-	a function through a term applying it to each term that occurs in
-	the term.
-
-2008-07-26  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Algebra.hs: Added carriedPlaces and ancestors to
-	the interface and moved existsOnAllPathsToTarget and
-	foldOnAllPathsToTarget to CPSA.Lib.Cohort as they no longer need
-	to be implemented by each algebra.
-
-2008-07-25  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/*/*.hs: Reorganized the algebra interface so that as
-	algebra exports an algebra specific protocol loader so as to allow
-	CPSA to handle more than one algebra at a time.  Algebras are now
-	linked into the program in CPSA.Lib.Main.
-
-2008-07-24  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Search.hs: Added the --bound option to limit the
-	number of strands in a skeleton.
-
-2008-07-15  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (validateSubst): Changed the result of a
-	failure to find a uniquely-originating atom to False rather than
-	an signaling an error.  The addition of unique origination
-	assumption forgetting makes this case no longer an error.
-
-2008-06-16  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Basic/Main.hs (compose): Use algorithm from Handbook of
-	Automated Reasoning, remembering to delete identity bindings.
-
-2008-06-05  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as version 1.1.0.
-
-	* doc/cpsadesign.tex: Added document status and other small
-	improvements in preparation for release.
-
-2008-05-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* doc/strands.mp: Placed strand macros in a separate file.
-
-2008-05-23  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/httpd_allow_execmem.te: Added this SELinux refpolicy module
-	so as to allow Haskell to run as a CGI script.
-
-2008-05-22  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Displayer.hs (displayOperation): Changed the
-	wording for the operation used to derive a skeleton.
-
-2008-05-19  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/cpsa.{sh,py}: CGI scripts modified to work with SELinux.
-
-2008-05-13  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Shapes/Main.hs: Added output margin option.
-
-	* src/CPSA/Lib/Strand.hs (Method): Added a parameter to each
-	minimization method.
-
-2008-05-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Strand.hs (forgetAssumption): Added the
-	origination assumption forgetting minimization operation.
-
-2008-05-04  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Search.hs (options): Added output margin option.
-
-2008-04-30  Joshua D. Guttman  <guttman@mitre.org>
-
-	* src/CPSA/Basic/Main.hs: Re-enabled indeterminates
-
-2008-02-27  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* src/CPSA/Lib/Protocol.hs: Add a comment field in protocols and
-	roles.
-
-2008-02-20  John D. Ramsdell  <ramsdell@mitre.org>
-
-	* cpsa.cabal (Version): Tagged as 1.0.0, the initial release.
+2015-11-23  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/SAS/Main.hs (main): Changed start up so that the herald
+	is read and used to find the correct algebra for further
+	processing.
+
+2015-10-02  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* doc/{index,cpsauser}.html: Added width limit of 48em.
+
+2015-07-09  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Graph/ExpandedView.hs (purgeTraces): By default, the
+	graph program now does not show traces in skeletons.  Added
+	--show-traces option to the graph program, which restores the
+	previous behavior and traces are displayed in skeletons.
+
+2015-07-02  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Algebra.hs: Added constituent to the algebra
+	interface and the algebras.  An atom is a constituent of a term if
+	the atom is among the set of atoms required to construct the term.
+	Changed occursIn so that it just applies to variables.
+
+2015-07-01  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/{Basic,DiffieHellman}/Algebra.hs (occursIn): Restricted
+	first argument of occursIn to variables and atoms and corrected
+	the implementation.
+
+2015-06-30  John D. Ramsdell  <ramsdell@mitre.org>
+
+ 	* cpsa3.cabal (Version): Tagged as 3.2.2.
+
+2015-06-25  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Strand.hs (geq): Removed dynamic role specific test
+	because it erroneously reports violations.  The existing static
+	role specific test correctly does the job.
+
+2015-05-26  John D. Ramsdell  <ramsdell@mitre.org>
+
+ 	* cpsa3.cabal (Version): Tagged as 3.2.1.
+
+	* src/CPSA/DiffieHellman/Algebra.hs (displayTerm):  Made it so
+	that CPSA prints each bltk atoms in a canonical form so that the
+	graph program draws solid arrows when it should.
+
+2015-04-27  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Loader.hs (ReturnFail): Added ReturnFail Monad so
+	that fail is correctly handled.  Added Functor and Applicative
+	instance to support GHC 7.10 base library.
+
+2015-04-20  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Characteristic.hs (mkDcls): Fixed tag for non-orig
+	and pen-non-orig.
+
+2015-04-10  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Strand.hs (mkListener): The role used for listener
+	strands is now the one stored in the protocol.  It has a single
+	variable x of sort mesg as its set of variables.  This change
+	enables satisfaction checking on skeleton that include listeners.
+
+2015-04-07  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Strand.hs (toSkeleton): Removed hulling to the
+	process of converting an input preskeleton into a skeleton as it
+	causes bugs in printing.
+
+	* Imported CPSA2's implementation of goals and expunged support
+	for subgoals.
+
+2015-03-27  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Strand.hs (toSkeleton): Added hulling to the
+	process of converting an input preskeleton into a skeleton.
+
+2015-03-25  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Goal.hs: Added uniq to goal language.
+
+2015-03-17  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/SAS/SAS.hs (form): Generate a defsas form rather than a
+	naked sentence.
+
+	* src/CPSA/Lib/Loader.hs (loadPrimary): Renamed equals function
+	symbol to =.
+
+2015-03-05  John D. Ramsdell  <ramsdell@mitre.org>
+
+ 	* cpsa3.cabal (Version): Tagged as 3.2.0.
+
+2015-02-20  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* Added support for subgoals within point-of-view skeletons.  The
+	subgoals are evaluated for each shape, and (satisfies-a-subgoal)
+	is added to a shape when it satisfies one of the subgoals.
+
+2014-12-11  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Entry.hs (defaultOptions): Changed the default
+	strand bound to 12.
+
+2014-11-15  John D.  Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/SAS/SAS.hs: Changed the language used for a shape
+	analysis sentence to be node-oriented.
+
+2014-11-07  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Loader.hs (loadPriorities): Allowed priority
+	declarations on state synchronization nodes other than
+	initiatizers.
+
+2014-11-07  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Cohort.hs (explainable): Added the nodes reachable
+	by strand succession so that a transition can be explained by a
+	previous transition within a strand.
+
+2014-10-31  John D. Ramsdell  <ramsdell@mitre.org>
+
+	*  Changed the name of the logic producing program to cpsa3sas.
+
+2014-09-01  John D.  Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/Strand.hs (noStateSplit): An observer node should have
+	at most one transition node after it too.
+
+2014-08-31  John D.  Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/State.hs: Made labels optional.  Use "tran" for
+	state synchronization events with labels, and "sync" for ones
+	without.
+
+2014-08-29  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/Lib/*.hs: Added support for analyzing protocols with
+	state.  A state synchronization event sync was added to the events
+	that can occur in a trace, along with a new method for state-based
+	augmentation.  An example using sync events is in
+	tst/envelope.scm.
+
+2014-08-26  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* cpsa3.cabal:  Removed cpsaparameters program.
+
+2014-08-25  John D.  Ramsdell  <ramsdell@mitre.org>
+
+	* src/split.py: Added the skeleton split program that copies the
+	skeletons in a CPSA source file into separate files.
+
+2014-08-23  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/cpsajson.py (load): Added a reader in Python for JSON
+	produced by CPSA's pretty printer program cpsa3pp -j.
+
+2014-08-22  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPSA/JSON/Main.hs: Added the program cpsa3json that
+	translates JSON encoded CPSA into CPSA S-Expressions.  It expects
+	the JSON input to follow the conventions of the JSON produced by
+	the cpsapp program when given the -j option.
+
+	* src/CPSA/Lib/SExpr.hs (numOrSym): Enabled parsing a number with
+	a plus sign by removing the sign before translating the string of
+	digits into a number.
+
+2014-06-12  John D.  Ramsdell  <ramsdell@mitre.org>
+
+	* cpsa3.cabal (Version): Tagged as 3.0.3.
+
+2014-02-06  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* cpsa3.cabal (Version): Tagged as 3.0.2.
+
+2013-12-14  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* cpsa3.cabal (Version): Tagged as 3.0.1.
+
+	* cpsa3.cabal (Extra-Source-Files): Added more DH tests
+
+2013-03-12  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPET/Annotations/Annotations.hs (obligation): Replaced an
+	irrefutable pattern that raised an exception with a maybeToList.
+
+2013-02-21  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/CPET/DiffieHellman/Algebra.hs: Added the Diffie-Hellman
+	algebra based on Abelian groups.
+
+	* src/CPET/Basic/Algebra.hs:  Removed support for GHC 6.x.
+
+2013-02-06  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* cpet.cabal (Version): Tagged as 0.0.0.
+
diff --git a/NEWS b/NEWS
--- a/NEWS
+++ b/NEWS
@@ -1,855 +1,31 @@
-CPSA NEWS -- history of user-visible changes.
-
-* Changes in version 2.5.3
-
-** Corrected errors in the documentation on security goals.
-
-** Enabled compilation using GHC 7.10 by making some monads
-   applicative.
-
-* Changes in version 2.5.2
-
-** Added an option to purge traces in skeletons while graphing
-   In cpsagraph, supplying the --purge-traces option causes skeletons
-   to be printed without their traces.  This saves on clutter when
-   traces are large and unused.
-
-** Updated README to reflect that Haskell Platform should always be used.
-   It's available everywhere now.
-
-* Changes in version 2.5.1
-
-** CPSA Goals document updated
-
-* Changes in version 2.5.0
-
-** Added support for security goals
-   In CPSA, a security goal is expressed as a sentence in first-order
-   logic.  It asserts that if some properties hold for a skeleton,
-   then some other properties must hold for all shapes computed by
-   CPSA starting with the skeleton.  Security goals can be used to
-   formally state authentication and secrecy goals of a protocol.
-   
-   Security goals have been integrated into the main CPSA program.
-   The new defgoal form can be used to pose an analysis problem by a
-   sentence instead of a skeleton.  CPSA extracts a point-of-view
-   skeleton from the antecedent of the formula and then analyzes it.
-   When it prints a shape, it checks to see if the shape satisfies the
-   conclusion of the security goal.  See cpsagoals.pdf for more
-   information.
-
-* Changes in version 2.4.0
-
-** Added program cpsasas
-   The cpsasas program extracts a formula in the language of
-   order-sorted first-order logic for each problem and its shapes from
-   a CPSA run. The formula is called a shape analysis sentence. The
-   formula is modeled by all realized skeletons when CPSA finds all
-   the shapes for the problem.  The sentence can be use with an
-   automated first-order theorem prover to verify security goals
-   associated with a protocol.
-
-   This formula extractor uses a node-oriented language, rather than a
-   strand-orient language.  The new language integrates well with
-   other work on security goals and better supports protocol
-   transformations.
-
-** Program cpsalogic removed
-   The strand-oriented formula extractor has been removed.
-
-* Changes in version 2.3.5
-
-** Added a translator from JSON to CPSA S-Expressions
-
-   When given the -j option, the program cpsapp translates
-   S-Expressions into JavaScript Object Notation (JSON) to ease
-   processing in other languages.  The new program cpsajson translates
-   JSON encoded CPSA into CPSA S-Expressions.
-
-   An example of using JSON for input and output in Python is in
-   src/split.pl.  This program copies the skeletons in a CPSA source
-   file into separate files.
-
-* Changes in version 2.3.4
-
-** Splicing added to macros
-
-   The macro expander supports splicing.  The splicing character is
-   '^'.  Example: (a ^(b c) d) becomes (a b c d) after macro
-   expansion.
-
-** Diffie-Hellman algebra is disabled
-   The implementation has never worked well enough to be anything but
-   experimental, so it is now enabled via a compile-time switch.
-
-* Changes in version 2.3.3
-
-** Thinning has replaced pruning
-   Pruning was shown to be incorrect, so it has been replaced by
-   thinning.  Two strands are said to be effectively equivalent if the
-   result of removing one is isomorphic to removing the other.
-   Thinning removes one of the strands.  CPSA also implements a
-   multi-strand version of this idea.
-
-* Changes in version 2.3.2
-
-** Bug fixed in prover9
-   A bug was introduced in 2.3.1 that caused it to fail when the input
-   contains a tag.
-
-* Changes in version 2.3.1
-
-** Bug in priority ordering fixed
-   This version reverses the sort predicate so that high numbered
-   priorities are considered first.  Nodes of priority zero will never
-   be solved.
-
-** This version fixes a bug in cohort filtering
-   There may be changes to your output as the fix often produces more
-   skeletons.
-
-* Changes in version 2.3.0
-
-** Priorities for influencing search order added
-   The priority form in roles and skeletons allows the search to focus
-   on specific nodes of interest.
-
-** Role non-origination with position changed
-   A non-origination assumption of the form (3 a) now means the
-   assumption is add when the height of the strand is greater that 3.
-   It used to be added when the height of the strand is at least three.
-
-** Shape Analysis Sentence to Prover9 translator improved
-   Changed the formula translation algorithm so that predicates for
-   the sort declarations of variables are added to generated formulas.
-   Previously, the sort information was ignored.
-
-** Bug fixed in cpsaannotations
-
-* Changes in version 2.2.13
-
-** Better support for Cygwin users
-   Added optional extension for Cygwin users.  On Cygwin, put "export
-   EXE=.exe" in a startup file.
-
-** Bug fixed in src/perm.pl
-
-* Changes in version 2.2.12
-
-** Documentation improved
-   The introductory documentation has been improved and a set of
-   slides has been added that is aimed at new users.
-
-** JavaScript Object Notation (JSON) output supported
-   The CPSA pretty printer cpsapp produces JSON output when given the
-   -j or --json command-line option.  A CPSA string translates to a
-   JSON string in which the first and last characters are a double
-   quote.  A CPSA symbol translates directly to a JSON string.
-
-* Changes in version 2.2.11
-
-** Strand bounded runs produce more output
-   When a problem exceeds a strand bound, CPSA now produces every
-   skeleton within the strand bound before aborting.  Previously, it
-   would abort as soon as it produced one skeleton with too many
-   strands.  The output skeletons are no longer guaranteed to be
-   sequentially labeled when a strand bound violation occurs.
-
-** Include file support added
-   The CPSA preprocessor includes files as it expands macros.  The
-   syntax of the top-level include form is:
-
-       (include FILE)
-
-** The source file name is included as a comment in the output of CPSA
-
-* Changes in version 2.2.10
-
-** The Make.hs program now works with latest Haskell Platform
-   The imports have been changed so that it no longer uses the
-   haskell98 package, which is now hidden by default.
-
-* Changes in version 2.2.9
-
-** Penetrator non-origination assumptions added
-   Atoms declared to be pen-non-orig cannot be originated by the
-   adversary but can carried.  An atom assumed to be penetrator
-   non-originating can be used to model passwords and similar
-   concepts.  Several regular participants might know a password and
-   originate it in a run of a protocol, but an idealized password is
-   one the penetrator cannot guess.
-
-** Collapsing is performed before test solving
-   Previously, collapsing was performed on shapes and shapes that
-   could have been derived via a dead skeleton and collapsing where
-   missed.  For an example, see tst/preprocess.scm.
-
-** Disabling displacement option retired
-   The command-line option that disabled displacement has been removed.
-
-* Changes in version 2.2.8
-
-** Performance enhancement
-   In special circumstances, the generalization method called variable
-   separation takes too long.  A bound has been added that limits the
-   number of attempts to separate variables.  The result is CPSA may
-   report a skeleton is a shape when another is more general.
-
-** Pruning bug fixed
-   Pruning is never supposed to apply to strands in the image of the
-   point-of-view skeleton, but previous version did so.
-
-* Changes in version 2.2.7
-
-** A bug in the matcher in each algebra was repaired
-   There was a missing case involving asymmetric key inverse that
-   caused an erroneous matching failure.
-
-** Compiler warnings eliminated
-   The C preprocessor is now used to eliminate the warning that
-   the use of Data.Map.foldWithKey is deprecated while preserving the
-   ability to compile CPSA using GHC 6.x.
-
-** Diffie-Hellman algebra bug fixed
-   CPSA produces two listeners for the term (exp (exp (gen) x) y),
-   instead of one as it used to.  Test case tst/dhke.scm shows the bug
-   has been fixed.
-
-** Diffie-Hellman algebra documentation added
-   The document titled "Simple Diffie-Hellman Algebra" is in cpsasdha.pdf.
-
-* Changes in version 2.2.6
-
-** SVG tooltips work once again
-   The generated SVG diagrams display a tooltip for each role and node
-   in a skeleton.  The method used for specifying a tooltip stopped
-   working in recent versions of Firefox, so a new method was
-   implemented.  Tests show Chrome and IE 9 also now correctly display
-   tooltips.
-
-* Changes in version 2.2.5
-
-** Support for hashing added
-   Both the Basic and Diffie-Hellman term algebras have a new function
-   symbol hash that provides support for hashing.  The term (hash X)
-   is treated as a kind of encryption in which the term X is the
-   encryption key.
-
-* Changes in version 2.2.4
-
-** GHC link time option added
-   For GHC version 7.0.0 or greater, some runtime options used by CPSA
-   were turned off by default due to security concerns irrelevant to
-   CPSA.  The runtime options are now enabled.
-
-** Shape Analysis Sentences
-   The orig predicate was added to a description of a skeleton.
-   Without it, the important property of a shape analysis sentence
-   described in Theorem B.1 of The CPSA Specification does not hold.
-
-   Also, the Prolog program src/prover9.pl was added.  It translates
-   cpsalogic output into prover9 syntax.
-
-* Changes in version 2.2.3
-
-** New program added
-   The cpsalogic program extracts a formula in the language of
-   order-sorted first-order logic for each problem and its shapes from
-   a CPSA run. The formula is called a shape analysis sentence. The
-   formula is modeled by all realized skeletons when CPSA finds all
-   the shapes for the problem.  The sentence can be use with an
-   automated first-order theorem prover to verify security goals
-   associated with a protocol.
-
-   To support the cpsalogic program, cpsa was modified so that for
-   each shape, it prints a homomorphism from the point-of-view
-   skeleton to the shape.
-
-** Documentation updated
-   The CPSA Specification was extensively rewritten to improve
-   readability and reflect the current code base.  Appendix B was
-   added.  It describes the theory behind shape analysis sentences and
-   cpsalogic.
-
-   The CPSA Design was updated to reflect the current code base and a
-   section was added that describes the modules in the source code.
-
-** Pruning bug fixed
-   A coding error that lead to unjustified pruning has been fixed.
-
-* Changes in version 2.2.2
-
-** Completeness problem corrected
-   Added an new condition to the solved filter so that CPSA now finds
-   the shape in targetterms8.
-
-** Performance problem corrected
-   Corrected a memory consumption problem exhibited by Wang's Fair
-   Exchange Protocol.  Before the correction, CPSA used 1.9GB of
-   memory, afterwords, it uses 3MB.
-
-** Non-ASCII accepted as input
-   Non-ASCII letters are accepted as constituents of symbols and
-   strings.
-
-* Changes in version 2.2.1
-
-** Web graph output extension changed from .xml to .xhtml
-   Firefox works better with this file extension.
-
-** No HTML5 sliders
-   The zoom option for cpsagraph no longer generates HTML5 sliders due
-   to changes designed to make large documents load faster.
-
-** Program cpsagraph tree construction algorithm improved
-   The time and space used to form derivation trees has been reduced.
-
-** Treeless option added to cpsagraph
-   For input too large to process otherwise, option --treeless
-   generates an XHTML document without trees, and therefore uses less
-   memory.  It works as long as each skeleton in the input fits into
-   memory.  The default XHTML generator requires that all skeletons
-   fit in memory simultaneously.
-
-** Output bug in cpsadiff fixed
-   A bug in cpsadiff that caused it to fail to print all of its output
-   before it exited has been fixed.
-
-* Changes in version 2.2.0
-
-** Pruning reverted to CPSA 2.1.0 behavior
-   Pruning once again occurs after contractions and listener
-   augmentations.  We found examples where it is essential to prune
-   after a contraction.  We are exploring other ways of addressing the
-   completeness problems due to pruning.
-
-** Runtime options can be specified within a file
-   The herald form has been added.  It allows one to specify most of
-   the options currently specified on the command line within a file.
-   For example, to specify the option --bound=12 within a file, write:
-
-   (herald "Needham-Schroeder Public-Key Protocol" (bound 12))
-
-** Role annotation influences test node search algorithm
-   If a role includes (reverse-search) in its association list, the
-   order in which the nodes of a strand that is an instance of this
-   role is search for a test node will be reversed.  By default, CPSA
-   selects the earliest test node in a strand, but with this
-   annotation, it will select the latest one.
-
-** CPSA specific diff program added
-   The program cpsadiff has been added.  The program compares two CPSA
-   output files S-expression by S-expression, and prints the first
-   skeleton that differs.  For Windows users, there is now a diff
-   program available without installing MSYS or Cygwin.
-
-** Some programs gently handle incomplete S-expressions
-   When a CPSA run is aborted, it may produce an incomplete
-   S-expression.  The programs cpsagraph, cpsashapes, and cpsapp,
-   treat an incomplete S-expression as end-of-file, and print a
-   warning message.  This change makes it easier to analyze runs that
-   fail to terminate.
-
-** Blue marks realized reception nodes
-   The program cpsagraph uses the color blue to distinguish realized
-   reception nodes from transmission nodes.
-
-** Diagram scalers added
-   When viewing large outputs in cpsagraph's expanded format, by
-   supplying the --zoom option, one gets controls that allow SVG
-   diagrams to be scaled.
-
-* Changes in version 2.1.2
-
-** Displacement on by default
-Displacement is on by default and the sense of the -d switch has been
-changed.  It now disables displacement.
-
-** Diffie-Hellman support changed
-Previous support for Diffie-Hellman had serious problems for which we
-have no solutions at this time.  We recognize now that the concepts of
-unique origination and non-origination as currently defined do not fit
-in well with an implementation of Diffie-Hellman in which exponents
-are an Abelian group.
-
-For now, we provide simplified Diffie-Hellman support with an algebra
-that has an equation for the commutativity of exponents, but no other
-equation.
-
-	    (exp (exp (gen) x) y) = (exp (exp (gen) y) x)
-
-This algebra is an attempt to provide some kind of Diffie-Hellman
-support within the current framework while we search for the proper
-framework.
-
-* Changes in version 2.1.1
-
-** Graph program handles incomplete output
-The graph program no longer requires that every seen child mentioned
-in the output is in it.  Therefore, the program can handle output from
-some interrupted runs.
-
-** Pruning restriction
-We found examples in which pruning prevented us from finding some
-shapes.  Pruning is now performed only after augmentation, and only
-when the augmented strand is involved.
-
-** Compact output notation
-There is a new infix notation for XHTML and LaTeX output that is more
-compact, and hopefully more readable for large problems.  Enable it by
-specifying the -i flag when invoking cpsagraph or cpsapp.
-
-* Changes in version 2.1.0
-
-** Initial comments displayed
-The graph program displays the initial comments in an input file.
-
-** New command line options
-Four new command line options have been added:
-
-   -d         --displacement     enable displacement
-   -c         --check-nonces     check nonces first
-   -t         --try-old-strands  try old strands first
-   -r         --reverse-nodes    try old nodes first
-
-In rare cases, the use of one of these options may allow normal
-termination in a case in which CPSA aborts otherwise.
-
-** GHC 6.8 no longer supported
-Use GHC 6.10 or greater.
-
-** Bugs fixes
-Some minor bugs were fixed that mostly effect artificially generated
-protocols.
-
-* Changes in version 2.0.5
-
-** Performance enhanced
-A source of duplicated effort was removed that reduces the run time
-for analyzing the NSL5 protocol from about a day to about a minute!
-The enhancement doesn't seem to effect the run times of many other
-protocols.
-
-** Bugs fixes
-Some minor bugs were fixed, and there are now no tests in the test
-suite that shows that CPSA fails to find a shape in should.
-
-** CPSA theory document added
-A document on authentication tests has been added.  The document is
-not installed are the CPSA Specification and the CPSA Design documents.
-The sources for the document are provided, and must be built by typing
-make in the doc directory.
-
-* Changes in version 2.0.4
-
-** Input skeletons are no longer pruned
-
-** Bug in the acyclic graph checker fixed
-In rare cases, the buggy checker allowed skeletons with circular
-node orderings.
-
-* Changes in version 2.0.3
-
-** Generalization bug fixed
-A bug associated with origination assumption forgetting has been
-fixed.
-
-** SWI Prolog tools added
-Tools that allows CPSA to be manipulated in Prolog are in the src
-directory.  The tools include a pretty printer that uses the same
-algorithm as is used in the Haskell pretty printer.
-
-** Cabal description improved
-An expanded description of CPSA has been added to its cabal file.
-
-* Changes in version 2.0.2
-
-** Better message terms in graphs
-CPSA graph now uses the information in the traces comment when it's
-available when printing message terms.
-
-* Changes in version 2.0.1
-
-** Inherited unique origination bug fixed
-Added check that unique origination position is preserved by
-inheritance.
-
-** Variable printing improved
-Improved renaming algorithm used to avoid collisions while printing
-variables.
-
-* Changes in version 2.0.0
-
-** CPSA is an open source package
-
-** Better support for Diffie-Hellman
-Makefiles use the *.sch the extension for problems that use
-Diffie-Hellman.
-
-* Changes in version 1.5.5
-
-** Encryption tests solved before nonce tests
-CPSA now solves encryption tests before it tries nonce tests.
-Experiments have show this heuristic can lead to substantially smaller
-derivation trees in some cases, but in a few cases, derivation trees
-are slightly larger.
-
-** Better error messages for ill-formed roles and preskeletons
-CPSA generates a more informative message when a role or a preskeleton
-is not well-formed.
-
-* Changes in version 1.5.4
-
-** Pruning bug fixed
-A check that origination assumptions are honored by the homomorphisms
-associated with pruning was added.  As a result, cases in which
-erroneous pruning was performed have been eliminated.
-
-** Comments in skeletons are preserved
-The comment field in a skeleton given as input is included when it is
-printed.
-
-* Changes in version 1.5.3
-
-** Skeleton diagrams improved
-In a skeleton diagram, an edge between nodes that do not agree on
-their message is displayed with a dashed line.
-
-** Less general skeletons removed from cohort
-During contraction and regular augmentation, some skeletons that are
-less general than others are removed from consideration.  These
-skeletons contribute nothing new.
-
-* Changes in version 1.5.2
-
-** Pruning bug fixed
-Added the requirement to pruning that ordering relations associated
-with the more general (pruned) strand are implied by the less general
-strand.
-
-** Role non-orig length specification added
-Added support for delaying the inheritance of a role non-origination
-assumption by adding a length specification to role non-origination
-declarations.  The non-orig assumption is inherited when the strand
-meets the length requirement.
-
-* Changes in version 1.5.1
-
-** Generalization bug fixed
-CPSA no longer prunes while generalizing.
-
-** Change license to BSD
-
-* Changes in version 1.5.0
-
-** Diffie-Hellman algebra added
-This is an early access release of the Diffie-Hellman algebra.  Its
-signature is described in the CPSA User Guide.  It has only been
-tested on the example in tst/dh.lisp, and the output seems reasonable.
-
-** Keyword defpreskeleton changed to defskeleton
-Most often, the defpreskeleton form described a skeleton.  To reduce
-confusion, form has been renamed.  The CPSA program still accepts the
-old keyword.  A script that updates the keyword is in src/preskel.sh.
-
-* Changes in version 1.4.9
-This version is a bug fix and speed enhancement fix only.
-
-** Obscure display bug fixed
-
-** Role origination check bug fixed
-The origination check is now omitted when the inheriting strand is too
-short to inherit a unique origination assumption.
-
-** Role origination check bug fixed
-
-** Outer most encryptions preferred for encryption tests
-When choosing among encryptions for critical messages, CPSA prefers
-outer most encryptions over ones within another encryption.
-
-* Changes in version 1.4.8
-
-** Support for key usage added
-A name may be associated with more than one asymmetric key using the
-binary form of pubk, where the first argument is a quoted constant.
-For example, (pubk "sig" a) and (pubk "enc" a) can be used to describe
-name a's public signature and encryption key.
-
-** Progressive refinement technique described
-The advice section of the CPSA Primer describes the progressive
-refinement technique.
-
-* Changes in version 1.4.7
-
-** Unused role variables are silently ignored
-Unused role variables used to cause an error.  This behavior
-interfered with the practice of submitting output as input with small
-modifications.
-
-** Isomorphism check performance improved
-
-** Added an overview section to the CPSA Specification
-
-* Changes in version 1.4.6
-
-** Added no isomorphism checking mode (--noisochk)
-In noisochk mode, isomorphism checks are avoided by not identifying
-duplicate skeletons and by not generalizing realized skeletons.
-Isomorphism checks between two skeletons with a large number of
-strands can take a long time, so for some problems, CPSA runs faster
-in this mode.  Warning, in this mode, CPSA reports that each realized
-skeleton is a shape even when it is not one.  In this way, the
-cpsashapes program can be used to extract the realized skeletons from
-the run.
-
-** Added LaTeX output mode to cpsagraph
-The cpsagraph program generates LaTeX source that places S-expressions
-in verbatim environments and generates XY-pic diagrams of skeletons.
-The XHTML output should always be preferred, however, LaTeX output is
-useful when generating a report or a briefing on the results of using
-CPSA.
-
-** CPSA Primer updated
-The example output has been updated to reflect recent changes,
-numerous editorial improvements were made, and the advice section
-has been augmented with some recently learned tricks.
-
-** CPSA algorithm specified
-At last.  The CPSA Specification contains a specification of all of
-the parts of the CPSA algorithm.  In particular, a description of
-the augmentation algorithm is in writing.
-
-** CPSA Design rewritten
-Most of the material that was once duplicated in both The CPSA
-Specification and The CPSA Design has been purged from the design
-document.  The document now assumes its reader have already read The
-CPSA Specification.  As a result, it focuses solely on implementation
-issues, and leaves correctness issues to the specification.
-
-** Aborted output is no longer generalized
-CPSA will abort when a strand bound or a step count is exceeded.
-Since generalization involves isomorphism checks, the old abort
-implementation could take a very long time to finish.
-
-* Changes in version 1.4.5
-
-** CPSA macros expanded by cpsa program
-CPSA now expands macros rather than using a preprocessor for the task.
-The cpsapp program now just pretty prints its input.
-
-** Memory leak fixed
-Permutations no longer memoized--can cause excessive use of memory.
-
-** In rely/guarantee formulas, "t" and "f" are no longer keywords
-Use (and) for truth and (or) for falsehood.
-
-* Changes in version 1.4.4
-This is a correctness critical update to CPSA.
-
-** Shape search design error fixed.
-The shape search algorithm includes a new shape collapsing operation
-that allows CPSA to find shapes it used to miss.  The operation
-includes the symbol "collapsed" followed by the two strands that were
-merged.  The Otway-Rees example in tst/or.scm makes use of the new
-operation.
-
-** Pruning bug fixed.
-The pruning operation now uses a substitution that is idempotent for
-strands other than the pruned strand.
-
-** Specification document added.
-The sources to the CPSA document that specifies CPSA as a reduction
-system are now included and can be used to build doc/cpsaspec.pdf.
-
-** S-expression reader bug fixed.
-The S-expression reader now reads much larger input files.  This means
-cpsashapes can be used on larger files.
-
-** Multiprocessor enabled CPSA built by default.
-See the README for instructions on how to build CPSA when the parallel
-libraries are missing.
-
-* Changes in version 1.4.3
-
-** Improved performance due to better substitution data structure.
-
-** Corrected a bug in substitution associated with variables of sort mesg.
-The fix changes the output for tst/dy.scm.
-
-** Corrected a bug in substitution composition
-The fix changes the output for tst/dy.scm.
-
-** Corrected a bug that caused some valid generalizations to be rejected.
-
-** Sort "term" is no longer a synonym for "mesg".
-
-* Changes in version 1.4.2
-
-** Fixed a contraction and an augmentation bug.
-
-** The protocol specification checker cpsaparameters added.
-The cpsaparameters program detects some specification errors by
-performing a base term usage analysis.
-
-** Parallel search available on SMPs.
-Semi-explicit parallelism annotations were added to the CPSA search
-routine.  Enable with -fpar during configuration.
-
-** Pretty printer changed.
-All lists in a defrole and a defpreskeleton are now broken whenever
-one of them is.
-
-** Preskeletons	with no strands are detected, and an error is signaled.
-
-* Changes in version 1.4.1
-
-** The macro preprocessor cpsapp added.
-The preprocessor was added to ease the task of specifying protocols
-with reoccurring message patterns. It can also be used to pretty print
-cpsa input.
-
-** Base terms allowed as principals in annotations.
-Base terms as principals are now allowed so as to allow keys as
-principals.
-
-** Cohort filtering added.
-The cohort is now filtered so that every member is solved.  The
-filtering removes dead ends earlier in the computation.
-
-** Fixed a minimization bug.
-When separating a uniquely originating base term, either the term or
-its clone is uniquely originating.
-
-* Changes in version 1.4.0
-
-** Variable declaration syntax changed.
-More than one variable can be declared to be of a given sort in a
-single declaration form.
-
-** New sort added.
-The sort data was added, a sort that is similar to sort text.  The new
-sort can be used to partition nonce-like data from ordinary text-like
-data.  See tst/epmo.scm for an example of its use.
-
-** Sort symbol changed.
-The symbol used for the top sort has been changed from term to mesg.
-
-** Default output format for cpsagraph changed.
-The default output format for cpsagraph is now the expanded format.
-
-* Changes in version 1.3.2
-This is a bug fix only release.
-
-** Fixed a minimization bug.
-Use the transitive closure of the communication ordering before
-deleting a node.
-
-** Added new well-formed preskeleton check.
-Every uniquely originating role term mapped by in instance must be
-mapped to a term that originates on the instance's strand.
-
-* Changes in version 1.3.1
-This is a bug fix only release.
-
-** Bad listener augmentation bug fixed.
-Listeners are now added only for the decryption keys of the top most
-encryptions in the escape set.  This fixes a bug reported by Eric Bush.
-
-* Changes in version 1.3.0
-This release changes the external syntax and fixes bugs.
-
-** Encryption syntax simplified.
-To reduce clutter, when enc has more that two terms, a concatenation
-is added to all but the last term.
-
-** New name for document.
-The CPSA Tutorial was renamed to the CPSA Primer.
-
-** The cpsaannotations program has documentation.
-Preliminary documentation is in the CPSA User Guide.
-
-** A make system for Windows was added.
-The file doc/Make.hs allows the use of Windows without Cygwin or MinGW.
-
-** A strand augmentation bug was fixed.
-This change allows CPSA to find the flaw in the Dolev-Yao Example 1.3
-test case.
-
-** Assumption forgetting works again.
-This is a fix to a bug that was introduced in the previous release.
-
-** Isomorphism bug fixed.
-A strand permutation map was applied to the wrong ordering.
-
-* Changes in version 1.2.3
-This is a bug fix only release.
-
-** Illegal comments no longer generated.
-The comment generated for non-default strand bounded or step count
-limited runs contained an illegal character that has been removed.
-As a result, the graphing programs work again.
-
-** A substitution printing failure has been fix.
-
-** The augmentation bug fix in 1.2.2 had a problem that is now fixed.
-
-** Role variables in protocols are printing in the order they were read.
-In previous version, role variables were printed in reverse order.
-
-** Better title generated for the expanded view.
-The name of the first protocol is included in the title of the
-generated XML document.
-
-** Testing showed enabling multiprocess support gives no speedup.
-
-* Changes in version 1.2.2
-
-** This release fixes a bug.
-During augmentation, previously, when a role was searched for a
-transforming edge, only the shortest instance was returned as a
-candidate for augmentation.  Now all instances are returned.
-
-** Multiprocessor support is available.
-The README describes how to enable multiprocessor support.  This
-feature is untested.
-
-** Partial support for Rely-Guarantee annotations has been added.
-The cpsaannotations program annotates shapes when given an annotated
-protocol.  The is no documentation yet, but you can test it with:
-$ (cd tst; make epmo-accounts-nums_annotations.xml)
-
-* Changes in version 1.2.1
-
-** This is a bug fix release. There are no user-visible changes.
-
-* Changes in version 1.2.0
-
-** Tags are now non-atomic terms in the Basic Crypto Algebra.
-
-** The expanded view (-x) option is available as an output for cpsagraph.
-
-** Support for local installation was added.
-
-** A standard set of GNU Make rules was added.
-
-** Comments as S-expressions may appear at the file level of input.
+CPSA NEWS
 
-** The program cpsabasic was renamed to cpsa.
+  February, 2016: CPSA version 3 released to the public.
 
-** The --bound option to cpsa limits the number of strands in a skeleton.
+Version 3 of CPSA is a major update to the tool including many new features.
+The most important new features included are:
 
-** The current shape search is known to be not complete. See tst/dy.scm.
+* Working support for Diffie-Hellman components in protocols, with two
+  main restrictions: first, exponent multiplication is modeled but
+  exponent addition is not, and second, that "bare" exponents are not
+  allowed.  This means that exponents in a role or skeleton must be
+  found within an exponentiation, and not directly (e.g. as in a pair
+  or encryption).
 
-* Changes in version 1.1.0
+* Support for protocols that interact with long-term state
 
-** Support for indeterminates was added to the Basic Crypto Algebra.
-Variables of sort term, also called indeterminates, are now available
-in the Basic Crypto Algebra.
+* Bidirectional long-term keys, in which the order of the two names is
+  ignored.  This more appropriately models shared symmetric keys in a
+  setting where participants are not clearly distinguishable as
+  clients or servers.
 
-** The CPSA Tutorial was added.
+* Numerous declarable constraints that allow a user to more carefully
+  limit the tool's search to executions of interest.  Including:
+  - inequality of values
+  - functional relationships between values
+  - a new type of secrecy assumption for potentially leakable long-term secrets
 
-* Initial version released as version 1.0.0
+* New, improved documentation.  Included with the release is the CPSA
+  manual which thoroughly documents the new and existing features of
+  the tool and is also a good starting place for new users.
 
-Local variables:
-mode:outline
-End:
diff --git a/README b/README
deleted file mode 100644
--- a/README
+++ /dev/null
@@ -1,144 +0,0 @@
-CPSA: A Crptographic Protocol Shapes Analyzer
-
-This program has been built and tested using Haskell Platform.
-It is available from <http://haskell.org> or from an operating
-system specific source.  The name of the Linux package is usually
-haskell-platform.
-
-$ cabal update
-$ cabal install cpsa
-: Documentation and samples are in the directory given by
-$ cpsa -h
-
-INSTALLING FROM A TARBALL
-
-QUICK START (Linux)
-
-: To build and install CPSA type:
-$ make
-$ make install
-
-: To analyze a protocol you have put in prob.scm type:
-$ cpsa -o prob.txt prob.scm
-$ cpsagraph -o prob.xhtml prob.txt
-$ firefox -remote "openFile(`pwd`/prob.xhtml)"
-
-: Documentation and samples are in the directory given by
-$ cpsa -h
-
-: To view the user guide:
-$ firefox -remote "openFile($HOME/share/cpsa-X.Y.Z/doc/cpsauser.html)"
-: where X.Y.Z is the CPSA version number.
-
-QUICK START (Mac)
-
-: To build and install CPSA type:
-$ make
-$ make install
-
-: To analyze a protocol you have put in prob.scm type:
-$ cpsa -o prob.txt prob.scm
-$ cpsagraph -o prob.xhtml prob.txt
-$ open prob.xhtml
-
-: Documentation and samples are in the directory given by
-$ cpsa -h
-
-: To view the user guide:
-$ open $HOME/share/cpsa-X.Y.Z/doc/cpsauser.html
-: where X.Y.Z is the CPSA version number.
-
-QUICK START (Windows)
-
-With Cygwin or MinGW, the installation is similar to the Linux
-install.  The software has been tested on a Windows system on which
-neither MinGW or Cygwin has been installed.  Install Haskell Platform
-and then run the "setup.bat" batch file with administrator privileges.
-
-If you do not have administrator privileges, run:
-
-C:\...> runghc Setup.hs configure --user --prefix="DIRECTORY"
-C:\...> runghc Setup.hs build
-C:\...> runghc Setup.hs install
-
-and place DIRECTORY\bin on your path.
-
-Documentation and samples are in the directory given by
-C:\...> cpsa -h
-
-The installed programs can be run from the command prompt or via a
-batch file.  Alternatively, copy doc/Make.hs into the directory
-containing your CPSA problem statements, and load it into a Haskell
-interpreter.  Read the source for usage instructions.
-
-MAKEFILE
-
-The file $HOME/share/cpsa-X.Y.Z/doc/cpsa.mk contains useful GNU Make
-rules for inclusion, where X.Y.Z is CPSA version number.
-
-Alternatively, copy the file Make.hs in the same directory into the
-directory containing your CPSA problem statements.  The source file
-has usage instructions.
-
-PARALLELISM
-
-CPSA is built so it can make use of multiple processors.  To make use
-of more than one processor, start CPSA with a runtime flag that
-specifies the number of processors to be used, such as "+RTS -N4
--RTS".  The GHC documentation describes the -N option in detail.
-
-DOCUMENTATION
-
-The starting point for CPSA documentation doc/index.html.  Most users
-should read it and skip the rest of this section.
-
-To build the documentation, the file supp-pdf.tex must be installed.
-It is part of the TexLive texmf ConTeXt package.  On Linux, the name
-of the package is context or texlive-context.  The design document and
-the specification document require the xy-pic package, which is
-included in texlive-pictures.
-
-The documentation includes a user guide as an XHTML document, and
-three LaTeX documents.  The CPSA Primer provides the background
-required to make effective use of the CPSA tool collection.  For those
-interested in the implementation, The CPSA Theory contains a
-high-level description of the algorithm and the current state of the
-effort to show that when program terminates, it produces a description
-of every possible execution of the protocol consistent with the
-initial point-of-view skeleton.  The CPSA Specification formally
-describes the implemented algorithm as a term reduction system.  The
-CPSA Design describes implementation details and assumes The CPSA
-Specification has been read.  The CPSA Design should be read if one is
-interested in reading the Haskell source for the tool collection.
-
-TEST SUITE
-
-: To run the test suite type:
-$ ./cpsatst
-
-Tests with the .scm extension are expected to complete without error,
-tests with the .lsp extension are expected to fail, and tests with the
-.lisp extension are not run.  New users should read tst/README, and
-then browse the files it suggests while reading CPSA documentation.
-
-Don't develop your protocols in the tst directory.  The Makefile is
-optimized for testing the cpsa program, not analyzing protocols.
-
-ADDITIONAL PROGRAMS
-
-The src directory of the source distributions includes programs
-written in Scheme, Prolog, and Elisp for performing tasks.  Use them
-as templates for your special purpose CPSA analysis and transformation
-needs.  Also, when given the --json option, the CPSA pretty printer
-cpsapp will transform CPSA S-expressions into JavaScript Object
-Notation (JSON).
-
-On Linux, the GHC runtime can request so much memory that thrashing
-results.  The script in src/ghcmemlimit sets an environment variable
-that limits memory to the amount of free and reclaimable memory on
-your machine.
-
-KNOWN BUGS
-
-Variable separation in generalization fails to separate variables in
-terms of the form (ltk a a).
diff --git a/README.txt b/README.txt
new file mode 100644
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,145 @@
+CPSA: Cryptographic Protocol Shapes Analyzer
+
+This program has been built and tested using Haskell Platform.
+It is available from <http://haskell.org> or from an operating
+system specific source.  The name of the Linux package is usually
+haskell-platform.
+
+If the Internet is available, install CPSA with:
+
+$ cabal update
+$ cabal install cpsa
+
+Find the documentation directory by typing "cpsa -h" in a command
+shell, and view index.html in a browser.
+
+INSTALLING FROM A TARBALL
+
+QUICK START (Linux)
+
+: To build and install CPSA type:
+$ make
+$ make install
+
+: To analyze a protocol you have put in prob.scm type:
+$ cpsa -o prob.txt prob.scm
+$ cpsagraph -o prob.xhtml prob.txt
+$ firefox -remote "openFile(`pwd`/prob.xhtml)"
+
+: Documentation and samples are in the directory given by
+$ cpsa -h
+
+: To view the user guide:
+$ firefox -remote "openFile($HOME/share/cpsa-X.Y.Z/doc/cpsauser.html)"
+: where X.Y.Z is the CPSA version number.
+
+QUICK START (Mac)
+
+: To build and install CPSA type:
+$ make
+$ make install
+
+: To analyze a protocol you have put in prob.scm type:
+$ cpsa -o prob.txt prob.scm
+$ cpsagraph -o prob.xhtml prob.txt
+$ open prob.xhtml
+
+: Documentation and samples are in the directory given by
+$ cpsa -h
+
+: To view the user guide:
+$ open $HOME/share/cpsa-X.Y.Z/doc/cpsauser.html
+: where X.Y.Z is the CPSA version number.
+
+QUICK START (Windows)
+
+The software has been tested on a Windows system on which neither
+MinGW or Cygwin has been installed.  Install GHC and then run the
+"setup.bat" batch file with administrator privileges.
+
+If you do not have administrator privileges, run:
+
+C:\...> runghc Setup.hs configure --user
+C:\...> runghc Setup.hs build
+
+The executables will be found in the dist\build subdirectories.
+
+Documentation and samples are in the directory given by
+C:\...> cpsa -h
+
+The installed programs can be run from the command prompt or via a
+batch file.  Alternatively, copy doc/Make.hs into the directory
+containing your CPSA problem statements, and load it into a Haskell
+interpreter.  Read the source for usage instructions.
+
+MAKEFILE
+
+The file $HOME/share/cpsa-X.Y.Z/doc/cpsa.mk contains useful GNU Make
+rules for inclusion, where X.Y.Z is CPSA version number.
+
+Alternatively, copy the file Make.hs in the same directory into the
+directory containing your CPSA problem statements.  The source file
+has usage instructions.
+
+PARALLELISM
+
+CPSA is built so it can make use of multiple processors.  To make use
+of more than one processor, start CPSA with a runtime flag that
+specifies the number of processors to be used, such as "+RTS -N4
+-RTS".  The GHC documentation describes the -N option in detail.
+
+DOCUMENTATION
+
+The starting point for CPSA documentation doc/index.html.  Most users
+should read it and skip the rest of this section.
+
+To build the documentation, the file supp-pdf.tex must be installed.
+It is part of the TexLive texmf ConTeXt package.  On Linux, the name
+of the package is context or texlive-context.  The design document and
+the specification document require the xy-pic package, which is
+included in texlive-pictures.
+
+The documentation includes a user guide as an XHTML document, and
+three LaTeX documents.  The CPSA Primer provides the background
+required to make effective use of the CPSA tool collection.  For those
+interested in the implementation, The CPSA Theory contains a
+high-level description of the algorithm and the current state of the
+effort to show that when program terminates, it produces a description
+of every possible execution of the protocol consistent with the
+initial point-of-view skeleton.  The CPSA Specification formally
+describes the implemented algorithm as a term reduction system.  The
+CPSA Design describes implementation details and assumes The CPSA
+Specification has been read.  The CPSA Design should be read if one is
+interested in reading the Haskell source for the tool collection.
+
+TEST SUITE
+
+: To run the test suite type:
+$ ./cpsatst
+
+Tests with the .scm extension are expected to complete without error,
+tests with the .lsp extension are expected to fail, and tests with the
+.lisp extension are not run.  New users should read tst/README, and
+then browse the files it suggests while reading CPSA documentation.
+
+Don't develop your protocols in the tst directory.  The Makefile is
+optimized for testing the cpsa program, not analyzing protocols.
+
+ADDITIONAL PROGRAMS
+
+The src directory of the source distributions includes programs
+written in Scheme, Prolog, and Elisp for performing tasks.  Use them
+as templates for your special purpose CPSA analysis and transformation
+needs.  Also, when given the --json option, the CPSA pretty printer
+cpsapp will transform CPSA S-expressions into JavaScript Object
+Notation (JSON).
+
+On Linux, the GHC runtime can request so much memory that thrashing
+results.  The script in src/ghcmemlimit sets an environment variable
+that limits memory to the amount of free and reclaimable memory on
+your machine.
+
+KNOWN BUGS
+
+Variable separation in generalization fails to separate variables in
+terms of the form (ltk a a).
diff --git a/build.xml b/build.xml
deleted file mode 100644
--- a/build.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<project name="cpsaextras" default="all" basedir=".">
-
-<!-- Directory names -->
-<property name="src" value="src"/>
-<!-- Directory for Scala libraries -->
-<property name="lib" value="lib"/>
-<property name="build" value="build"/>
-<property name="dist" value="dist"/>
-<property name="api" value="api"/>
-
-<property name="proj" value="${ant.project.name}"/>
-<property name="version" value="0.0.0"/>
-<property name="pkg" value="${proj}"/>
-<!-- Name of version resource -->
-<property name="props" value="${src}/${proj}/version.properties"/>
-<!-- Name of Scala library -->
-<property name="library" value="${lib}/scala-library.jar"/>
-
-<!-- One usually need not change anything below this comment -->
-<!-- An exception might be the manifest in the jar task -->
-
-<target name="init">
-  <!-- Create the build directory structure used by compile -->
-  <mkdir dir="${build}"/>
-  <uptodate property="version_added" srcfile="build.xml"
-	    targetfile="${props}"/>
-  <path id="build.classpath">
-    <pathelement location="${build}"/>
-  </path>
-  <taskdef resource="scala/tools/ant/antlib.xml">
-    <classpath>
-      <pathelement location="${lib}/scala-compiler.jar"/>
-      <pathelement location="${lib}/scala-library.jar"/>
-    </classpath>
-  </taskdef>
-</target>
-
-<target name="version" depends="init" unless="version_added">
-  <propertyfile file="${props}">
-    <entry key="version" value="${version}" operation="="/>
-    <entry key="program" value="${proj}" operation="="/>
-  </propertyfile>
-  <unjar src="${library}" dest="${build}"/>
-</target>
-
-<target name="compile" depends="version">
-  <!-- Compile the scala code from ${src} into ${build} -->
-  <scalac srcdir="${src}" destdir="${build}" deprecation="on"
-	  classpathref="build.classpath"/>
-</target>
-
-<target name="resource" depends="init">
-  <!-- Copy resources from ${src} into ${build} -->
-  <copy todir="${build}">
-    <fileset dir="${src}">
-      <include name="**/*.properties"/>
-    </fileset>
-  </copy>
-  <!-- Copy the license into ${build} -->
-  <copy todir="${build}" file="license.txt"/>
-</target>
-
-<target name="all" depends="compile,version,resource">
-  <jar jarfile="${proj}.jar" basedir="${build}">
-    <manifest>
-      <attribute name="Main-Class" value="${pkg}.Main"/>
-      <attribute name="Specification-Title" value="${proj}"/>
-      <attribute name="Specification-Version" value="${version}"/>
-    </manifest>
-  </jar>
-</target>
-
-<target name="doc" depends="version">
-  <mkdir dir="${api}"/>
-  <scaladoc srcdir="${src}" destdir="${api}"
-	    classpathref="build.classpath">
-    <include name="**/*.scala"/>
-  </scaladoc>
-</target>
-
-<target name="dist" depends="all,doc">
-  <mkdir dir="${dist}/${proj}"/>
-  <copy todir="${dist}/${proj}">
-    <fileset dir=".">
-      <include name="${proj}.jar"/>
-      <include name="${lib}/"/>
-      <include name="${src}/**/*.scala"/>
-      <include name="${src}/**/*.properties"/>
-      <include name="${api}/"/>
-    </fileset>
-  </copy>
-  <zip zipfile="${proj}-${version}.zip" basedir="${dist}"/>
-</target>
-
-<target name="clean">
-  <!-- Delete the ${build} directory, the project jar file, -->
-  <!-- the version resource file, and the ${dist} and ${api} directories -->
-  <delete dir="${build}"/>
-  <delete file="${proj}.jar"/>
-  <delete file="${props}"/>
-  <delete dir="${api}"/>
-  <delete dir="${dist}"/>
-</target>
-</project>
diff --git a/cpsa.cabal b/cpsa.cabal
--- a/cpsa.cabal
+++ b/cpsa.cabal
@@ -1,6 +1,6 @@
 Name:			cpsa
-Version:		2.5.4
-Maintainer:		ramsdell@mitre.org
+Version:		3.3.0
+Maintainer:		mliskov@mitre.org
 Cabal-Version:		>= 1.6
 License:		BSD3
 License-File:		license.txt
@@ -31,94 +31,66 @@
   documentation is in the doc directory in the source distribution,
   and installed in the package's data directory.  You can locate the
   package's data directory by typing "cpsa --help" to a command
-  prompt.  New users should study the documentation and the sample
-  inputs in the data directory.  The source distribution includes a
-  test suite with an expanded set of input files and is easily
-  installed on operating systems that decend from Unix.  Serious
-  Windows users should install MSYS so as to allow the use of make and
-  script execution.
+  prompt.  New users should start learning to use the tool from the
+  manual, found at "cpsamanual.pdf" in the data directory.  Examples
+  referenced in the manual can be found in the data directory as well.
+  It is suggested that users make an examples directory and copy
+  "*.scm *.xhtml" to their local examples directory, both so that
+  they may be modified and for ease of access.
   .
+  Serious Windows users should install MSYS so as to allow the use of
+  make and script execution.
+  .
   The theory and algorithm used by CPSA was developed with the help of
   Joshua D. Guttman, John D. Ramsdell, Jon C. Herzog, Shaddin
   F. Doghmi, F. Javier Thayer, Paul D. Rowe, and Moses D. Liskov.
-  John D. Ramsdell implemented the algorithm in Haskell.  CPSA was
-  designed and implemented at The MITRE Corporation.
+  John D. Ramsdell and Moses D. Liskov implemented the algorithm in
+  Haskell.  CPSA was designed and implemented at The MITRE Corporation.
 Category:		Cryptography
 Build-Type:		Simple
 Data-Files:
-  index.html readme.html cpsauser.html cpsa.mk Make.hs cpsaprimer.pdf
-  cpsagoals.pdf cpsaoverview.pdf cpsaintroslides.pdf cpsaspec.pdf
-  cpsadesign.pdf ffgg.scm ns.scm blanchet.scm or.scm woolam.scm
-  yahalom.scm goals.scm
+  Make.hs cpsa.mk cpsamanual.pdf examples/blanchet.scm examples/blanchet.xhtml
+  examples/bltk_or.scm examples/bltk_or.xhtml examples/envelope.scm
+  examples/envelope.xhtml examples/ffgg.scm examples/fnof_test.scm
+  examples/fnof_yahalom.scm examples/fnof_yahalom.xhtml examples/goals.scm
+  examples/goals.xhtml examples/kerb.scm examples/kerb.xhtml
+  examples/lt_test.scm examples/lt_test.xhtml examples/neq_test.scm
+  examples/neq_test.xhtml examples/ns.scm examples/ns.xhtml examples/or.scm
+  examples/or.xhtml examples/pkinit.scm examples/pkinit.xhtml
+  examples/plaindh.scm examples/plaindh.xhtml examples/priority_test.scm
+  examples/priority_test.xhtml examples/station.scm examples/station.xhtml
+  examples/subsort_test.scm examples/woolam.scm examples/yahalom.scm
+  examples/yahalom.xhtml
 Data-Dir:	    	doc
 Extra-Source-Files:
-  Makefile ChangeLog README NEWS ghci cpsatst setup.bat
-  doc/README doc/Makefile doc/macros.tex doc/cpsaprimer.tex
-  doc/cpsagoals.tex doc/bcasyntax.tex doc/cpsaintroslides.tex
-  doc/mitreslides.sty doc/cpsaspec.tex doc/cpsadesign.tex
-  doc/cpsaoverview.tex doc/cpsadiagrams.mp doc/strands.mp
-  doc/cmstrands.mp doc/carriers.mp doc/termtree.mp doc/blanchet.mp
-  doc/mitrelogo.mp doc/cpsa.bib doc/SDAG.lhs
-  src/index.html src/cpsacgi src/cpsacgi.py src/cpsajson.py src/split.py
-  src/cpsa2svg src/cpsa.el src/httpd_allow_execmem.te src/cpsaperm.scm
-  src/cpsaops.scm src/preskel src/cpsa.pl src/unsorted.pl src/pp.pl
-  src/sexpr.pl src/perm.pl src/prover9.pl src/zoom.js src/js2hs
-  src/ghcmemlimit build.xml src/scala/Main.scala
-  src/scala/Pretty.scala src/scala/Printer.scala
-  src/scala/SExpr.scala
-  tst/README tst/Makefile tst/Make.hs tst/checktst tst/cpsagraphall
-  tst/cpsashapesall 
-  tst/blanchet.scm tst/blanchet.tst tst/completeness-test.scm
-  tst/completeness-test.tst tst/crushing.tst tst/crushing.tst
-  tst/dass.lisp tst/dass-mod.lisp tst/dass_simple.scm
-  tst/dass_simple.tst tst/denning-sacco.scm tst/denning-sacco.tst
-  tst/deorig_contract.scm tst/deorig_contract.tst tst/deorig_mesg.scm
-  tst/deorig_mesg.tst tst/deorig_simple.scm tst/deorig_simple.tst
-  tst/DH_hack.scm tst/DH_hack.tst tst/ds-short.lisp tst/dy.lsp
-  tst/dy.tst tst/encsig.scm tst/encsig.tst
-  tst/epmo_acctnum-key-hash.scm tst/epmo_acctnum-key-hash.tst
-  tst/epmo_acctnum.lisp tst/epmo-hash.scm tst/epmo-hash.tst
-  tst/epmo-key-hash.scm tst/epmo-key-hash.tst tst/epmo.scm
-  tst/epmo.tst tst/ffgg.scm tst/ffgg.tst tst/fragile_pruning.scm
-  tst/fragile_pruning.tst tst/goals.scm tst/goals.tst
-  tst/hashtest-key-hash.scm tst/hashtest-key-hash.tst tst/hashtest.scm
-  tst/hashtest.tst tst/incompleteness_example.scm
-  tst/incompleteness_example.tst tst/isoreject.scm tst/isoreject.tst
-  tst/kelly1.scm tst/kelly1.tst tst/kelly64.lisp tst/kerb5.lisp
-  tst/kerberos.scm tst/kerberos.tst tst/mass2.lsp tst/mass2.tst
-  tst/mass.lsp tst/mass.tst tst/missing_contraction.scm
-  tst/missing_contraction.tst tst/neuman-stubblebine-alt.lisp
-  tst/neuman-stubblebine-reauth.lisp tst/neuman-stubblebine-reauth.lsp
-  tst/neuman-stubblebine-reauth.tst tst/neuman-stubblebine.scm
-  tst/neuman-stubblebine.tst tst/no_contraction.scm
-  tst/no_contraction.tst tst/nonaug-prune.scm tst/nonaug-prune.tst
-  tst/non_transforming.scm tst/non_transforming.tst tst/nsl3.scm
-  tst/nsl3.tst tst/nsl4cm1.lisp tst/nsl4.lisp
-  tst/nsl4resp2.lisp tst/nsl5i.lisp tst/nsl5.lisp tst/ns-l.scm
-  tst/nslsk.scm tst/nslsk.tst tst/ns-l.tst tst/ns.scm tst/ns.tst
-  tst/or.scm tst/or.tst tst/pca.scm tst/pca.tst
-  tst/pen-non-orig-test.scm tst/pen-non-orig-test.tst tst/pkinit.scm
-  tst/pkinit.tst tst/preprocess.scm tst/preprocess.tst tst/print.scm
-  tst/print.tst tst/pruning1.scm tst/pruning1.tst tst/sigenc.scm
-  tst/sigenc.tst tst/sorted_epmo_acctnum.scm
-  tst/sorted_epmo_acctnum.tst tst/targetterms2.scm
-  tst/targetterms2.tst tst/targetterms6.scm tst/targetterms6.tst
-  tst/targetterms8.scm tst/targetterms8.tst tst/timestamping.scm
-  tst/timestamping.tst tst/tnsl5.lisp tst/uncarried_keys.scm
-  tst/uncarried_keys.tst tst/uo.scm tst/uo.tst tst/updatetst
-  tst/wang-hash.scm tst/wang-hash.tst tst/wang-key-hash.scm
-  tst/wang-key-hash.tst tst/wang.lisp tst/weird.scm tst/weird.tst
-  tst/wide-mouth-frog.lsp tst/wide-mouth-frog-scyther.lsp
-  tst/wide-mouth-frog-scyther.tst tst/wide-mouth-frog.tst
-  tst/wonthull2.scm tst/wonthull2.tst tst/wonthull3.scm
-  tst/wonthull3.tst tst/wonthull.scm tst/wonthull.tst tst/woolam.scm
-  tst/woolam.tst tst/yahalom-6.3.6.scm tst/yahalom-6.3.6.tst
-  tst/yahalom.scm tst/yahalom.tst tst/unilateral.scm
-  tst/unilateral.tst
-
-Source-Repository head
-  Type:     git
-  Location: git://github.com/ramsdell/cpsa.git
+  Makefile ChangeLog README.txt NEWS ghci cpsatst setup.bat
+  src/cpsa.el src/cpsaops.scm src/cpsa.pl src/pp.pl
+  src/sexpr.pl src/ghcmemlimit src/cpsajson.py src/split.py
+  tst/checktst tst/updatetst tst/Makefile tst/Make.hs tst/README
+  tst/axiom2.scm tst/axiom2.tst tst/blanchet.scm tst/blanchet.tst
+  tst/bltk_example.lsp tst/bltk_example.tst tst/bltk_test.scm
+  tst/bltk_test.tst tst/dh-ca.scm tst/dh-ca.tst tst/dh_mim2.scm
+  tst/dh_mim2.tst tst/dh_mim.scm tst/dh_mim.tst tst/dhnsl_basic.scm
+  tst/dhnsl_basic.tst tst/dhnsl.lisp tst/dhnsl.tst tst/dhnsl_use.scm
+  tst/dhnsl_use.tst tst/dh_sig.scm tst/dh_sig.tst tst/dh_test.scm
+  tst/dh_test.tst tst/enrich.scm tst/enrich.tst tst/envelope.scm
+  tst/envelope.tst tst/ffgg.scm tst/ffgg.tst tst/fnof_or.scm
+  tst/fnof_or.tst tst/fnof_test.scm tst/fnof_test.tst
+  tst/fnof_woolam.scm tst/fnof_woolam.tst tst/fnof_yahalom.scm
+  tst/fnof_yahalom.tst tst/goals.scm tst/goals.tst tst/iadh_um.scm
+  tst/iadh_um.tst tst/injection.scm tst/injection.tst
+  tst/kerberos++.scm tst/kerberos++.tst tst/lt_test.scm
+  tst/lt_test.tst tst/mtic.scm tst/mtic.tst tst/neq_test.scm
+  tst/neq_test.tst tst/ns.scm tst/ns.tst tst/or.scm tst/or.tst
+  tst/owang.scm tst/owang.tst tst/owat.scm tst/owat.tst tst/pkinit.scm
+  tst/pkinit.tst tst/plaindh.scm tst/plaindh.tst tst/priority_test.scm
+  tst/priority_test.tst tst/staticdh.scm tst/staticdh.tst
+  tst/station2.scm tst/station2.tst tst/station_to_station.scm
+  tst/station_to_station.tst tst/subsort_test.scm tst/subsort_test.tst
+  tst/test_small.scm tst/test_small.tst tst/unilateral.scm
+  tst/unilateral.tst tst/uniq-gen-test.scm tst/uniq-gen-test.tst
+  tst/wang.tst tst/woolam.scm tst/woolam.tst tst/wrap_decrypt.lsp
+  tst/wrap_decrypt.tst tst/yahalom.scm tst/yahalom.tst
 
 -- Algebra implementations must import CPSA.Lib.CPSA.
 -- Tools may additionally import CPSA.Lib.Entry.
@@ -131,12 +103,15 @@
     -Wall -fno-warn-name-shadowing -fwarn-unused-imports -threaded -rtsopts
   Hs-Source-Dirs:	src
   Other-Modules:
-    Paths_cpsa CPSA.Lib.Vector CPSA.Lib.Utilities CPSA.Lib.Pretty
-    CPSA.Lib.SExpr CPSA.Lib.Printer CPSA.Lib.Notation CPSA.Lib.Entry
-    CPSA.Lib.Algebra CPSA.Lib.Protocol CPSA.Lib.Goal CPSA.Lib.Strand
+    Paths_cpsa CPSA.Lib.Vector CPSA.Lib.Utilities CPSA.Lib.Debug
+    CPSA.Lib.Pretty CPSA.Lib.SExpr CPSA.Lib.Printer
+    CPSA.Lib.DebugLibrary CPSA.Lib.Notation CPSA.Lib.Entry
+    CPSA.Lib.Algebra CPSA.Lib.AlgebraLibrary CPSA.Lib.State
+    CPSA.Lib.Protocol CPSA.Lib.Goal CPSA.Lib.Strand
     CPSA.Lib.Characteristic CPSA.Lib.Loader CPSA.Lib.Displayer
     CPSA.Lib.Cohort CPSA.Lib.Expand CPSA.Lib.CPSA CPSA.Lib.Reduction
-    CPSA.Basic.Algebra CPSA.DiffieHellman.Algebra
+    CPSA.Basic.Algebra CPSA.DiffieHellman.Algebra CPSA.Lib.Declaration
+    CPSA.DiffieHellman.IntLinEq
 
 Executable cpsagraph
   Main-Is:		CPSA/Graph/Main.hs
@@ -147,12 +122,12 @@
   Other-Modules:
     Paths_cpsa CPSA.Lib.Utilities CPSA.Lib.Pretty CPSA.Lib.SExpr
     CPSA.Lib.Printer CPSA.Lib.Notation CPSA.Lib.Entry CPSA.Lib.Algebra
-    CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
-    CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
-    CPSA.Graph.XMLOutput CPSA.Graph.Config CPSA.Graph.SVG
-    CPSA.Graph.Loader CPSA.Graph.Preskeleton CPSA.Graph.Layout
-    CPSA.Graph.Tree CPSA.Graph.CompactView CPSA.Graph.ExpandedView
-    CPSA.Graph.LaTeXView
+    CPSA.Lib.State CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
+    CPSA.Lib.Debug CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
+    CPSA.Lib.DebugLibrary CPSA.Graph.XMLOutput CPSA.Graph.Config
+    CPSA.Graph.SVG CPSA.Graph.Loader CPSA.Graph.Preskeleton
+    CPSA.Graph.Layout CPSA.Graph.Tree CPSA.Graph.CompactView
+    CPSA.Graph.ExpandedView CPSA.Graph.LaTeXView
 
 Executable cpsashapes
   Main-Is:		CPSA/Shapes/Main.hs
@@ -163,7 +138,7 @@
   Other-Modules:
     Paths_cpsa CPSA.Lib.Utilities CPSA.Lib.Pretty CPSA.Lib.SExpr
     CPSA.Lib.Printer CPSA.Lib.Notation CPSA.Lib.Entry CPSA.Lib.Algebra
-    CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
+    CPSA.Lib.State CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
     CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
     CPSA.Shapes.Shapes
 
@@ -176,23 +151,11 @@
   Other-Modules:
     Paths_cpsa CPSA.Lib.Utilities CPSA.Lib.Pretty CPSA.Lib.SExpr
     CPSA.Lib.Printer CPSA.Lib.Notation CPSA.Lib.Entry CPSA.Lib.Algebra
-    CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
-    CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
-    CPSA.Annotations.Formulas CPSA.Annotations.Annotations
-    CPSA.Basic.Algebra CPSA.DiffieHellman.Algebra
-
-Executable cpsaparameters
-  Main-Is:		CPSA/Parameters/Main.hs
-  Build-Depends:	base >= 3 && < 5, containers
-  GHC-Options:
-    -Wall -fno-warn-name-shadowing -fwarn-unused-imports
-  Hs-Source-Dirs:	src
-  Other-Modules:
-    Paths_cpsa CPSA.Lib.Utilities CPSA.Lib.Pretty CPSA.Lib.SExpr
-    CPSA.Lib.Printer CPSA.Lib.Notation CPSA.Lib.Entry CPSA.Lib.Algebra
-    CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
-    CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
-    CPSA.Parameters.Flow CPSA.Basic.Algebra CPSA.DiffieHellman.Algebra
+    CPSA.Lib.State CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
+    CPSA.Lib.Debug CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
+    CPSA.Lib.DebugLibrary CPSA.Annotations.Formulas
+    CPSA.Annotations.Annotations CPSA.Basic.Algebra
+    CPSA.DiffieHellman.Algebra CPSA.DiffieHellman.IntLinEq
 
 Executable cpsapp
   Main-Is:		CPSA/Pretty/Main.hs
@@ -203,8 +166,9 @@
   Other-Modules:
     Paths_cpsa CPSA.Lib.Utilities CPSA.Lib.Pretty CPSA.Lib.SExpr
     CPSA.Lib.Printer CPSA.Lib.Notation CPSA.Lib.Entry CPSA.Lib.Algebra
-    CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
-    CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
+    CPSA.Lib.State CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
+    CPSA.Lib.Debug CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
+    CPSA.Lib.DebugLibrary
 
 Executable cpsajson
   Main-Is:		CPSA/JSON/Main.hs
@@ -215,8 +179,9 @@
   Other-Modules:
     Paths_cpsa CPSA.Lib.Utilities CPSA.Lib.Pretty CPSA.Lib.SExpr
     CPSA.Lib.Printer CPSA.Lib.Notation CPSA.Lib.Entry CPSA.Lib.Algebra
-    CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
-    CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
+    CPSA.Lib.State CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
+    CPSA.Lib.Debug CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
+    CPSA.Lib.DebugLibrary
 
 Executable cpsadiff
   Main-Is:		CPSA/Diff/Main.hs
@@ -237,7 +202,7 @@
   Other-Modules:
     Paths_cpsa CPSA.Lib.Utilities CPSA.Lib.Pretty CPSA.Lib.SExpr
     CPSA.Lib.Printer CPSA.Lib.Notation CPSA.Lib.Entry CPSA.Lib.Algebra
-    CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
-    CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
-    CPSA.SAS.SAS
-    CPSA.Basic.Algebra CPSA.DiffieHellman.Algebra
+    CPSA.Lib.State CPSA.Lib.Protocol CPSA.Lib.Strand CPSA.Lib.Loader
+    CPSA.Lib.Debug CPSA.Lib.Displayer CPSA.Lib.Cohort CPSA.Lib.CPSA
+    CPSA.Lib.DebugLibrary CPSA.SAS.SAS CPSA.Basic.Algebra
+    CPSA.DiffieHellman.Algebra CPSA.DiffieHellman.IntLinEq
diff --git a/cpsatst b/cpsatst
--- a/cpsatst
+++ b/cpsatst
@@ -8,9 +8,6 @@
 # template for your needs, but probably not.  Look at doc/cpsa.mk
 # first.
 
-# ./cpsashapesall
-# ./cpsagraphall
-
 cd tst
 make clean
 make "$@"
diff --git a/doc/Make.hs b/doc/Make.hs
--- a/doc/Make.hs
+++ b/doc/Make.hs
@@ -1,7 +1,7 @@
 -- A simple, CPSA specific make system
 
-module Make (cpsa, shapes, sas, annos, params, cleanse, get, set,
-             build, clean, roots) where
+module Make3 (cpsa, shapes, sas, annos, params, cleanse, get, set,
+              build, clean, roots) where
 
 {- Place a copy of this source file in the directory used to store
 CPSA problem statements, edit it to suit your needs, and load it into
@@ -110,7 +110,7 @@
 
 graphRule :: Rule
 graphRule =
-    Rule { prog = "cpsagraph" ++ graphFlags,
+    Rule { prog = "cpsa3graph" ++ graphFlags,
            inputExt = cpsaExt,
            outputExt = graphExt }
 
@@ -133,7 +133,7 @@
 
 cpsaBasicRule :: String -> Rule
 cpsaBasicRule flags =
-    Rule { prog = "cpsa " ++ flags,
+    Rule { prog = "cpsa3 " ++ flags,
            inputExt = sourceBasicExt,
            outputExt = cpsaExt }
 
@@ -148,11 +148,11 @@
 
 shapesRule :: Rule
 shapesRule =
-    Rule { prog = "cpsashapes",
+    Rule { prog = "cpsa3shapes",
            inputExt = cpsaExt,
            outputExt = shapesRoot ++ cpsaExt }
 
--- SAS Rule
+-- Sas Rule
 
 sas :: FilePath -> IO ()
 sas root =
@@ -162,7 +162,7 @@
 
 sasRule :: Rule
 sasRule =
-    Rule { prog = "cpsasas",
+    Rule { prog = "cpsa3sas",
            inputExt = cpsaExt,
            outputExt = sasExt }
 
@@ -177,7 +177,7 @@
 
 annosRule :: Rule
 annosRule =
-    Rule { prog = "cpsaannotations",
+    Rule { prog = "cpsa3annotations",
            inputExt = shapesRoot ++ cpsaExt,
            outputExt = annosRoot ++ cpsaExt }
 
@@ -190,7 +190,7 @@
 
 cpsaparametersRule :: Rule
 cpsaparametersRule =
-    Rule { prog = "cpsaparameters",
+    Rule { prog = "cpsa3parameters",
     	   inputExt = sourceBasicExt,
 	   outputExt = paramsRoot ++ cpsaExt }
 
diff --git a/doc/Makefile b/doc/Makefile
deleted file mode 100644
--- a/doc/Makefile
+++ /dev/null
@@ -1,78 +0,0 @@
-# A LaTeX/MetaPost makefile for CPSA documents
-
-# Requrements
-# * GNU Make
-# * package texlive-context
-# * package texlive-pictures
-
-# See README for more information
-
-SHELL = /bin/sh
-
-PRIMER = cpsaprimer
-GOALS = cpsagoals
-OVERVIEW = cpsaoverview
-SLIDES = cpsaintroslides
-DESIGN = cpsadesign
-SPEC = cpsaspec
-BIB = cpsa
-
-TEX_SRCS = macros.tex bcasyntax.tex
-
-MP_SRCS	= cpsadiagrams.mp carriers.mp termtree.mp blanchet.mp mitrelogo.mp
-
-%-0.mps:	%.mp
-	mpost -tex=latex $*
-
-%.bbl:	$(BIB).bib
-	if test ! -f $*.aux; then pdflatex $*.tex; fi
-	bibtex $*
-	pdflatex $*.tex
-
-%.ind:	%.idx
-	makeindex $*
-
-all:	$(PRIMER).pdf $(GOALS).pdf $(OVERVIEW).pdf \
-		$(SLIDES).pdf $(DESIGN).pdf $(SPEC).pdf
-
-$(PRIMER).pdf:	$(MP_SRCS:.mp=-0.mps) $(TEX_SRCS) \
-		 $(PRIMER).tex $(PRIMER).bbl
-	if test ! -f $(PRIMER).aux; then pdflatex $(PRIMER).tex; fi
-	if test -f $(PRIMER).idx; then $(MAKE) $(PRIMER).ind; fi
-	pdflatex $(PRIMER).tex
-
-$(GOALS).pdf: $(MP_SRCS:.mp=-0.mps) $(TEX_SRCS) \
-		$(GOALS).tex $(GOALS).bbl
-	if test ! -f $(GOALS).aux; then pdflatex $(GOALS).tex; fi
-	pdflatex $(GOALS).tex
-
-$(OVERVIEW).pdf: $(OVERVIEW).tex $(OVERVIEW).bbl
-	if test ! -f $(OVERVIEW).aux; then pdflatex $(OVERVIEW).tex; fi
-	pdflatex $(OVERVIEW).tex
-
-$(SLIDES).pdf:	$(MP_SRCS:.mp=-0.mps) $(SLIDES).tex
-	pdflatex $(SLIDES).tex
-
-$(DESIGN).pdf:	$(MP_SRCS:.mp=-0.mps) $(TEX_SRCS) \
-		 $(DESIGN).tex $(DESIGN).bbl
-	if test ! -f $(DESIGN).aux; then pdflatex $(DESIGN).tex; fi
-	if test -f $(DESIGN).idx; then $(MAKE) $(DESIGN).ind; fi
-	pdflatex $(DESIGN).tex
-
-$(SPEC).pdf:	$(MP_SRCS:.mp=-0.mps) $(TEX_SRCS) \
-		 $(SPEC).tex $(SPEC).bbl
-	if test ! -f $(SPEC).aux; then pdflatex $(SPEC).tex; fi
-	if test -f $(SPEC).idx; then $(MAKE) $(SPEC).ind; fi
-	pdflatex $(SPEC).tex
-
-CLEAN_FILES := $(PRIMER).pdf $(GOALS).pdf $(OVERVIEW).pdf \
-		$(SLIDES).pdf $(DESIGN).pdf $(SPEC).pdf \
-	$(wildcard *.log *.aux *.toc *.mps *.mpx *.lot *.lof) \
-	$(wildcard *.bbl *.blg *.ind *.idx *.ilg *.out)
-
-clean:
-	-rm $(CLEAN_FILES)
-
-dist:	clean
-	DIR=`pwd`; DIR=`basename $${DIR}`; \
-	cd ..; tar czf $${DIR}.tar.gz $${DIR}
diff --git a/doc/README b/doc/README
deleted file mode 100644
--- a/doc/README
+++ /dev/null
@@ -1,38 +0,0 @@
-This directory contains CPSA documentation.
-
-* index.html: Documentation starting point with some useful tips.
-
-* cpsauser.html: CPSA User Guide, an essential reference document
-
-* cpsaprimer.pdf: CPSA Primer, an introduction to using CPSA
-
-* cpsaoverview.pdf: Another attempt at a gentle introduction to CPSA
-
-* cpsagoals.pdf: CPSA and Formal Security Goals, an introduction
-  to reasoning about security goals using first-order logic.
-
-* cpsaspec.pdf: The CPSA Specification, a formal specification of the
-  algorithm
-
-* cpsadesign.pdf: CPSA Design, a description of implementation choices
-
-To build the documentation, you need Metapost and XY-pic.  On Linux,
-Metapost is supplied via the package texlive-metapost, and XY-pic is
-supplied in package texlive-pictures.  On some older versions of
-Linux, you may also have to install texlive-context.
-
-If you want to build the documentation from the sources, and you don't
-have and want to install the cmarrows package for Metapost, comment
-out the line in cpsadiagrams.mp that loads cmstrands.
-
-diff -u -r1.4 cpsadiagrams.mp
---- doc/cpsadiagrams.mp	9 Oct 2009 19:33:53 -0000	1.4
-+++ doc/cpsadiagrams.mp	10 Oct 2009 11:59:38 -0000
-@@ -13,7 +13,7 @@
-
- input strands;
-
--input cmstrands;		% Use CM arrows
-+% input cmstrands;		% Use CM arrows
-
- picture node; node = btex $\bullet$ etex;
diff --git a/doc/SDAG.lhs b/doc/SDAG.lhs
deleted file mode 100644
--- a/doc/SDAG.lhs
+++ /dev/null
@@ -1,317 +0,0 @@
-Strand Directed Acyclic Graphs
-
-Run this with
-
-  $ ghci SDAG.lhs
-
-> module SDAG where
-
-> import qualified Data.List as L
-> import qualified Data.Set as S
-
-The strands in a skeleton are represented by the natural numbers less
-than the number of strands in the skeleton.  The strands in a
-skeleton are describe by a list of integers, where each element of
-the list gives the height of its strand.
-
-> type Strands = [Int]          -- [Strand height]
-
-A node is a pair of natural numbers.  The first number is the node's
-strand, and the second is the position of the node within the strand.
-
-> type Node = (Int, Int)        -- (Strand, Position)
-
-Given a strand height list, the set of nodes are
-
-> nodes :: Strands -> [Node]
-> nodes heights =
->     [(s, p) | (s, n) <- zip [0..] hts, p <- nats n]
->     where hts = filter (0 <) heights -- remove non-positive heights
-
-where nats n is the list of natural numbers less than n.
-
-> nats :: Int -> [Int]
-> nats n = take n [0..]
-
-Thus for a skeleton with three strands, of height 2, 3, and 2, the
-nodes are
-
-  *SDAG> nodes [2,3,2]
-  [(0,0),(0,1),(1,0),(1,1),(1,2),(2,0),(2,1)]
-
-The edges in an SDAG represent the precedes relation.
-
-> type Edge = (Node, Node)      -- Precedes relation
-
-When (n0, n1) :: Edge, the message event at n0 precedes the one at n1.
-
-The strand succession edges are
-
-> successors :: Strands -> [Edge]
-> successors heights =
->     [((s, p), (s, p + 1)) | (s, n) <- zip [0..] hts, p <- nats (n - 1)]
->     where hts = filter (0 <) heights -- remove non-positive heights
-
-For a skeleton with three strands, of height 2, 3, and 2, the strand
-succession edges are
-
-  *SDAG> successors [2,3,2]
-  [((0,0),(0,1)),((1,0),(1,1)),((1,1),(1,2)),((2,0),(2,1))]
-
-A Strand Directed Acyclic Graph (SDAG) is a strand height list and a
-set of edges.  It represents an acyclic graph.
-
-> type SDAG = (Strands, [Edge])
-
-The normalized form of a SDAG contains no strand succession edges or
-elements in its transitive closure.
-
-> normalize :: SDAG -> SDAG
-> normalize (strands, precedes) =
->     if isAcyclic (adj sdag) ns then
->         sdag                  -- SDAG must be acyclic
->     else
->         error "SDAG has a cycle"
->     where
->       ns = nodes strands      -- Sort SDAG and remove duplicates
->       sdag = (strands, L.sort (L.nub prec))
->       prec = [(n0, n1) |
->               (n0, n1) <- precedes,
->               elem n0 ns,     -- Ensure n0 and n1 are in nodes
->               elem n1 ns,     -- Remove strand succession edges
->               not (sameStrands (n0, n1))]
-
-> sameStrands :: Edge -> Bool
-> sameStrands ((s0, _), (s1, _)) = s0 == s1
-
-The adjacency list representation of an SDAG is used to map a node to
-a list of its predecessors.  The adjacency list representation is
-[[[Node]]], and lookup involves list indexing.  The representation of
-an SDAG includes the strand succession edges.
-
-> adj :: SDAG -> Node -> [Node]
-> adj (strands, precedes) (s, p) =
->     [ strand s h | (s, h) <- zip [0..] strands ] !! s !! p
->     where
->       strand s h = [ entry (s, p) | p <- nats h ]
->       entry n = enrich n [ n0 | (n0, n1) <- precedes, n1 == n ]
->       -- add strand succession edges
->       enrich (s, p) ns
->           | p > 0 = (s, p - 1) : ns
->           | otherwise = ns
-
-Is graph acyclic?
-
-> isAcyclic :: Ord a => (a -> [a]) -> [a] -> Bool
-> isAcyclic adj nodes =
->     all (not . backEdge numbering) (S.toList edges)
->     where
->       numbering = dfs adj (S.toList start)
->       -- Remove nodes that have non-zero indegree
->       start = S.difference (S.fromList nodes) (S.map fst edges)
->       edges = foldl f S.empty nodes
->       f edges src = foldl (g src) edges (adj src)
->       g src edges dst = S.insert (dst, src) edges
-
-Compute a depth first search numbering of nodes using postorder.
-With postorder, only back edges go from a lower number to a higher
-one.  Assumes nodes, the set of nodes with indegree zero, is not empty.
-
-> dfs :: Ord a => (a -> [a]) -> [a] -> [(a, Int)]
-> dfs adj nodes =
->     alist
->     where
->       (_, alist, _) = foldl po (0, [], S.empty) nodes
->       po a@(num, alist, seen) node
->          | S.member node seen = a
->          | otherwise =
->              (num' + 1, (node, num') : alist', seen'')
->              where  -- Search is postorder because nodes at the end of
->                (num', alist', seen'') = -- edges are explored before
->                    foldl po (num, alist, seen') nodes' -- the node
->                seen' = S.insert node seen -- Insert node as soon as
->                nodes' = adj node          -- it's seen
-
-Is edge a back edge, meaning a cycle has been found?  If an edge
-contains a node that is not in the alist, it means it was not
-visited during the depth first seach.  This can happen when there
-is a strong component that has no edges from other strong
-components to it.  We report this edge to be a back edge so as to
-get the correct overall result.
-
-> backEdge :: Eq a => [(a, Int)] -> (a, a) -> Bool
-> backEdge alist (node, node') =
->     case (lookup node alist, lookup node' alist) of
->       (Just n, Just n') -> n >= n'
->       _ -> True
-
-Compute the transitive reduction
-
-> reduce :: SDAG -> SDAG
-> reduce g@(strands, precedes) =
->     (strands, filter essential precedes)
->     where
->       essential (dst, src) =
->           loop dst (L.delete dst (adj g src)) [src]
->       loop _ [] _ = True        -- No other path found
->       loop dst (n : ns) seen
->           | n == dst = False    -- There is another path
->           | elem n seen = loop dst ns seen
->           | otherwise = loop dst (adj g n ++ ns) (n : seen)
-
-Compute the transitive closure
-
-> close :: SDAG -> SDAG
-> close g@(strands, precedes) =
->     normalize (strands, loop prec False prec)
->     where
->       prec = successors strands ++ precedes
->       loop prec False [] = prec
->       loop prec True [] =
->           loop prec False prec -- restart loop
->       loop prec repeat ((n0, n1) : pairs) =
->           inner prec repeat pairs [(n, n1) | n <- adj g n0]
->       inner prec repeat pairs [] =
->           loop prec repeat pairs
->       inner prec repeat pairs (p : rest)
->           | elem p prec = inner prec repeat pairs rest
->           | otherwise = inner (p : prec) True pairs rest
-
-Shorthands that check their arguments.
-
-> r :: SDAG -> SDAG
-> r = reduce . normalize
-
-> c :: SDAG -> SDAG
-> c = close . normalize
-
-Is x a proper sublist of y?
-
-> sublist :: Eq a => [a] -> [a] -> Bool
-> sublist x y =
->     all (flip elem y) x &&    -- All x in y
->     any (flip notElem x) y    -- Some y not in x
-
-The list of all sublists
-
-> sublists :: [a] -> [[a]]
-> sublists [] = [[]]
-> sublists (x:xs) = sublists xs ++ map (x:) (sublists xs)
-
-Compute all the SDAGs that are weaker than the given SDAG.
-
-> w :: SDAG -> [SDAG]
-> w sdag =
->     let (s, es) = c sdag in
->     L.nub [r |
->            es0 <- sublists es,
->            let r = reduce (s, es0),
->            let (_, es1) = close (s, snd r),
->            sublist es1 es]
-
-Examples
-
-  *SDAG> w ([2,2], [((0,0),(1, 1))])
-  [([2,2],[])]
-
-  *SDAG> w ([2,2], [((0,1),(1, 0))])
-  [([2,2],[]),
-   ([2,2],[((0,1),(1,1))]),
-   ([2,2],[((0,0),(1,1))]),
-   ([2,2],[((0,0),(1,0))]),
-   ([2,2],[((0,0),(1,0)),((0,1),(1,1))])]
-
-Compute the SDAGs in w x that are not weaker than a SDAG in w x.
-
-> m :: SDAG -> [SDAG]
-> m sdag =
->     map reduce (filter maximal sdags)
->     where
->       sdags = map close (w sdag) -- All weaker SDAGs
->       maximal sdag =          -- Is SDAG not weaker than some other
->           not (any (weaker sdag) sdags)
->       weaker (s0, es0) (s1, es1) =
->           s0 == s1 && sublist es0 es1
-
-Examples
-
-  *SDAG> m ([2,2], [((0,0),(1, 1))])
-  [([2,2],[])]
-
-  *SDAG> m ([2,2], [((0,1),(1, 0))])
-  [([2,2],[((0,0),(1,0)),((0,1),(1,1))])]
-
-Compute the SDAGs in w x that are not weaker than a SDAG in w x using
-the implemented algorithm.
-
-> m' :: SDAG -> [SDAG]
-> m' sdag =
->     let (s, es) = c sdag in
->     L.nub [reduce (s, L.delete e es) | e <- snd (reduce sdag)]
-
-Read and show for CPSA orderings
-
-> data O = O [Edge]
-
-> instance Show O where
->    showsPrec _ (O es) =
->         showString "(precedes" . showl es
->         where
->           showl [] = showChar ')'
->           showl (e : es) = showChar ' ' . shows (E e) . showl es
-
-> instance Read O where
->     readsPrec _ s0 =
->         [(O ord, s3) |
->          ("(", s1) <- lex s0,
->          ("precedes", s2) <- lex s1,
->          (ord, s3) <- readl s2]
->         where
->           readl s0 = [([], s1) |
->                       (")", s1) <- lex s0] ++
->                      [(e : es, s2) |
->                       (E e, s1) <- reads s0,
->                       (es, s2) <- readl s1]
-
-A guess at the strand height list associated with some edges
-
-> strands :: [Edge] -> Strands
-> strands es =
->     [height s | s <- nats n]
->     where
->       n = 1 + foldl max 0 (map fst nodes)
->       nodes = L.nub (foldl (\ns (n0, n1) -> n0 : n1 : ns) [] es)
->       height s = 1 + foldl max 0 [p | (s', p) <- nodes, s' == s]
-
-Read and show for edges
-
-> data E = E Edge
-
-> instance Show E where
->     showsPrec _ (E (n0, n1)) =
->         showChar '(' . shows (N n0) . showChar ' ' .
->                 shows (N n1) . showChar ')'
-
-> instance Read E where
->     readsPrec _ s0 =
->         [(E (n0, n1), s4) |
->          ("(", s1) <- lex s0,
->          (N n0, s2) <- reads s1,
->          (N n1, s3) <- reads s2,
->          (")", s4) <- lex s3]
-
-Read and show for nodes
-
-> data N = N Node
-
-> instance Show N where
->     showsPrec _ (N (s, p)) =
->         showChar '(' . shows s . showChar ' ' . shows p . showChar ')'
-
-> instance Read N where
->     readsPrec _ s0 =
->         [(N (s, p), s4) |
->          ("(", s1) <- lex s0,
->          (s, s2) <- reads s1,
->          (p, s3) <- reads s2,
->          (")", s4) <- lex s3]
diff --git a/doc/bcasyntax.tex b/doc/bcasyntax.tex
deleted file mode 100644
--- a/doc/bcasyntax.tex
+++ /dev/null
@@ -1,120 +0,0 @@
-The complete syntax for the analyzer using the Basic Crypto Algebra is
-shown in Tables~\ref{tab:syntax} and~\ref{tab:goal}.  The start
-grammar symbol is \textsc{file}, and the terminal grammar symbols
-are: \textsc{(, ), symbol, string, integer,} and the constants set in
-typewriter font.  The language used for stating security goals is in
-Table~\ref{tab:goal}.  The goal language adds the sort
-symbol \texttt{node}.
-
-The \textsc{alist}, \textsc{prot-alist}, \textsc{role-alist},
-\textsc{skel-alist}, and \textsc{goal-alist} productions are
-Lisp style association lists, that is, lists of key-value pairs, where
-every key is a symbol.  Key-value pairs with unrecognized keys are
-ignored, and are available for use by other tools.  On output,
-unrecognized key-value pairs are preserved when printing protocols,
-but elided when printing skeletons.
-
-\begin{table}
-\newcommand{\sym}[1]{\textup{\texttt{#1}}}
-\begin{center}\scshape
-\begin{tabular}{rcl}
-file&$\leftarrow$&herald?~form+
-\\herald&$\leftarrow$&
-(\sym{herald}~title~alist)
-\\title&$\leftarrow$&$\mbox{symbol}\mid\mbox{string}$
-\\form&$\leftarrow$&
-$\mbox{comment}\mid\mbox{protocol}\mid\mbox{skeleton}\mid\mbox{goal}$
-\\ comment&$\leftarrow$&
-(\sym{comment}~\ldots)
-\\ protocol&$\leftarrow$&
-(\sym{defprotocol} id alg role+ prot-alist)
-\\ id&$\leftarrow$&symbol
-\\ alg&$\leftarrow$&symbol
-\\ role&$\leftarrow$&
-(\sym{defrole} id vars trace role-alist)
-\\ vars&$\leftarrow$&
-(\sym{vars} decl$\ast$)
-\\ decl&$\leftarrow$&
-(id+ sort)
-\\ sort&$\leftarrow$&
-$\sym{text} \mid \sym{data} \mid \sym{name} \mid \sym{skey}
-\mid \sym{akey}\mid\sym{mesg}$
-\\ trace&$\leftarrow$&(\sym{trace} event+)
-\\ event&$\leftarrow$&
-$(\sym{send}\mbox{ term})\mid(\sym{recv}\mbox{ term})$
-\\ term&$\leftarrow$&
-$\mbox{id}\mid(\sym{pubk}\mbox{ id})
-\mid(\sym{privk}\mbox{ id})
-\mid(\sym{invk}\mbox{ id})$
-\\ &$\mid$&$(\sym{pubk}\mbox{ id}\mbox{ string})
-\mid(\sym{privk}\mbox{ id}\mbox{ string})$
-\\ &$\mid$&$(\sym{ltk}\mbox{ id id})\mid\mbox{string}\mid(\sym{cat}\mbox{ term+})$
-\\ &$\mid$&$(\sym{enc}\mbox{ term+ term})\mid(\sym{hash}\mbox{ term+})$
-\\ role-alist&$\leftarrow$&$
-(\sym{non-orig}\mbox{ ht-term}\ast)\mbox{ role-alist}$
-\\ &$\mid$&$(\sym{pen-non-orig}\mbox{ ht-term}\ast)\mbox{ role-alist}$
-\\ &$\mid$&$(\sym{uniq-orig}\mbox{ term}\ast)\mbox{ role-alist}\mid\ldots$
-\\ ht-term&$\leftarrow$&term${}\mid{}$(integer term)
-\\ prot-alist&$\leftarrow$&$\ldots$
-\\ skeleton&$\leftarrow$&
-(\sym{defskeleton} id vars
-\\ &&\qquad strand+ skel-alist)
-\\ strand&$\leftarrow$&
-(\sym{defstrand} id integer maplet$\ast$)
-\\ &$\mid$&(\sym{deflistener} term)
-\\ maplet&$\leftarrow$&
-(term term)
-\\ skel-alist&$\leftarrow$&$(\sym{non-orig}\mbox{ term}\ast)\mbox{ skel-alist}$
-\\ &$\mid$&$(\sym{pen-non-orig}\mbox{ term}\ast)\mbox{ skel-alist}$
-\\ &$\mid$&$(\sym{uniq-orig}\mbox{ term}\ast)\mbox{ skel-alist}$
-\\ &$\mid$&$(\sym{precedes}\mbox{ node-pair}\ast)\mbox{ skel-alist}\mid\ldots$
-\\ node-pair&$\leftarrow$&
-(node node)
-\\ node&$\leftarrow$&
-(integer integer)
-\end{tabular}
-\end{center}
-\caption{{\cpsa} Syntax}\label{tab:syntax}
-\end{table}
-
-\begin{table}
-\newcommand{\sym}[1]{\textup{\texttt{#1}}}
-\begin{center}\scshape
-\begin{tabular}{rcl}
-goal&$\leftarrow$&
-(\sym{defgoal} id sentence+ goal-alist)
-\\ sentence&$\leftarrow$&(\sym{forall} (decl$\ast$) implication)
-\\ implication&$\leftarrow$&
-(\sym{implies} \mbox{antecedent} \mbox{conclusion})
-\\ conclusion&$\leftarrow$&(\sym{false})
-   $\mid$ existential $\mid$ (\sym{or} existential$\ast)$
-\\ existential&$\leftarrow$&(\sym{exists}
-(decl$\ast$) antecedent) $\mid$ antecedent
-\\ antecedent&$\leftarrow$& atomic $\mid$ (\sym{and} atomic$\ast$)
-\\ atomic&$\leftarrow$&(\sym{p} roleid pos nvar)
-\\ &$\mid$&(\sym{p} roleid param nvar term)
-\\ &$\mid$&(\sym{str-prec} nvar nvar) $\mid$ (\sym{prec} nvar nvar)
-\\ &$\mid$&(\sym{non} term) $\mid$ (\sym{pnon} term) $\mid$ (\sym{uniq} term)
-\\ &$\mid$&(\sym{uniq-at} term nvar) $\mid$ (= term term)
-\\ roleid&$\leftarrow$& string
-\\ pos&$\leftarrow$& integer
-\\ nvar&$\leftarrow$& id
-\\ param&$\leftarrow$& string
-\end{tabular}
-\end{center}
-\caption{{\cpsa} Syntax Continued}\label{tab:goal}
-\end{table}
-
-The contents of a file can be interpreted as a sequence of
-S-expressions.  The S-expressions used are restricted so that most
-dialects of Lisp can read them, and characters within symbols and
-strings never need quoting.  Every list is proper.  An S-expression
-atom is either a \textsc{symbol}, an \textsc{integer}, or
-a \textsc{string}.  The characters that make up a symbol are the
-letters, the digits, and the special characters in
-``\verb|-*/<=>!?:$%_&~^+|''.  A symbol may not begin with a digit or a
-sign followed by a digit.  The characters that make up a string are
-the printing characters omitting double quote and backslash.  Double
-quotes delimit a string.  A comment\index{comments} begins with a
-semicolon, or is an S-expression list at top-level that starts with
-the \texttt{comment} symbol.
diff --git a/doc/blanchet.mp b/doc/blanchet.mp
deleted file mode 100644
--- a/doc/blanchet.mp
+++ /dev/null
@@ -1,146 +0,0 @@
-filenametemplate "%j-%c.mps";
-
-verbatimtex
-\documentclass{slides}
-\usepackage{color}
-\newcommand{\enc}[2]{\{\!|#1|\!\}_{#2}}
-\newcommand{\privk}[1]{\ensuremath{K^{-1}_{#1}}}
-\newcommand{\pubk}[1]{\ensuremath{K_{#1}}}
-\newcommand{\msgone}{$\enc{\enc{S}{\privk{A}}}{\pubk{B}}$}
-\newcommand{\msgtwo}{$\enc{D}{S}$}
-\newcommand{\msgthree}{$\enc{\enc{S,B}{\privk{A}}}{\pubk{B}}$}
-\newcommand{\msgfour}{$\enc{\enc{S}{\privk{A}}}{\pubk{\textcolor{blue}{B'}}}$}
-\newcommand{\msgfive}{$\enc{\enc{S}{\privk{A}}}{\pubk{B'}}$}
-\newcommand{\msgsix}{\ensuremath{\enc{S}{\privk{A}}}}
-\begin{document}
-etex
-
-input boxes;
-
-input strands;
-
-input cmstrands;
-
-ahlength := 2mm;		% Arrow head length
-
-picture node; node = btex $\bullet$ etex;
-
-% The height of a downarrow is the unit of length for a strand
-% succession edge.
-
-numeric delta;
-begingroup;
-  path p; p = bbox(btex $\downarrow$ etex);
-  delta = ypart(ulcorner p - llcorner p);
-endgroup;
-
-% The width of a leftarrow is the unit of length for a directed term
-% symbol.
-
-numeric dir_width;
-begingroup;
-  path p; p = bbox(btex $\leftarrow$ etex);
-  dir_width = xpart (lrcorner p - llcorner p);
-endgroup;
-
-w = 19cm;			% Width of diagram
-
-% Node vertical node separation is gamma
-
-numeric gamma;
-gamma = 2delta;
-
-beginfig(0);
-  % Backbone
-  strand.a(2, origin, gamma, btex $\mathstrut\mathit{init}$ etex, node);
-
-  % Messages
-  outbnd.a(1, dir_width, btex \msgone etex);
-  inbnd.a(2, dir_width, btex \msgtwo etex);
-endfig;
-
-% Responder role
-
-beginfig(1);
-  % Backbone
-  strand.a(2, origin, gamma, btex $\mathstrut\mathit{resp}$ etex, node);
-
-  % Messages
-  rinbnd.a(1, dir_width, btex \msgone etex);
-  routbnd.a(2, dir_width, btex \msgtwo etex);
-endfig;
-
-beginfig(2);
-  % Backbone
-  strand.a(2, origin, gamma, btex $\mathstrut\mathit{init}$ etex, node);
-
-  % Messages
-  outbnd.a(1, dir_width, btex \msgthree etex);
-  inbnd.a(2, dir_width, btex \msgtwo etex);
-endfig;
-
-% Responder role
-
-beginfig(3);
-  % Backbone
-  strand.b(2, origin, gamma, btex $\mathstrut\mathit{resp}$ etex, node);
-
-  % Messages
-  rinbnd.b(1, dir_width, btex \msgthree etex);
-  routbnd.b(2, dir_width, btex \msgtwo etex);
-endfig;
-
-beginfig(4);
-  % Backbones
-  strand.b(2, origin, gamma,
-    btex $\mathstrut\mathit{resp}$ etex, node);
-  strand.a(1, (w, ypart b1.c), gamma,
-    btex $\mathstrut\mathit{init}$ etex, node);
-
-  boxit.o1(btex $\succ$ etex);
-  o1.c = .5[b1.c,a1.c];
-  draw pic o1;
-
-  drawmsg(a1.w -- o1.e);
-  drawmsg(o1.w -- b1.e);
-  label.top(btex \msgfour etex, .5[a1.w,o1.e]);
-  label.top(btex \msgone etex, .5[o1.w,b1.e]);
-endfig;
-
-beginfig(5);
-  % Initial point-of-view
-  strand.b(2, origin, gamma,
-    btex $\mathstrut\textcolor{red}{\mathit{resp}}$ etex, node);
-endfig;
-
-beginfig(6);
-  % Bundle
-  strand.b(2, origin, gamma,
-    btex $\mathstrut\mathit{resp}$ etex, node);
-  strand.e(3, (2w/3, ypart b1.c), gamma,
-    btex $\mathstrut\mathit{enc}$ etex, node);
-  strand.g(1, (w/3, ypart e2.c), gamma,
-    btex $\mathstrut\mathit{gen}$ etex, node);
-  strand.d(3, (w/3, ypart e1.c), gamma,
-    btex $\mathstrut\mathit{dec}$ etex, node);
-  strand.h(1, (2w/3, ypart d2.c), gamma,
-    btex $\mathstrut\mathit{gen}$ etex, node);
-  strand.a(1, (w, ypart d1.c), gamma,
-    btex $\mathstrut\mathit{init}$ etex, node);
-
-  drawmsg(e3.w -- b1.e);
-  label.top(btex \msgone etex, .5[e3.w,b1.e]);
-  drawmsg(g1.e -- e2.w);
-  label.top(btex \pubk{B} etex, .5[g1.e,e2.w]);
-  drawmsg(d3.e -- e1.w);
-  label.top(btex \msgsix etex, .5[d3.e,e1.w]);
-  drawmsg(h1.w -- d2.e);
-  label.top(btex \privk{B'} etex, .5[h1.w,d2.e]);
-  drawmsg(a1.w -- d1.e);
-  label.top(btex \msgfive etex, .5[a1.w,d1.e]);
-endfig;
-
-verbatimtex
-\end{document}
-etex
-bye;
diff --git a/doc/blanchet.scm b/doc/blanchet.scm
deleted file mode 100644
--- a/doc/blanchet.scm
+++ /dev/null
@@ -1,88 +0,0 @@
-(herald "Blanchet's Simple Example Protocol"
-  (comment "There is a flaw in this protocol by design"))
-
-(defprotocol blanchet basic
-  (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace
-     (send (enc (enc s (privk a)) (pubk b)))
-     (recv (enc d s))))
-  (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace
-     (recv (enc (enc s (privk a)) (pubk b)))
-     (send (enc d s))))
-  (comment "Blanchet's protocol using named asymmetric keys"))
-
-(defskeleton blanchet
-  (vars (a b name) (s skey) (d data))
-  (defstrand init 2 (a a) (b b) (s s) (d d))
-  (non-orig (privk b))
-  (uniq-orig s)
-  (comment "Analyze from the initiator's perspective"))
-
-(defskeleton blanchet
-  (vars (a b name) (s skey) (d data))
-  (defstrand init 2 (a a) (b b) (s s) (d d))
-  (deflistener d)
-  (non-orig (privk b))
-  (uniq-orig s d)
-  (comment "From the initiator's perspective, is the secret leaked?"))
-
-(defskeleton blanchet
-  (vars (a b name) (s skey) (d data))
-  (defstrand resp 2 (a a) (b b) (s s) (d d))
-  (non-orig (privk a) (privk b))
-  (uniq-orig s)
-  (comment "Analyze from the responder's perspective"))
-
-(defskeleton blanchet
-  (vars (a b name) (s skey) (d data))
-  (defstrand resp 2 (a a) (b b) (s s) (d d))
-  (deflistener d)
-  (non-orig (privk a) (privk b))
-  (uniq-orig s d)
-  (comment "From the responders's perspective, is the secret leaked?"))
-
-(defprotocol blanchet-fixed basic
-  (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace
-     (send (enc (enc s b (privk a)) (pubk b)))
-     (recv (enc d s))))
-  (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace
-     (recv (enc (enc s b (privk a)) (pubk b)))
-     (send (enc d s))))
-  (comment "Fixed Blanchet's protocol using named asymmetric keys"))
-
-(defskeleton blanchet-fixed
-  (vars (a b name) (s skey) (d data))
-  (defstrand init 2 (a a) (b b) (s s) (d d))
-  (non-orig (privk b))
-  (uniq-orig s)
-  (comment "Analyze from the initiator's perspective"))
-
-(defskeleton blanchet-fixed
-  (vars (a b name) (s skey) (d data))
-  (defstrand init 2 (a a) (b b) (s s) (d d))
-  (deflistener d)
-  (non-orig (privk b))
-  (uniq-orig s d)
-  (comment "From the initiator's perspective, is the secret leaked?"))
-
-(defskeleton blanchet-fixed
-  (vars (a b name) (s skey) (d data))
-  (defstrand resp 2 (a a) (b b) (s s) (d d))
-  (non-orig (privk a) (privk b))
-  (uniq-orig s)
-  (comment "Analyze from the responder's perspective"))
-
-(defskeleton blanchet-fixed
-  (vars (a b name) (s skey) (d data))
-  (defstrand resp 2 (a a) (b b) (s s) (d d))
-  (deflistener d)
-  (non-orig (privk a) (privk b))
-  (uniq-orig s d)
-  (comment "From the responders's perspective, is the secret leaked?"))
diff --git a/doc/carriers.mp b/doc/carriers.mp
deleted file mode 100644
--- a/doc/carriers.mp
+++ /dev/null
@@ -1,64 +0,0 @@
-filenametemplate "%j-%c.mps";
-
-verbatimtex
-\documentclass[12pt]{article}
-\newcommand{\enc}[2]{\{\!|#1|\!\}_{#2}}
-\begin{document}
-etex
-
-numeric base_width;
-begingroup;
-  path p; p = bbox(btex $\strut$ etex rotated 90);
-  base_width = 1.3 xpart (lrcorner p - llcorner p);
-endgroup;
-
-input boxes;
-
-beginfig(0);
-  boxit.b1(btex $X_\top$ etex);
-  boxit.b2(btex $\mathsf{text}$ etex rotated 90);
-  boxit.b3(btex $\mathsf{data}$ etex rotated 90);
-  boxit.b4(btex $\mathsf{name}$ etex rotated 90);
-  boxit.b5(btex $\mathsf{akey}$ etex rotated 90);
-  boxit.b6(btex $\mathsf{skey}$ etex rotated 90);
-  boxit.b7(btex $\mathsf{tags}$ etex rotated 90);
-
-  b4.s = origin;
-
-  for i = 1 upto 6:
-    b[i].sw=b[i+1].se;
-    b[i].nw=b[i+1].ne;
-  endfor;
-
-  for i = 1 upto 7:
-    b[i].e + (base_width, 0) = b[i].w;
-  endfor;
-
-  for i = 4 upto 6:
-    drawboxed(b[i]);
-  endfor;
-
-  for i = 3 downto 2:
-    drawboxed(b[i]);
-  endfor;
-
-  draw pic b[1];
-  draw pic b[7];
-
-  % Top of triangle contrained to force a right triange
-  z1 = b4.n - b4.s + (b7.nw - b4.n) rotated 90;
-
-  ypart z2 = ypart z3 = 0;
-  z2 = whatever[b7.nw,z1];
-  z3 = whatever[b1.ne,z1];
-
-  draw z1--z2--z3--z1;
-
-  label(btex \begin{tabular}{c}pairings\\[1ex]
-    encryptions\end{tabular} etex, .5z1);
-endfig;
-
-verbatimtex
-\end{document}
-etex
-bye;
diff --git a/doc/cmstrands.mp b/doc/cmstrands.mp
deleted file mode 100644
--- a/doc/cmstrands.mp
+++ /dev/null
@@ -1,24 +0,0 @@
-% CM strand arrows for documents
-
-% Use the cmarrows package if you want double arrows for strand
-% succession edges.
-
-input cmarrows;
-
-setup_cmarrows(
-  arrow_name = "doublearrow";
-  parameter_file = "cmr12.mf";
-  macro_name = "drawdubarrow");
-
-def drawsucc(expr p) =
-  drawdubarrow p;
-enddef;
-
-setup_cmarrows(
-  arrow_name = "texarrow";
-  parameter_file = "cmr12.mf";
-  macro_name = "drawtexarrow");
-
-def drawmsg(expr p) =
-  drawtexarrow p;
-enddef;
diff --git a/doc/cpsa.bib b/doc/cpsa.bib
deleted file mode 100644
--- a/doc/cpsa.bib
+++ /dev/null
@@ -1,454 +0,0 @@
-@Book{Pierce91,
-  author = {Benjamin C. Pierce},
-  title = {Basic Category Theory for Computer Sicentists},
-  publisher = {The {MIT} Press},
-  year = 1991}
-
-@Unpublished{DoghmiGuttmanThayer06a,
-  author = 	 {Shaddin F. Doghmi and Joshua D.~Guttman and F. Javier
-  Thayer},
-  title = 	 {Searching for Shapes in Cryptographic Protocols (Extended Version)},
-  note = 	 {\url{http://eprint.iacr.org/2006/435}},
-  month = 	 nov,
-  year = 	 2006}
-
-@InProceedings{DoghmiGuttmanThayer07,
-  author    = {Shaddin F. Doghmi and
-               Joshua D. Guttman and
-               F. Javier Thayer},
-  title = 	 {Searching for Shapes in Cryptographic Protocols},
-  booktitle = {Tools and Algorithms for Construction and
-               Analysis of Systems {(TACAS)}},
-  year = 	 2007,
-  series = 	 {LNCS},
-  number =	 4424,
-  pages =	{523--538},
-  month = 	 mar,
-  publisher = {Springer},
-  note = 	 {Extended version at \url{http://eprint.iacr.org/2006/435}}}
-
-@InProceedings{Fay79,
-  author = {M. Fay},
-  title = {First-order Unification in an Equational Theory},
-  booktitle = {Proc. 4th Workshop on Automated Deduction},
-  year = 1979}
-
-@Book{BaaderNipkow98,
-  author = {Franz Baader and Tobias Nipkow},
-  title = {Term Rewriting and All That},
-  publisher = {Cambridge University Press},
-  year = 1998}
-
-@Book{Paulson91,
-  author = {Laurence C. Paulson},
-  title = {ML for the Working Programmer},
-  publisher = {Cambridge University Press},
-  year = 1991}
-
-@Book{RobinsonVoronkov01,
-  author = {Alan Robinson and Andrei Voronkov},
-  title = {Handbook of Automated Reasoning},
-  vol = 1,
-  publisher = {The {MIT} Press},
-  year = 2001}
-
-@InCollection{BaaderSnyder01,
-  author = 	 {Franz Baader and Wayne Snyder},
-  title = 	 {Unification Theory},
-  booktitle = 	 {Handbook of Automated Reasoning},
-  publisher =    {The {MIT} Press},
-  year =         2001,
-  editor = 	 {Alan Robinson and Andrei Voronkov},
-  volume = 	 1,
-  chapter = 	 8,
-  note = {\url{http://www.cs.bu.edu/~snyder/publications/UnifChapter.pdf‎}}}
-
-@InProceedings{KepserRichts99,
-  author = 	 {Stephan Kepser and J\"{o}rn Richts},
-  title = 	 {Optimisation Techniques for Combining Constraint Solvers},
-  booktitle =    {Frontiers of Combining Systems 2},
-  pages = 	 {193--210},
-  year = 	 1999,
-  editor = 	 {Maarten de Rijke and Dov Gabbay},
-  address = 	 {Asmsterdam},
-  publisher =    {Research Studies Press/Wiley},
-  note = {\url{http://tcl.sfs.uni-tuebingen.de/~kepser/papers/optimisation.ps.gz}}}
-
-@InProceedings{MeadowsNarendran02,
-  author = {Catherine Meadows and Paliath Narendran},
-  title = {A Unification Algorithm for the Group Diffie-Hellman Protocol},
-  booktitle = {WITS 2002},
-  month = jan,
-  year = 2002,
-  note = {\url{http://www.dsi.unive.it/IFIPWG1_7/WITS2002/prog/annotated_program.html}}}
-
-@PhdThesis{Liu12,
-  author = 	 {Zhiqiang Liu},
-  title = 	 {Dealing Efficiently with Exclusive OR, Abelian
-                  Groups and Homomorphism in Cryptographic Protocol
-                  Analysis},
-  school = 	 {Clarkson University},
-  year = 	 2012,
-  month = 	 sep,
-  note = 	 {\url{http://people.clarkson.edu/~clynch/papers/}}}
-
-@article{GoguenMeseguer92,
-    author = "Joseph A. Goguen and Jose Meseguer",
-    title = "Order-Sorted Algebra {I}: Equational Deduction for Multiple
-Inheritance, Overloading, Exceptions and Partial Operations",
-    journal = "Theoretical Computer Science",
-    volume = "105",
-    number = "2",
-    pages = "217--273",
-    year = "1992",
-    url = "citeseer.ist.psu.edu/goguen92ordersorted.html" }
-
-@inproceedings{Millen99,
-    author = "Jonathan K. Millen",
-    title = "A Necessarily Parallel Attack",
-    booktitle = "Workshop on Formal Methods and Security Protocols,
-Part of the Federated Logic Conference",
-    address = "Trento, Italy",
-    editor = "Nevin Heintze and Edmund Clarke",
-    year = "1999",
-    url = "citeseer.ist.psu.edu/millen99necessarily.html" }
-
-@inproceedings{PavlovicMeadows06,
-    author = "Dusko Pavlovic and Catherine Meadows",
-    title = "Deriving Secrecy in Key Establishment Protocols",
-    booktitle = "European Symposium on Research in Computer Security",
-    month = sep,
-    year = 2006,
-    url = "http://www.kestrel.edu/home/people/pavlovic/security.html" }
-
-@article{GansnerNorth00,
-    author = "Emden R. Gansner and Stephen C. North",
-    title = "An open graph visualization system and its applications to software engineering",
-    journal = "Soft\-ware --- Prac\-tice and Experience",
-    volume = "30",
-    number = "11",
-    pages = "1203--1233",
-    year = "2000",
-    url = "citeseer.ist.psu.edu/gansner99open.html" }
-
-@Unpublished{Dijkstra82,
-  author = 	 {Edsger W. Dijkstra},
-  title = 	 {Why numbering should start at zero},
-  note = 	 {\url{http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html}},
-  month = 	 aug,
-  year = 	 1982}
-
-@article{GuttmanThayer02,
-  author    = {Joshua D. Guttman and
-               F. Javier Thayer},
-  title     = {Authentication tests and the structure of bundles},
-  journal   = {Theor. Comput. Sci.},
-  volume    = {283},
-  number    = {2},
-  year      = {2002},
-  pages     = {333--380},
-  ee        = {http://dx.doi.org/10.1016/S0304-3975(01)00139-6},
-  bibsource = {DBLP, http://dblp.uni-trier.de}
-}
-
-@article{ThayerEtal99,
-  author    = {F. Javier Thayer and
-               Jonathan C. Herzog and
-               Joshua D. Guttman},
-  title     = {Strand Spaces: Proving Security Protocols Correct},
-  journal   = {Journal of Computer Security},
-  volume    = {7},
-  number    = {1},
-  year      = {1999},
-  bibsource = {DBLP, http://dblp.uni-trier.de}
-}
-
-@article{DolevYao83,
-    author = "Daniel Dolev and Andrew Yao",
-    title = "On the security of public-key protocols",
-    journal = "{IEEE} Transactions on Information Theory",
-    volume = 29,
-    pages = "198--208",
-    year = 1983
-}
-
-@TechReport{cpsatheory11,
-  title = 	 {Completeness of {CPSA}},
-  author = 	 {Moses D.~Liskov and Paul D.~Rowe and F.~Javier Thayer},
-  institution = {The MITRE Corporation},
-  year = 	 2011,
-  number = 	 {MTR110479},
-}
-
-@Manual{cpsaspec09,
-  title = 	 {The {CPSA} Specification:
-    A Reduction System for Searching for Shapes in Cryptographic Protocols},
-  OPTkey = 	 {},
-  author = 	 {John D.~Ramsdell and Joshua D.~Guttman and Moses D.~Liskov and Paul D.~Rowe},
-  organization = {The MITRE Corporation},
-  OPTaddress = 	 {},
-  OPTedition = 	 {},
-  OPTmonth = 	 {},
-  year = 	 2009,
-  note = 	 {In \url{http://hackage.haskell.org/package/cpsa} source
-    distribution, \texttt{doc} directory},
-  OPTannote = 	 {}
-}
-
-@Manual{cpsadesign09,
-  title = 	 {{CPSA} Design},
-  OPTkey = 	 {},
-  author = 	 {John D.~Ramsdell and Joshua D.~Guttman},
-  organization = {The MITRE Corporation},
-  OPTaddress = 	 {},
-  OPTedition = 	 {},
-  OPTmonth = 	 {},
-  year = 	 2009,
-  note = 	 {In \url{http://hackage.haskell.org/package/cpsa} source
-    distribution, \texttt{doc} directory},
-  OPTannote = 	 {}
-}
-
-@Manual{cpsaprimer09,
-  title = 	 {{CPSA} Primer},
-  OPTkey = 	 {},
-  author = 	 {John D.~Ramsdell and Joshua D.~Guttman},
-  organization = {The MITRE Corporation},
-  OPTaddress = 	 {},
-  OPTedition = 	 {},
-  OPTmonth = 	 {},
-  year = 	 2009,
-  note = 	 {In \url{http://hackage.haskell.org/package/cpsa} source
-    distribution, \texttt{doc} directory},
-  OPTannote = 	 {}
-}
-
-@Manual{cpsagoals09,
-  title = 	 {{CPSA} and Formal Security Goals},
-  OPTkey = 	 {},
-  author = 	 {John D.~Ramsdell},
-  organization = {The MITRE Corporation},
-  OPTaddress = 	 {},
-  OPTedition = 	 {},
-  OPTmonth = 	 {},
-  year = 	 2015,
-  note = 	 {In \url{http://hackage.haskell.org/package/cpsa} source
-    distribution, \texttt{doc} directory},
-  OPTannote = 	 {}
-}
-
-@Manual{cpsaoverview09,
-  title = 	 {{CPSA} Overview},
-  OPTkey = 	 {},
-  author = 	 {John D.~Ramsdell and Joshua D.~Guttman},
-  organization = {The MITRE Corporation},
-  OPTaddress = 	 {},
-  OPTedition = 	 {},
-  OPTmonth = 	 {},
-  year = 	 2009,
-  note = 	 {In \url{http://hackage.haskell.org/package/cpsa} source
-    distribution, \texttt{doc} directory},
-  OPTannote = 	 {}
-}
-
-@Manual{cpsauser09,
-  title = 	 {{CPSA} User Guide},
-  OPTkey = 	 {},
-  author = 	 {John D.~Ramsdell},
-  organization = {The MITRE Corporation},
-  OPTaddress = 	 {},
-  OPTedition = 	 {},
-  OPTmonth = 	 {},
-  year = 	 2009,
-  note = 	 {In \url{http://hackage.haskell.org/package/cpsa} source
-    distribution, \texttt{doc} directory},
-  OPTannote = 	 {}
-}
-
-@InCollection{cpsa09,
-  author = 	 {John D. Ramsdell and Joshua D. Guttman},
-  title = 	 {{CPSA}: A cryptographic protocol shapes analyzer},
-  booktitle = 	 {Hackage},
-  OPTcrossref =  {},
-  OPTkey = 	 {},
-  OPTpages = 	 {},
-  publisher =    {The MITRE Corporation},
-  year = 	 2009,
-  OPTeditor = 	 {},
-  OPTvolume = 	 {},
-  OPTnumber = 	 {},
-  OPTseries = 	 {},
-  OPTtype = 	 {},
-  OPTchapter = 	 {},
-  OPTaddress = 	 {},
-  OPTedition = 	 {},
-  OPTmonth = 	 {},
-  note = 	 {\url{http://hackage.haskell.org/package/cpsa}},
-  OPTannote = 	 {}
-}
-
-@unpublished{algimpl11,
-  author = {Moses Liskov and John D. Ramsdell},
-  title = {Implementing Strand Space Algebras},
-  note = {\url{http://www.ccs.neu.edu/home/ramsdell/papers/algimpl.pdf}},
-  year = 2011
-}
-
-@incollection{ComonLundhMillen10,
-    author=	 {H. Comon-Lundh and S. Delaune and J. Millen},
-    title =	 {Constraint solving techniques and enriching
-                  the model with equational theories},
-    booktitle =	 {Formal Models and Techniques for Analyzing
-                  Security Protocols},
-    editor =	 {Veronique Cortier and Steve Kremer},
-    series =	 {Cryptology and Information Security Series},
-    volume = 	 5,
-    year =	 2011,
-    isbn =	 {978-1-60750-713-0},
-    publisher =	 {{ISO} Press}
-    }
-
-@InCollection{Guttman11,
-  author = 	 {Joshua D. Guttman},
-  title = 	 {Shapes: Surveying Crypto Protocol Runs},
-  booktitle = 	 {Formal Models and Techniques for Analyzing
-                  Security Protocols},
-  key = 	 {CortierKremer2011},
-  publisher =	 {{IOS} Press},
-  year = 	 2011,
-  volume = 	 5,
-  isbn =	 {978-1-60750-713-0},
-  editor = 	 {Veronique Cortier and Steve Kremer},
-  series = 	 {Cryptology and Information Security Series}}
-
-@article{CokerEtAl11,
-   author = {George Coker and Joshua Guttman and Peter Loscocco and
-                  Amy Herzog and Jonathan Millen and Brian O'Hanlon
-                  and John Ramsdell and Ariel Segall and Justin Sheehy
-                  and Brian Sniffen},
-   affiliation = {National Security Agency and The MITRE Corporation},
-   title = {Principles of remote attestation},
-   journal = {International Journal of Information Security},
-   publisher = {Springer Berlin / Heidelberg},
-   issn = {1615-5262},
-   keyword = {Computer Science},
-   pages = {63-81},
-   volume = {10},
-   issue = {2},
-   url = {http://dx.doi.org/10.1007/s10207-011-0124-7},
-   note = {10.1007/s10207-011-0124-7},
-   year = {2011}
-}
-
-@InProceedings{Guttman09,
-  author = 	 {Joshua D. Guttman},
-  title = 	 {Security Theorems via Model Theory},
-  OPTcrossref =  {},
-  OPTkey = 	 {},
-  booktitle =    {Express: Expressiveness in Concurrency,
-                  Workshop affiliated with Concur},
-  OPTpages = 	 {},
-  year = 	 2009,
-  OPTeditor = 	 {},
-  OPTvolume = 	 {},
-  OPTnumber = 	 {},
-  OPTseries = 	 {},
-  OPTaddress = 	 {},
-  month = 	 sep,
-  OPTorganization = {},
-  OPTpublisher = {},
-  note = 	 {Post-proceedings to appear in EPTCS,
-                  \url{http://www.eptcs.org/}},
-  OPTannote = 	 {}
-}
-
-@article{DenningSacco81,
-  author =	 {Dorothy E. Denning and Giovanni M. Sacco},
-  title =	 {Timestamps in key distribution protocols},
-  journal =	 {Communications of the ACM},
-  volume =	 24,
-  number =	 8,
-  pages =	 {533--536},
-  month =	 aug,
-  year =	 1981
-}
-
-@inproceedings{GuttmanEtAl04,
-    author = {Joshua D. Guttman and F. Javier Thayer and Jay A. Carlson and Jonathan C. Herzog and John D. Ramsdell and Brian T. Sniffen},
-    title = {Trust management in strand spaces: A rely-guarantee method},
-    booktitle = {In Proc. of the European Symposium on Programming (ESOP ’04), LNCS},
-    year = 2004,
-    pages = {325--339},
-    publisher = {Springer-Verlag}
-}
-
-@Misc{Ramsdell12,
-  author = 	 {John D. Ramsdell},
-  title = 	 {Deducing Security Goals from Shape Analysis Sentences},
-  howpublished = {The MITRE Corporation},
-  month =        apr,
-  year = 	 2012,
-  note = 	 {\url{http://arxiv.org/abs/1204.0480}}}
-
-@TechReport{Ramsdell13,
-  title = 	 {Proving Security Goals With Shape Analysis Sentences},
-  author = 	 {John D.~Ramsdell},
-  institution =  {The MITRE Corporation},
-  year = 	 2013,
-  month =        sep,
-  number = 	 {MTR130488},
-  note =         {\url{http://arxiv.org/abs/1403.3563}},
-}
-
-@Misc{RamsdellEtAl14,
-  author = 	 {John D. Ramsdell and Daniel J. Dougherty and
-                  Joshua D. Guttman and Paul D. Rowe},
-  title = 	 {A Hybrid Analysis for Security Protocols with State},
-  howpublished = {The MITRE Corporation and Worcester Polytechnic Institute},
-  month =        apr,
-  year = 	 2014,
-  note = 	 {\url{http://arxiv.org/abs/1404.3899}}}
-
-@TechReport{RamsdellEtAl09,
-  author = 	 {John D. Ramsdell and Joshua D. Guttman and
-                  Jonathan K. Millen and Brian O'Hanlon},
-  title = 	 {An Analysis of the {CAVES} Attestation Protocol using {CPSA}},
-  note = 	 {\url{http://arxiv.org/abs/1207.0418}},
-  institution =  {The {MITRE} Corporation},
-  month = 	 dec,
-  year = 	 2009,
-  type = 	 {{MITRE} Technical Report},
-  number = 	 {{MTR090213}}
-}
-
-@InProceedings{GuttmanLiskovRowe14,
-  author = 	 {Joshua D. Guttman and Moses D. Liskov and Paul D. Rowe},
-  title = 	 {Security Goals and Evolving Standards},
-  booktitle =    {Security Standardization Research},
-  year = 	 2014,
-  editor = 	 {Liqun Chen and Chris Mitchell},
-  volume = 	 8839,
-  series = 	 {LNCS},
-  pages = 	 {93--110},
-  month = 	 dec,
-  publisher =    {Springer},
-}
-
-@Article{Guttman14,
-  author = 	 {Joshua D. Guttman},
-  title = 	 {Establishing and Preserving Protocol Security Goals},
-  journal = 	 {Journal of Computer Security},
-  year = 	 2014,
-  volume = 	 22,
-  number = 	 2,
-  pages = 	 {201--267}}
-
-@Unpublished{prover9,
-  author = 	 {Bill W. McCune},
-  title = 	 {Prover9},
-  note = 	 {\url{http://www.cs.unm.edu/~mccune/mace4/}},
-  OPTkey = 	 {},
-  OPTmonth = 	 {},
-  OPTyear = 	 {},
-  OPTannote = 	 {}
-}
diff --git a/doc/cpsa.mk b/doc/cpsa.mk
--- a/doc/cpsa.mk
+++ b/doc/cpsa.mk
@@ -5,38 +5,38 @@
 
 # Analyze protocols for shapes
 %.txt:		%.scm
-	$(CPSATIME) cpsa $(CPSAFLAGS) -o $@ $<
+	$(CPSATIME) cpsa3 $(CPSAFLAGS) -o $@ $<
 
 # Analyze protocols for shapes, but don't fail when CPSA does
 %.txt:		%.lsp
-	-$(CPSATIME) cpsa $(CPSAFLAGS) -o $@ $<
+	-$(CPSATIME) cpsa3 $(CPSAFLAGS) -o $@ $<
 
 # Extract shapes
 %_shapes.txt:	%.txt
-	cpsashapes $(SHAPESFLAGS) -o $@ $<
+	cpsa3shapes $(SHAPESFLAGS) -o $@ $<
 
 # Extract shape analysis sentences
 %_sas.text:	%.txt
-	cpsasas $(SASFLAGS) -o $@ $<
+	cpsa3sas $(SASFLAGS) -o $@ $<
 
 # Annotate shapes
 %_annotations.txt:	%_shapes.txt
-	cpsaannotations $(ANNOTATIONSFLAGS) -o $@ $<
+	cpsa3annotations $(ANNOTATIONSFLAGS) -o $@ $<
 
 # Compute protocol parameters
 %_parameters.txt:	%_shapes.txt
-	cpsaparameters $(PARAMETERSFLAGS) -o $@ $<
+	cpsa3parameters $(PARAMETERSFLAGS) -o $@ $<
 
 # Visualize output using the expanded format (default)
 %.xhtml:	%.txt
-	cpsagraph $(GRAPHFLAGS) -o $@ $<
+	cpsa3graph $(GRAPHFLAGS) -o $@ $<
 
 # Visualize output using the compact format
 %.svg:		%.txt
-	cpsagraph -c -o $@ $<
+	cpsa3graph -c -o $@ $<
 
 # Visualize output using the LaTeX format
 %.tex:		%.txt
-	cpsagraph -l -m 62 -o $@ $<
+	cpsa3graph -l -m 62 -o $@ $<
 
 .PRECIOUS:	%.txt %_shapes.txt %_annotations.txt
diff --git a/doc/cpsadesign.pdf b/doc/cpsadesign.pdf
deleted file mode 100644
Binary files a/doc/cpsadesign.pdf and /dev/null differ
diff --git a/doc/cpsadesign.tex b/doc/cpsadesign.tex
deleted file mode 100644
--- a/doc/cpsadesign.tex
+++ /dev/null
@@ -1,1290 +0,0 @@
-\documentclass[12pt]{report}
-\usepackage{amssymb}
-\usepackage{amsmath}
-\usepackage{amsthm}
-\usepackage{url}
-\usepackage{graphicx}
-\usepackage{makeidx}
-\theoremstyle{definition}
-\newtheorem{defn}{Definition}[chapter]
-\newtheorem{thm}{Theorem}[chapter]
-\newtheorem{lem}[thm]{Lemma}
-\input{macros}
-\newcommand{\gen}{\ensuremath{G}}
-
-\makeindex
-
-\title{CPSA Design}
-\author{John D.~Ramsdell\qquad Joshua D.~Guttman\\
-  The MITRE Corporation\\ CPSA Version \version}
-
-\begin{document}
-\maketitle
-\cpsacopying
-
-\tableofcontents
-
-\chapter{Introduction}
-
-The Cryptographic Protocol Shapes Analyzer ({\cpsa}) attempts to
-enumerate all essentially different executions possible for a
-cryptographic protocol.  We call them the \emph{shapes} of the
-protocol.  Naturally occurring protocols have only finitely many,
-indeed very few shapes.  Authentication and secrecy properties are
-easy to determine from them, as are attacks and anomalies.
-
-The shapes analysis is performed within a pure Dolev-Yao model.  The
-{\cpsa} program reads a sequence of problem descriptions, and prints
-the steps it used to solve each problem.  For each input problem,
-{\cpsa} is given some initial behavior, and it descovers what shapes
-are compatible with it.  Normally, the initial behavior is from the
-point of view of one participant.  The analysis reveals what the other
-participants must have done, given the participant's view.
-
-Ideally, if there is a finite number of shapes associated with a
-problem statement, {\cpsa} will find them given enough resources.  In
-other words, the search is complete, i.e.\ every shape can in fact be
-found in a finite number of steps.  The Completeness of
-{\cpsa}~\cite{cpsatheory11} contains a proof that the search algorithm
-is complete.
-
-A {\cpsa} release includes two other documents, The {\cpsa}
-Specification~\cite{cpsaspec09} and the {\cpsa}
-Primer~\cite{cpsaprimer09}.  The specification describes the {\cpsa}
-algorithm in a form that is closely related to its implementation.
-
-There are many design decisions that are not reflected in the
-specification.  Including these decisions in the specification would
-clutter the document.  The purpose of this document is to describe the
-key omitted design decisions and provide a link between the
-specification and the source code.  It assumes the specification has
-been thoroughly read.  Definitions are not reproduced, so the
-specification should be accessible when reading this document.  The
-{\cpsa} Primer provides an overview of {\cpsa}, and may be worth
-reading before this document is approached.
-
-\section{Notation}\label{sec:notation}
-
-Originally, the specification and the design were one and the same.
-Everything was specified in the design formalism.  After the split,
-the description of protocols and preskeletons diverged by omitting
-details in the design formalism in what is used for the specification
-formalism.
-
-The key difference between the two formalisms is the design formalism
-more directly models the Haskell data structures used in the {\cpsa}
-program.  An instance of a Haskell data structure is modeled as an
-element in an order-sorted term algebra~\cite{GoguenMeseguer92}.  The
-reduction systems in the specification translate to term reduction
-systems in the design.
-
-Unlike the specification, zero-based indexing\index{zero-based
-  indexing}\index{indexing, zero-based} is used though out this
-document and in the source code it describes.  In what follows, a
-finite sequence is a function from an initial segment of the natural
-numbers.  The length of a sequence~$f$ is~$|f|$, and
-sequence~$f=\seq{f(0),\ldots,f(n-1)}$ for $n=|f|$.  Alternatively,
-$\seq{x_0,x_1,\ldots,x_{n-1}} =x_0\cons x_1\cons\ldots\cons
-x_{n-1}\cons\seq{}$.  If~$S$ is a set, then~$S^\ast$ is the set of
-finite sequences of~$S$, and~$S^+$ is the non-empty finite sequences
-of~$S$.  The concatenation of sequences~$f$ and~$f'$ is~$f\append f'$.
-The prefix of sequence~$f$ of length~$n$ is~$\prefix{f}{n}$.
-
-Those familiar with literature on strand spaces might wonder why
-lowercase $k$ is used for skeletons rather than blackboard bold
-$\mathbb{A}$.  The notation used in the design document is motivated
-by the code, and~$k$ with and without decoration somehow became
-associated with preskeletons, probably because $p$, $r$, $t$, and $s$,
-were already in use.  Many other notational conventions are directly
-inspired by the code.
-
-In this document, lowercase Latin letters usually stand for terms, and
-uppercase Latin letters stand for sequences or sets of terms.
-
-\chapter{Messages}\label{cha:messages}
-
-The formalism used in the design and the specification for message
-algebras is the same, an order-sorted term algebra.  This chapter
-describes the relation between terms and the external syntax used by
-the {\cpsa} program for the Basic Crypto Algebra, and then describes
-the interface between the algebra module and the rest of the program.
-
-Table~\ref{tab:bca} presents a slightly modified signature for the
-Basic Crypto Algebra.  It specifies a syntax for operations that
-follows mathematical tradition, such as writing $K_A$ for
-$\cn{pubk}(A)$.  Tag constants are quoted strings.
-
-\begin{table}
-\begin{center}
-Base sort symbols: \dom{name}, \dom{text}, \dom{data}, \dom{skey},
-\dom{akey}\\
-Non-base sort symbol: \dom{mesg} \\[1ex]
-Subsorts: \dom{name}, \dom{text}, \dom{data}, \dom{akey},
-$\dom{skey}<\dom{mesg}$\\[1ex]
-\begin{tabular}{@{}ll}
-$\enc{\cdot}{(\cdot)}\colon\dom{mesg}\times\dom{mesg}\rightarrow\dom{mesg}$
-&Encryption\\
-$\#\colon\dom{mesg}\rightarrow\dom{mesg}$
-&Hashing\\
-$(\cdot,\cdot)\colon\dom{mesg}\times\dom{mesg}\rightarrow\dom{mesg}$
-&Pairing\\
-``\ldots''$\colon\dom{mesg}$& Tag constants\\
-$K_{(\cdot)}\colon\dom{name}\rightarrow\dom{akey}$
-&Public key of name\\
-$(\cdot)^{-1}\colon\dom{akey}\rightarrow\dom{akey}$
-&Inverse of asymmetric key\\
-$\cn{ltk}\colon\dom{name}\times\dom{name}\rightarrow\dom{skey}$
-& Long term shared key
-\end{tabular}\\[1ex]
-Axiom: $(x^{-1})^{-1}\approx x$ for $x\colon\dom{akey}$\\[1ex]
-\caption{Basic Crypto Signature}\label{tab:bca}
-\end{center}
-\end{table}
-
-For pairing, parentheses are omitted when the context permits, and
-comma is right associative.  Pairing was once called concatenation,
-hence the use of the symbol \texttt{cat} for pairing.
-
-In the actual implementation, binary operations for \cn{pubk} and
-\cn{privk} have been added.  The first argument is a name and the
-second argument is a tag.  This extension was added so as to model key
-usage, such as associating a signing and encryption key with a name.
-
-In the S-expression syntax used by the program, the simplest term is a
-variable, which syntactically is a \textsc{symbol} as described in
-Appendix~\ref{cha:bca syntax reference}.  Internally, each variable
-has a sort, so the sort of each variable in the input must be declared
-in a \texttt{vars} form, such as:
-$$\texttt{(vars (t text) (n name) (k akey))}.$$
-
-\begin{table}
-$$\begin{array}{r@{}c@{}l}
-\sembrack{\texttt{(pubk~}t\texttt{)}}&{}={}&K_{\sembrack{t}}\\
-\sembrack{\texttt{(privk~}t\texttt{)}}&{}={}&K_{\sembrack{t}}^{-1}\\
-\sembrack{\texttt{(invk~}t\texttt{)}}&{}={}&\sembrack{t}^{-1}\\
-\sembrack{\texttt{(ltk~}t_0~t_1\texttt{)}}&{}={}&
-\cn{ltk}(\sembrack{t_0},\sembrack{t_1})\\
-\sembrack{\texttt{"}\ldots\texttt{"}}&{}={}&\mbox{``\ldots''}\\
-\sembrack{\texttt{(enc~}t_0~\ldots~t_{n-1}~t_n\texttt{)}}&{}={}&
-\enc{\sembrack{\texttt{(cat~}t_0~\ldots~t_{n-1}\texttt{)}}}{\sembrack{t_n}}\\
-\sembrack{\texttt{(hash~}t_0~\ldots~t_{n-1}\texttt{)}}&{}={}&
-\hash{\sembrack{\texttt{(cat~}t_0~\ldots~t_{n-1}\texttt{)}}}\\
-\sembrack{\texttt{(cat~}t\texttt{)}}&{}={}&\sembrack{t}\\
-\sembrack{\texttt{(cat~}t_0~t_1~\ldots\texttt{)}}&{}={}&
-(\sembrack{t_0},\sembrack{\texttt{(cat~}t_1~\ldots\texttt{)}})
-
-\end{array}$$
-\caption{S-expression Terms}\label{tab:trans}
-\end{table}
-
-The translation of S-expression terms is given in
-Table~\ref{tab:trans}.  Figure~\ref{fig:ns responder} on
-Page~\pageref{fig:ns responder} contains examples of \textsc{bca}
-message terms.  Also see \textsc{term} in Table~\ref{tab:syntax},
-Appendix~\ref{cha:bca syntax reference}.
-
-The code that implements the Basic Crypto Algebra does not directly
-implement an order-sorted algebra.  Instead, it implements a
-many-sorted algebra and exports an order-sort algebra based on the
-implementation.  Appendix~\ref{cha:bca} provides the complete details
-of the implementation.
-
-\section{Algebra Interface}
-
-The details of each implementation of a {\cpsa} message algebra are
-hidden by an interface.  This section presents the view of a term
-algebra exposed by the interface.  Some aspects of the interface are
-omitted from this discussion.  For example, each implementation of an
-algebra must provide a means to read a term from an S-expression, and
-write a term as an S-expression.  Also omitted are functions in the
-interface that are specializations of a more general function added to
-enhance performance.
-
-Each algebra provides a predicate to determine if a term is a
-variable, and another to determine if a term is an atom.  A fresh
-variable generator is in the interface.  Given a generator state and a
-term, it produces a clone of the term in which the variables have been
-replaced with freshly generated ones.  It also returns the new
-generator state.
-
-\subsection{Equations}\label{sec:equations}
-
-An algebra reports answers to unification and matching problems by
-returning a sequence of order-sorted substitutions.  A
-different data structure is used for each problem, in this document
-indicated by using~$\sigma$ for answers to the unification problem of
-$\sigma(t_0)\equiv\sigma(t_1)$, and using~$\sigma_E$ for answers to the
-matching problem of $\sigma_E(t_0)\equiv t_1$.  As the typical case is for
-sets of equations to be solved, the unification and match functions
-have been designed to allow an incremental approach to solving the
-members of the set, by extending a substitution for one pair of
-equated terms.  They have the following signatures:
-$$\begin{array}{l}
-\fn{unify}\colon
-\mathcal{T}_\top(X)\times\mathcal{T}_\top(X)\times
-(X\rightarrow\mathcal{T}_\top(X))\rightarrow
-(X\rightarrow\mathcal{T}_\top(X))^\ast\\
-\fn{match}\colon
-\mathcal{T}_\top(X)\times\mathcal{T}_\top(Y)\times
-(X\rightarrow\mathcal{T}_\top(Y))\rightarrow
-(X\rightarrow\mathcal{T}_\top(Y))^\ast
-\end{array}$$
-
-An answer to the matching problem is called an
-\index{environment}\emph{environment}.  An environment differs from a
-substitution produced as an answer to a unification problem in that it
-may explicitly specify identity mappings, thus forbidding extensions
-to the environment that conflicts with these mappings.  This
-distinction is crucial for correctly answering matching problems by
-iteratively extending an environment.
-
-To support checks to see if terms are isomorphic via the match
-function, the algebra interface includes the \emph{match variable
-  renaming} predicate that tests an environment to see if it is a
-one-to-one variable-to-variable order sorted substitution.
-
-To support pruning, there is a function that given an environment and
-a term, determines if there are variables in the term that are in the
-domain of the environment.
-
-\subsection{Term Internals}\label{sec:term internals}
-
-The interface includes a function that returns the set of variables in
-a term, and a function that returns the terms carried by a term.
-Other subterms are accessed via position oriented
-functions.  Recall that a position is a finite sequence of natural
-numbers, and the message in~$t$ that occurs at~$p$, is
-written~$t\termat p$.  The interface includes a data type for a
-position that hides its implementation.  The interface also includes
-the ancestors function $\fn{anc}(t,p)$ and the carried positions
-function $\fn{carpos}(t,t')$ as defined in the specification.
-
-Each algebra provides a way to obtain a set of positions at which a
-subterm occurs within a term, and a way to replace the subterm at a
-given position with another term.  These functions are used to
-generalize by variable separation.
-
-\begin{defn}[All Positions]\index{all positions}
-Given a term~$t$, the set of positions at which~$t$ occurs in~$t'$ is
-$\fn{allpos}(t,t')$, where
-$$\fn{allpos}(t,t')=\left\{
-\begin{array}{ll}
-\{\seq{}\}&\mbox{if $t'\equiv t$, else}\\
-\multicolumn{2}{l}{\{\seq{i}\append p \mid
-p\in\fn{allpos}(t,t_i),i<n\}} \\
-& \mbox{if $t'=f(t_0,\ldots,t_{n-1})$, else}\\
-\{\}&\mbox{otherwise.}
-\end{array}\right.$$
-\end{defn}
-
-\begin{defn}[Replace]\index{replace}
-Given terms~$t$ and~$t'$, and position~$p$, the term that results from
-replacing the term at~$p$ with~$t$ in~$t'$, is
-$\fn{replace}(t,p,t')$, where
-$$\begin{array}{l}
-\fn{replace}(t,\seq{},t')=t;\\
-\fn{replace}(t,\seq{i}\append p,f(t_0,\ldots,t_{n-1}))=
-f(t'_0,\ldots,t'_{n-1})\mbox{ where}\\
-t'_j=\left\{
-\begin{array}{ll}
-\fn{replace}(t,p,t_i)&\mbox{if $i=j$;}\\
-t_j&\mbox{otherwise.}
-\end{array}\right.
-\end{array}$$
-\end{defn}
-
-\subsection{Encryptions and Derivations}\label{sec:encryptions}
-
-Finally, the remaining functions in the interface are the ones that
-expose the encryption oriented properties of terms.  The
-\emph{decryption key} function returns the key used to decrypt a term
-if it is an encryption, otherwise it returns an error indicator.  The
-\emph{encryptions} function returns the set of encryption terms
-carried by a term, each one paired with its encryption key.  {\cpsa}
-treats a hashed term as if it were an encryption in which the term
-that is hashed is the encryption key, so hashes with their content is
-also returned by this function.  The penetrator derivable function
-from the section in the specification of the same name is in the
-interface.  Given a derivable predicate that has been specialized with
-a given set of supported terms and a set of atoms to avoid, a target
-term, and a source term, the \emph{protectors} function returns an
-error indicator if the target is carried by the source outside of an
-encryption, where the derivable predicate is used to determine if a
-decryption key can be used to expose the target.  Otherwise, it
-returns a set of encryptions in the source that carry the target and
-have underivable decryption keys.  If two encryptions protect the
-target, only the outside one is returned.  The inside encryption is
-the one that is carried by the outside encryption.  Pseudo code for
-the decryption key and the protectors functions is in the
-specification.
-
-\chapter{Protocols and Preskeletons}\label{cha:prots and preskels}
-
-Terms over an order-sorted signature extended from a message signature
-describe key data structures in the {\cpsa} program.  Given a message
-signature that defines the sort \dom{mesg} and the atoms, the
-additional sorts and operations are in the {\cpsa} Signature in
-Table~\ref{tab:strands}.  The signature uses the sort $s~\dom{list}$
-for sequences of terms of sort~$s$, and the sort $s~\dom{set}$ for
-injective sequences of terms of sort~$s$.
-
-\begin{table}
-\begin{center}
-Additional sort symbols: \dom{atom}, \dom{evt}, \dom{role}, \dom{maplet},\\
-\dom{instance}, \dom{node}, \dom{ordering}, and \dom{preskel} \\[1ex]
-Subsorts: for each base sort $s, s < \dom{atom} < \dom{mesg}$\\[1ex]
-$\begin{array}{rl}
-\outbnd\colon\dom{mesg}\rightarrow\dom{evt}\hspace{2\arraycolsep}
-\inbnd\colon\dom{mesg}\rightarrow\dom{evt}&
-\cn{r}\colon\dom{evt}\dom{list}\times\dom{atom}\dom{set}\times
-\dom{atom}\dom{set}\rightarrow\dom{role}\\
-\cn{m}\colon\dom{mesg}\times\dom{mesg}\rightarrow\dom{maplet}&
-\cn{i}\colon\dom{role}\times\dom{nat}\times\dom{maplet}\dom{set}
-\rightarrow\dom{instance}\\
-\cn{n}\colon\dom{nat}\times\dom{nat}\rightarrow\dom{node}
-&\cn{o}\colon\dom{node}\times\dom{node}\rightarrow\dom{ordering}
-\end{array}$\\
-$\cn{k}\colon\dom{role}\dom{set}\times
-\dom{instance}\dom{list}\times
-\dom{ordering}\dom{set}\times\dom{atom}\dom{set}\times
-\dom{atom}\dom{set}\rightarrow\dom{preskel}$\\[1ex]
-\begin{tabular}{rl}
-\dom{mesg}& the sort of all messages (implementation of $\top$)\\
-\dom{atom}& the sort of all base sorted messages\\
-\dom{evt}& a transmission or reception event\\
-\dom{trace}& a sequence of events used in a role\\
-\dom{role}& a trace, a non-originating set, and a uniquely-originating
-set\\
-\dom{protocol}& a set of roles\\
-\dom{nat}& a natural number\\
-\dom{maplet}& a map from a role variable to a preskeleton term\\
-\dom{instance}& a strand's trace and inheritance as instantiated from a role\\
-\dom{node}& a pair of numbers, a strand identifier and a strand position\\
-\dom{ordering}&a causal ordering between a pair of nodes\\
-\dom{preskel}& a preskeleton
-\end{tabular}
-\end{center}
-\caption{{\cpsa} Signature}\label{tab:strands}
-\end{table}
-
-\begin{defn}[{\cpsa} Algebra]\label{def:cpsa algebra}
-\index{CPSA@{\cpsa} algebra} Algebra~$\alg{A}(X)$ is a \emph{{\cpsa}
-  algebra} if it is the order-sorted quotient term algebra generated
-by variable set~$X$, and~$X$ has the following property.  For each
-sort~$s$, $X_s$ is empty when~$s$ is \dom{atom}, \dom{evt},
-\dom{role}, \dom{maplet}, \dom{instance}, \dom{node}, \dom{ordering},
-and \dom{preskel}.
-\end{defn}
-
-Some of the terms over a {\cpsa} signature are not
-\index{well-formed}well-formed, and omitted from interpretation.  The
-text describing a term of a sort includes the conditions for it being
-well-formed.
-
-In what follows, the external syntax for protocols is presented, and
-later, its translation into terms over a {\cpsa} signature.  For
-preskeletons, the internal representation is presented first, followed
-by its external syntax.
-
-\section{Protocols}
-
-A protocol defines the patterns of allowed behavior for
-non-adversarial participants, called the \index{regular
-  participant}\emph{regular} participants.  The behavior of each
-regular participant is an instance of a protocol template, called a
-role.  Figure~\ref{fig:ns roles} displays the roles that make up the
-Needham-Schroeder protocol.
-
-\begin{figure}
-\begin{center}
-\includegraphics{cpsadiagrams-0.mps}\hfil
-\includegraphics{cpsadiagrams-1.mps}
-\caption{Needham-Schroeder Initiator and Responder Roles}
-\label{fig:ns roles}
-\end{center}
-\end{figure}
-
-In S-expression syntax, a protocol is a named set of roles and is
-defined by the \texttt{defprotocol} form.  See \textsc{protocol} in
-Table~\ref{tab:syntax}, Appendix~\ref{cha:bca syntax reference}.
-\begin{center}
-\begin{tabular}{l}
-\verb|(defprotocol ns basic|\\
-\verb|  (defrole init| \ldots\texttt{)}\\
-\verb|  (defrole resp| \ldots\texttt{))}
-\end{tabular}
-\end{center}
-
-The name of this protocol (\textsc{id}) is \texttt{ns}, and the second
-identifier (\textsc{alg}) names the message algebra in use.  The
-identifier for the Basic Crypto Algebra is \texttt{basic}.
-
-During the reading process, the appropriate algebra is implicitly
-bound to the internal representation of a protocol and many data
-structures derived from it.  The protocol name is used at read time to
-bind it with its usages, and for output and error messages, but is
-otherwise unused and thus omitted from the design specification. The
-internal representation of a \index{protocol}protocol is simply a set
-of roles---as a term of sort \dom{role~set} in Table~\ref{tab:strands}.
-
-The S-expression syntax for a role has a name, a declared set of
-variables, and a trace that provides a template for the behavior of
-its instances.  A trace is a non-empty sequence of
-events\index{event}, either a message transmission or a reception.  An
-outbound\index{outbound} term is \texttt{(send $t$)} and an
-inbound\index{inbound} message with term~$t$ is \texttt{(recv $t$)}.
-The translations of events are $\outbnd\sembrack{t}$ and
-$\inbnd\sembrack{t}$ respectively, where~$\sembrack{t}$ is the
-translation of the S-expression~$t$ into an term of sort~\dom{mesg} in
-Table~\ref{tab:strands}.  Needham-Schroeder responder's role in
-S-expression syntax is in Figure~\ref{fig:ns responder}.
-
-\begin{figure}
-\begin{quote}
-\begin{verbatim}
-(defrole resp (vars (b a name) (n2 n1 text))
-  (trace (recv (enc n1 a (pubk b)))
-         (send (enc n1 n2 (pubk a)))
-         (recv (enc n2 (pubk b)))))
-\end{verbatim}
-\end{quote}
-\caption{Needham-Schroeder Responder Role}
-\label{fig:ns responder}
-\end{figure}
-
-Some atoms in a role have special properties.  The atoms
-listed in the \texttt{non-orig} form are assumed to be
-non-originating, and those in the \texttt{uniq-orig} form are assumed
-to be uniquely originating.  The implications of these assumption is
-as in the specification.
-
-Internally, \index{role}role~$\cn{r}(C,N,U)$ has a trace~$C$, and two
-sets of atoms,~$N$ and~$U$.  The atoms in~$N$ are assumed to be
-non-originating, and the atoms in~$U$ are assumed to be uniquely
-originating.  As with protocols, the name is used during input and
-output, but omitted from this specification.
-
-A role is \index{well-formed role}well-formed if it satisfies the
-conditions listed for a role in the specification.  A protocol is
-well-formed if no variable occurs in more than one role.  The external
-syntax used by {\cpsa} uses variable renaming to create the illusion
-that the same variable may occur in two roles.  In the external
-syntax, two roles may share the same identifier.
-
-Associated with each protocol is an implicit role.  For some
-variable~$x$ of sort \dom{mesg}, that does not occur in any role in
-the protocol, there is a \label{def:listener
-  role}\index{listener role}\index{role!listener}\emph{listener role}
-of the form~$\fn{lsn} = \cn{r}(\seq{\inbnd x,\outbnd x}, \seq{},
-\seq{})$.  A listener role is used to assert that a term is not a
-secret.  In the implementation, the only difference between a listener
-role and non-listener roles is its name is the empty string, a fact
-used when printing.
-
-\section{Preskeletons}
-
-The other key {\cpsa} data structure is a preskeleton---see the~\cn{k}
-operation in Table~\ref{tab:strands}.  A preskeleton is used to encode
-classes of protocol executions, including its shapes, the answers
-produced by {\cpsa}.  One component of a preskeleton is its protocol,
-and one component is a set of strands.  There are more components, but
-the set's representation is presented next.
-
-As in the specification, a sequence of instances represents a set of
-strands.  The instance\index{instance} $\cn{i}(r,h,E)$ contains a
-role~$r$, a positive number~$h$ called its height, the length of the
-trace associated with the instance, and an
-environment\index{environment}~$E$, a term of sort \dom{maplet}
-\dom{set}.
-
-The environment~$E$ is well-formed if it represents the order-sorted
-substitution~$\sigma_E$ such that for every maplet $\cn{m}(x,y)$,
-$\sigma_E x=y$.  Note that~$x$ is always a variable, unlike its analog
-in the external syntax.  An instance is well-formed if its role is
-well-formed, its environment is well-formed, and its height is not
-greater that the length of its role's trace.
-
-The set of strands in a preskeleton is represented by a sequence of
-instances.  The identity of a strand\index{strand} is its position in
-the sequence, which is where the description of its trace is located.
-The \index{node}node $\cn{n}(s,p)$ is associated with the event
-at position~$p$ in strand~$s$'s trace.  In other words, if~$I$ is
-a sequence of instances, the event at $\cn{n}(s,p)$,
-\label{def:evt}written~$\fn{evt}(I,\cn{n}(s,p))$, is $\sigma_E(C(p))$, where
-$I(s)=\cn{i}(\cn{r}(C,N,U),h,E)$ and~$p<h\leq|C|$.  A node
-associated with an inbound term is a \index{reception
-  node}\emph{reception node}, and a node associated with an outbound
-term is a \index{transmission node}\emph{transmission node}.  The term
-stripped of its direction is written~$\fn{msg}(I,\cn{n}(s,p))$.  The
-set of nodes in sequence~$I$ is $\{\cn{n}(s,p) \mid s<|I|,
-I(s)=\cn{i}(r,h,E), p < h\}$.
-
-The preskeleton\index{preskeleton}~$\cn{k}(P,I,O,N,U)$ contains a
-protocol~$P$, a non-empty sequence of instances~$I$, a set of
-communication orderings~$O$, a set of non-originating
-terms\index{non-originating term}~$N$, and a set of uniquely
-originating terms~$U$.  The node
-ordering\index{ordering}\index{communication ordering} $o(n_0, n_1)$
-asserts that~$n_0$ precedes~$n_1$, that the event at~$n_0$ is
-outbound, the event at~$n_1$ is inbound, and~$n_0$ and~$n_1$
-are on different strands.  The atoms in~$N$ are assumed to be
-non-originating, and the atoms in~$U$ are assumed to be uniquely
-originating.
-
-Members of the set of communication orderings~$O$ relate nodes in
-differing strands.  There is an implied ordering of nodes within the
-same strand.  Strand succession orderings of the form
-$\cn{o}(\cn{n}(s, p-1), \cn{n}(s, p))$, where $0 < p < h$ and~$h$ is
-the height of strand~$s$ are implicit, and must not be in~$O$.
-\index{strand succession orderings}
-
-\index{graph!preskeleton}\index{preskeleton graph}
-Associated with each preskeleton~$k$ is a graph.  The vertices of the
-graph are the nodes of the instance sequence~$I$, and the edges are
-the reverse of the both communication ordering~$O$ and the implied
-strand succession orderings.  The edges are reversed because events in
-a node's past are of interest when analyzing a node.  When the graph
-is acyclic, the transitive irreflexive relation~$\kprec{k}$ of~$k$ is the
-transitive closure of the graph, and $n_0\kprec{k} n_1$ asserts that the
-message event at~$n_0$ precedes the one at~$n_1$.  (A preskeleton with
-a graph that contains cycles is not well-formed.)
-
-To be well-formed\index{well-formed preskeleton}, in addition to the
-requirements on communication orderings listed above, a preskeleton
-must satisfy the same conditions listed for a preskeleton in the
-specification.
-
-\begin{figure}
-\begin{center}
-\includegraphics{cpsadiagrams-4.mps}
-\caption{Needham-Schroeder Shape ($K^{-1}_A$ uncompromised, $N_2$ fresh)}
-\label{fig:ns shape}
-\end{center}
-\end{figure}
-
-\begin{figure}
-\begin{center}
-With $A,A',A'',B,B',B'',C\colon
-\dom{name},N_1,N_1',N_1'',N_2,N_2',N_2''\colon\dom{text}$:
-\end{center}
-$$
-\begin{array}{r@{}c@{}l}
-\fn{resp}&{}={}&\cn{r}(\fn{resp}_t, \seq{},\seq{})
-\mbox{ where}\\
-\fn{resp}_t&{}={}&\seq{
-\inbnd\enc{N_1,A}{K_B},
-\outbnd\enc{N_1,N_2}{K_A},
-\inbnd\enc{N_2}{K_B}}
-\end{array}
-$$
-
-$$
-\begin{array}{r@{}c@{}l}
-\fn{init}&{}={}&\cn{r}(\fn{init}_t, \seq{},\seq{})
-\mbox{ where}\\
-\fn{init}_t&{}={}&\seq{
-\outbnd\enc{N_1',A'}{K_{B'}},
-\inbnd\enc{N_1',N_2'}{K_{A'}},
-\outbnd\enc{N_2'}{K_{B'}}}
-\end{array}
-$$
-
-$$\begin{array}{r@{}c@{}l}
-\multicolumn{3}{l}{\cn{k}(\seq{\fn{resp},\fn{init}},
-I, O,\seq{K_{A''}^{-1}},\seq{N_2''})\mbox{ where}}\\
-I&{}={}&\langle\cn{i}(\fn{resp}, 3, E),
-\cn{i}(\fn{init}, 3, E')\rangle\\
-E&{}={}&\seq{\cn{m}(A,A''),\cn{m}(B,B''),
-\cn{m}(N_1,N_1''), \cn{m}(N_2,N_2'')}\\
-E'&{}={}&\seq{\cn{m}(A',A''),\cn{m}(B',C),
-\cn{m}(N_1',N_1''), \cn{m}(N_2',N_2'')}\\
-O&{}={}&\seq{\cn{o}(\cn{n}(0,1),\cn{n}(1,1)),
-\cn{o}(\cn{n}(1,2),\cn{n}(0,2))}
-\end{array}$$
-\caption{Needham-Schroeder Preskeleton}\label{fig:ns}
-\end{figure}
-
-A Needham-Schroeder shape in traditional Strand Space notation is in
-Figure~\ref{fig:ns shape}, and its representation using order-sorted
-terms is given in Figure~\ref{fig:ns}.
-
-\subsection{Preskeleton S-Expression Syntax}
-
-The \texttt{defskeleton} form in Table~\ref{tab:syntax},
-Appendix~\ref{cha:bca syntax reference} is used to specify a
-preskeleton in S-expression syntax.  (With the exception of the
-initial problem statement, a preskeleton is always a skeleton.)
-On output, a preskeleton Referring to
-Table~\ref{tab:syntax}, the \textsc{id} in the preskeleton form names
-a protocol.  It refers to the most recent protocol definition of that
-name which precedes the preskeleton form in the input.  The
-\textsc{id} in the \texttt{defstrand} form names a role.  The integer
-in the strand form gives the height of the strand.  The sequence of
-pairs of terms in the strand form specify an environment used to
-construct the events in a strand from its role's trace.  The
-first term is interpreted using the role's variables and the second
-term uses the preskeleton's variables.  The environment used to
-produce the strand's trace is derived by matching the second term
-using the first term as a pattern.  The \texttt{deflistener} form
-creates an instance of a listener role for the given term.
-
-The \texttt{precedes} form specifies members of the node relation.
-The first integer in a node identifies the strand using the order in
-which strands are defined in the \texttt{defskeleton} form.
-
-\begin{figure}
-\begin{quote}
-\begin{verbatim}
-(defskeleton ns (vars (n2 n1 text) (a b b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig n2))
-\end{verbatim}
-\end{quote}
-\caption{Needham-Schroeder \texttt{defskeleton}}\label{fig:defns}
-\end{figure}
-
-A variable may occur in more then one role within a protocol.  The
-reader performs a renaming so as to ensure these occurrences do not
-overlap.  Furthermore, the maplets used to specify a strand need not
-specify how to map every role variable.  The reader inserts missing
-mappings, and renames every preskeleton variable that also occurs in a
-role of its protocol.  The sort of every preskeleton variable that
-occurs in the \texttt{non-orig} or \texttt{uniq-orig} list or in a
-maplet must be declared, using the \texttt{vars} form.
-
-Needham-Schroeder shape in S-expression syntax is displayed in
-Figure~\ref{fig:defns}.  The effect of reader renaming is shown in
-Figure~\ref{fig:ns} by adding primes to variables.
-
-The \textsc{prot-alist}, \textsc{role-alist}, and \textsc{skel-alist}
-productions in Table~\ref{tab:syntax} are Lisp style association lists,
-that is, lists of key-value pairs, where every key is a symbol.
-Key-value pairs with unrecognized keys are ignored, and are available
-for use by other tools.  On output, unrecognized key-value pairs are
-preserved when printing protocols, but elided when printing
-preskeletons.
-
-See the {\cpsa} Primer for more examples of {\cpsa} external syntax.
-
-\section{Source Code}\label{sec:source code}
-
-Protocols, roles, and preskeletons have additional fields not
-documented here.  For example, each role and preskeleton keeps track
-of the variable set used to generate its message algebra, and the
-variable generator used to create fresh variables.  There is a name
-associated with each protocol and role.  Preskeletons have addition
-fields associated with generalization, as discussed in
-Section~\ref{sec:generalization}.
-
-\section{Specification}\label{sec:specification}
-
-There is a direct relationship between the protocols and roles in this
-specification, and protocols and roles as members of a {\cpsa} algebra
-(Definition~\ref{def:cpsa algebra}).  The relationship between
-preskeletons in the two documents requires explanation.  There are two
-significant differences.
-
-In this document and in the code, a strand is represented by the
-instance $\cn{i}(r,h,E)$, but in the specification, a strand is
-represented by a trace and a role.  These two representations are
-mathematically equivalent, as the trace of a strand can be computed
-from $r$,~$h$, and~$E$.  The code adds the trace to the fields of an
-instance.
-
-The second significant difference is that the precedes relation is
-represented by a list of ordered pairs in this document, but in the
-specification, the precedes relation is always irreflexive and
-transitive.  In the code, the transitive reduction is performed on the
-precedes relation, and the output always contains the fewest number of
-ordered pairs possible without changing the transitive closure of the
-precedes relation.
-
-\chapter{Reductions}\label{cha:reductions}
-
-This chapter describes the implementation-oriented refinements made to
-support reduction that are considered too detailed to be included in
-the specification.
-
-In the {\cpsa} implementation and the design formalism, every
-preskeleton includes a link to its protocol.  Two preskeletons are not
-related by a homomorphism unless they specify the same protocol.
-
-For each preskeleton~$k$, the implementation maintains an
-\index{origination map} \emph{origination map}, $\orig(k,t)$.  It maps
-each of the preskeleton's uniquely originating terms to the set of
-nodes at which it originates.  For hulled preskeletons, the range of
-this map must contain singleton sets or the empty set.  The
-origination map returns an error indicator when given a term not assumed
-to be uniquely originating, a feature used to check the
-implementation's consistency.
-
-Each preskeleton contains the state of a variable generator.  It's
-used to ensure a source of fresh variables for any preskeleton derived
-from it.
-
-\section{Preskeleton Reductions}\label{sec:preskeleton reductions}
-
-Given a well-formed preskeleton, an attempt is made to convert it into
-a set of skeletons.  This section describes a few implementation
-details omitted from the specification.
-
-The implementation uses sequences to represent some sets.  The
-function \index{nub}\fn{nub} removes duplicates from a sequence.
-
-\subsection{Substitution}
-
-The function~$\ops{S}_\sigma$ applies the order-sorted substitution~$\sigma$
-to a preskeleton.
-$$
-\begin{array}{r@{}c@{}l}
-\ops{S}_\sigma(\cn{k}(P, I, O, N, U))&{}={}&
-\cn{k}(P, \ops{S}_\sigma\circ I, O, \fn{nub}(\sigma\circ N),
-\fn{nub}(\sigma\circ U))\\
-\ops{S}_\sigma(\cn{i}(r,h,E))&{}={}&\cn{i}(r, h, \ops{S}_\sigma\circ E)\\
-\ops{S}_\sigma(\cn{m}(x,y))&{}={}&\cn{m}(x,\sigma(y))
-\end{array}
-$$
-
-The substitution specifies a homomorphism as long as it preserves the
-nodes at which each uniquely originating term originates.  In other
-words, its a homomorphism only if for each uniquely originating
-term~$t$ in~$k$, $\orig(k,t)\subseteq\orig(k', \sigma(t))$, where
-$k'=\ops{S}_\sigma(k)$.  The implicit homomorphism is
-$(\idphi,\sigma)$, where~$\idphi$ is the identity strand map for~$k$.
-
-\subsection{Compression}
-
-The function~$\ops{C}_{s,s'}$ compresses~$s$ into~$s'$ in a preskeleton.
-$$
-\begin{array}{r@{}c@{}l}
-\ops{C}_{s,s'}(\cn{k}(P, I, O, N, U))&{}={}&
-\cn{k}(P, I\circ\phi'_s, \ops{C}_{\phi}\circ O, N, U)\\
-\ops{C}_\phi(\cn{o}(n_0, n_1))&{}={}
-&\cn{o}(\ops{C}_\phi(n_0), \ops{C}_\phi(n_1))\\
-\ops{C}_\phi(\cn{n}(s, p))&{}={}&\cn{n}(\phi(s), p)\\
-\phi(j)=\phi_{s,s'}(j)&{}={}&\left\{
-\begin{array}{ll}
-\phi_s(s')&\mbox{if $j=s$}\\
-\phi_s(j)&\mbox{otherwise}
-\end{array}\right.\\
-\phi_s(j)&{}={}&\left\{
-\begin{array}{ll}
-j-1&\mbox{if $j>s$}\\
-j&\mbox{otherwise}
-\end{array}\right.\\
-\phi'_s(j)&{}={}&\left\{
-\begin{array}{ll}
-j+1&\mbox{if $j\geq s$}\\
-j&\mbox{otherwise}
-\end{array}\right.
-\end{array}
-$$ where the trace of~$I(s)$ is a prefix of the trace of~$I(s')$.
-Although not shown, orderings of the form
-$\cn{o}(\cn{n}(s,p),\cn{n}(s,p'))$ are removed from the ordering when
-$p<p'$, so they do not cause the output preskeleton to fail to be
-well-formed.  The implicit homomorphism is
-$(\phi_{s,s'},\idsigma)$, where~$\idsigma$ is the identity
-substitution.  Note that $\phi_{s,s'}\circ\phi'_s=\idsigma$.
-
-\subsection{Order Enrichment}
-
-The function~$\ops{O}$ performs order enrichment by adding a node
-orderings between the node at which a uniquely originating atom
-originates and the nodes at which it is gained.  A message is
-\emph{gained}\index{gained} by a trace if it is carried by some event
-and the first event in which it is carried is inbound.  Let $\gain(k,
-t)$ be the set of nodes in~$k$ at which~$t$ is gained.
-$$ \ops{O}(\cn{k}(P, I, O, N, U))=
-\cn{k}(P, I, \fn{nub}(O\append O'), N, U)$$
-where $O'=\{\cn{o}(n_0,n_1)\mid t\in U, n_0\in\orig(k,t),
-n_1\in\gain(k,t)\}$.  Order Enrichment specifies a homomorphism that
-is an embedding.
-
-\subsection{Transitive Reduction}
-
-The function~$\ops{R}$ performs a transitive reduction on a preskeleton's
-node relation.  The transitive reduction\index{transitive reduction}
-of an ordering is the minimal ordering such that both orderings have
-the same transitive closure.  Here, communication orderings implied by
-transitive closure are removed.
-
-The transitive reduction of a skeleton is isomorphic to the skeleton.
-The reduction is performed to speed up the code that checks for
-isomorphisms.  When two skeletons are transitively reduced, and
-isomorphic, they have the same number of communication orderings.
-
-In the implementation, transitive reduction is the last operation
-applied to a preskeleton during the process of converting a
-preskeleton into a pruned skeleton.  Isomorphism testing is only
-performed on pruned skeletons.
-
-\section{Augmentation}
-
-The function~$\ops{A}_{i,n}$ augments a preskeleton with a new strand.
-It appends the instance~$i$ to the sequence of instances, adds a node
-ordering, and adds atoms as specified by the role.  The function
-orders the last node in the strand before some node in the
-preskeleton.
-
-$$
-\begin{array}{r@{}c@{}l}
-\ops{A}_{i,n}(\cn{k}(P, I, O, N, U))&{}={}&
-\cn{k}(P, I\append\langle i\rangle,
-\langle \cn{o}(\cn{n}(|I|,h-1),n)
-\rangle \append O,N_1, U_1)\\
-i&{}={}&\cn{i}(\cn{r}(C,N_0,U_0),h,E)\\
-N_1&{}={}&\fn{nub}(N\append\sigma_e\circ N_0)\\
-U_1&{}={}&\fn{nub}(U\append\sigma_e\circ U_0)
-\end{array}
-$$ Although not shown, elements in~$N_1$ that contain a variable that
-does not occur in some event in the constructed preskeleton
-are dropped, as are elements in~$U_1$ that are not carried in some
-event in the constructed preskeleton.  As with the preskeleton
-reductions in Section~\ref{sec:preskeleton reductions}, it is
-straightforward to derive the homomorphism associated with a
-successful augmentation.
-
-\section{Generalization}\label{sec:generalization}
-
-The generalization process is the only part of the algorithm that
-requires non-isomorphic homomorphisms to be explicitly represented.
-To make this possible, every preskeleton contains two additional
-fields not yet described, a link to the point-of-view skeleton, and a
-{\pov} strand map.  The {\pov} strand map is the second component of
-the homomorphism from the point-of-view skeleton to the preskeleton.
-The first component can be generated via matching using the
-point-of-view skeleton.
-
-The {\pov} strand map is maintained by every reduction applied to a
-preskeleton.  The compression reduction is the only one that
-requires careful thought.
-
-\chapter{Search Strategy}\label{cha:search}
-
-The top-level loop maintains two sequences of skeletons, a to do list,
-and a set of skeletons that have already been seen.  When the to do
-list is empty, the loop exits.
-
-For each problem statement, {\cpsa} attempts the convert the
-preskeleton into a skeleton.  If the conversion fails, an error is
-signaled.  Otherwise, a search is started with the skeleton as the
-{\pov} skeleton of Section~\ref{sec:generalization}.  The top-level loop
-starts with the {\pov} skeleton as the single member of the to do
-list and the seen set.
-
-The following steps constitute one iteration of the top-level loop.
-The first skeleton on the to do list is removed and is the subject of
-the iteration.  If the skeleton is unrealized, contraction and
-augmentation are used to compute its cohort.  Otherwise, generalization
-reductions are tried in an effort to make one generalization step.
-The generated skeletons are the subject's children.  Each child that
-is isomorphic to a member of the seen set is dropped.  The other
-children are added to the seen set and to the end of the to do list.
-The final step in the iteration is to print the subject skeleton.
-
-When the subject in unrealized, the test node is selected as follows.
-The strands are considered in reverse order, and the first unrealized
-node in one of the strands is used as the test node.  By default, the
-program tries encryptions for critical messages before it tries atoms.
-The encryptions considered as critical messages are obtained using the
-\emph{encryptions} function in the algebra interface.
-
-\enlargethispage{\baselineskip}
-The search order can be modified by using command-line arguments or
-the \texttt{herald} form.  The option \texttt{--check-nonces} cause
-{\cpsa} to try atoms before encryptions.  Option
-\texttt{--try-old-strands} tries the strands in order.  Option
-\texttt{--reverse-nodes} tries nodes later in the strand first.
-
-\chapter{Haskell Modules}\label{cha:haskell modules}
-
-An overview of the modules that make up a \texttt{cpsa} program
-follows.
-
-\begin{description}
-\item[CPSA.Lib.Utilities:]
-Contains generic list functions and a function that determines if a
-graph has a cycle.
-\item[CPSA.Lib.SExpr:]
-A data structure for S-expressions, the ones that are called
-proper lists.
-\item[CPSA.Lib.Pretty:]
-A simple pretty printer.
-\item[CPSA.Lib.Printer:]
-A CPSA specific pretty printer using S-expressions.
-\item[CPSA.Lib.Notation:]
-A CPSA specific pretty printer using infix notation.
-\item[CPSA.Lib.Algebra:]
-Defines the interface to CPSA algebras.
-\item[CPSA.Lib.CPSA:] Exports the types and functions used to
-  construct an implementation of an algebra.
-\item[CPSA.Basic.Algebra:]
-Basic Crypto Algebra implementation.
-\item[CPSA.Lib.Entry:]
-Provides a common entry point for programs based on the CPSA library.
-\item[CPSA.Lib.Protocol:]
-Protocol data structures.
-\item[CPSA.Lib.Goal:]
-Security goal data structures.
-\item[CPSA.Lib.Strand:]
-Instance and preskeleton data structures and support functions.
-\item[CPSA.Lib.Characteristic:]
-Produces the characteristic skeleton of the antecedent of a goal.
-\item[CPSA.Lib.Cohort:]
-Computes the cohort associated with a skeleton or its generalization.
-\item[CPSA.Lib.Reduction:]
-Term reduction for the CPSA solver.
-\item[CPSA.Lib.Expand:]
-Expands macros using definitions in the input.
-\item[CPSA.Lib.Loader:]
-Loads protocols, preskeletons, and goals from S-expressions.
-\item[CPSA.Lib.Displayer:]
-Displays protocols and preskeletons as S-expressions.
-\end{description}
-
-\chapter{Visualization}\label{cha:viz}
-
-This section describes the Causally Intuitive Preskeleton Layout
-algorithm used to generate visualizations of preskeletons.  The
-algorithm is simple to implement and explain, and because it is
-designed for preskeletons, it produces better results than is
-available from generic graph layout algorithms, such as the ones used
-by Graphviz~\cite{GansnerNorth00}.
-
-The preskeleton is prepared by performing a transitive reduction on
-its ordering relation.  Communication edges implied by transitive
-closure are removed.  The result is called a Hasse diagram.
-
-The Hasse diagram is created by considering each communication edge.
-If there is a path from its source to its destination that does not
-traverse the edge, the edge is deleted.
-
-To simplify the task, each strand is laid out vertically with early
-nodes above later ones.  The strands are horizontally placed in the
-same order as they appear in the preskeleton.  The spacing between
-successive nodes on a strand is the same, as is the horizontal spacing
-between strands.  The vertical position of a node is called its rank.
-
-Within this framework, the simplest layout algorithm is to use the
-position of the node in its strand as its rank.  When using this
-layout strategy, the only difficultly occurs when a node ordering
-arrow crosses over a node in an unrelated strand.  To avoid ambiguity,
-arrows that cross strands are curved.
-
-When using position based ranking, the result often contains upward
-sloping arrows.  Within a strand, no node that is after a node is
-above the node, but with upward sloping arrows, this property no
-longer holds.  The motivation for the Causally Intuitive Preskeleton
-Layout algorithm is that eliminating upward sloping arrows makes
-causal relations easier to grasp.
-
-The layout algorithm has two phases.  The first phase stretches
-strands so as to eliminate upwardly sloping arrows, and the second
-phase compresses them so as to eliminate some unnecessary stretching.
-Without phase two, some nodes early in a strand appear to be oddly
-separated from others in the strand.
-
-Each phase starts with a to do list containing every node in the
-preskeleton.  For each node in the to do list, if conditions are met,
-it updates the current node ranking and adds nodes to the to do list.
-The phase is finished when the to do list is empty.
-
-Phase I starts with the position based ranking~$r(s,p)=p$.  Let~$P(n)$
-be the set the predecessors of node~$n$, excluding the nodes on the
-strand of~$n$.  Let~$P_r(n)=\{r(n')\mid n'\in P(n)\}$ be the ranks
-of~$P(n)$.  The stretch rule is considered for each element in the
-to do list.
-
-The stretch rule applies to node~$n_1$ if $r(n_1)<h$, where
-$h=\max(\{r(n_1)\}\cup P_r(n_1))$.  In that case, the ranking is updated
-so that $r(n_1)=h$, and the linearize rule is applied to the next strand
-node if it exists.
-
-The linearize rule applies to node~$n_1$ if $r(n_1)\leq r(n_0)$,
-where~$n_0$ is the previous strand node.  In that case, the ranking is
-updated so that $r(n_1)=r(n_0)+1$, the to do list is augmented with
-elements in~$S(n_1)$, and the linearize rule is applied to the next
-strand node if it exists, where~$S(n)$ is the set the successors of
-node~$n$, excluding the nodes on the strand of~$n$.
-
-In phase II, the compress rule is considered for each element in the
-to do list.  It applies to node~$n_1$ with a next strand node of~$n_2$
-if $r(n_1)<h$, where $h=\min(\{r(n_2)-1)\}\cup S_r(n_1))$ and~$S_r(n)$
-is the ranks of~$S(n)$.  In that case, the ranking is updated so that
-$r(n_1)=h$, and the to do list is augmented with elements in~$P(n_1)$
-and the previous strand node of~$n_1$ if it exists.
-
-\chapter*{Acknowledgement}
-
-Carolyn Talcott provided valuable feedback on drafts of this document.
-
-\appendix
-
-\chapter{Basic Crypto Algebra Syntax Reference}\label{cha:bca syntax reference}
-
-\input{bcasyntax}
-
-\chapter{The Basic Crypto Many-Sorted Algebra}\label{cha:bca}
-
-The implementation uses a many-sorted algebra.  The many-sorted
-message algebra described here is a reduction of the order-sorted
-message algebra in Table~\ref{tab:bca} using the method described
-in~\cite[Section~4]{GoguenMeseguer92}.  The order-sorted message
-signature is reproduced in Table~\ref{tab:order-sorted} in a form that
-uses prefix notation for every term formed using an operation.  In the
-related many-sorted signature in Table~\ref{tab:many-sorted}, the
-inclusion function\index{inclusion function} symbols are \cn{text},
-\cn{data}, \cn{name}, \cn{skey}, and \cn{akey}.  Section~4 of the
-paper describes the sense in which algebras that model the many-sorted
-signature are essentially the same as the ones that model the
-order-sorted message signature.
-
-\begin{table}
-\begin{center}
-Base sort symbols: \dom{name}, \dom{text}, \dom{data}, \dom{skey},
-\dom{akey}\\
-Non-base sort symbol: \dom{mesg} \\[1ex]
-Subsorts: \dom{name}, \dom{text}, \dom{data}, \dom{akey},
-$\dom{skey}<\dom{mesg}$\\[1ex]
-$\cn{pubk}\colon\dom{name}\rightarrow\dom{akey}\quad
-\cn{invk}\colon\dom{akey}\rightarrow\dom{akey}\quad
-\cn{ltk}\colon\dom{name}\times\dom{name}\rightarrow\dom{skey}$\\
-$\cn{enc}\colon\dom{mesg}
-\times\dom{mesg}\rightarrow\dom{mesg}\quad
-\cn{hash}\colon\dom{mesg}\rightarrow\dom{mesg}$\\
-$\cn{cat}\colon\dom{mesg}
-\times\dom{mesg}\rightarrow\dom{mesg}\quad C_i\colon\dom{mesg}$\\[1ex]
-Axiom: $\cn{invk}(\cn{invk}(x))\approx x$ for $x\colon\dom{akey}$\\
-\caption{Basic Crypto Order-Sorted Signature}\label{tab:order-sorted}
-\end{center}
-\end{table}
-
-Terms are constructed from a set $I$ of identifiers\index{identifiers}
-and a set of functions symbols.  The symbols of arity one are
-\cn{text}, \cn{data}, \cn{name}, \cn{skey}, \cn{akey}, \cn{pubk},
-\cn{invk}, and \cn{hash}.  The symbols of arity two are \cn{ltk},
-\cn{cat}, and \cn{enc}.  The signature is given in
-Table~\ref{tab:many-sorted}.  Grammar rules define the terms used by
-this algebra.
-
-\begin{table}
-\begin{center}
-Sort symbols: \dom{name}, \dom{text}, \dom{data},
-\dom{skey}, \dom{akey}, and \dom{mesg}\\[1ex]
-$\cn{pubk}\colon\dom{name}\rightarrow\dom{akey}\quad
-\cn{invk}\colon\dom{akey}\rightarrow\dom{akey}\quad
-\cn{ltk}\colon\dom{name}\times\dom{name}\rightarrow\dom{skey}$\\
-$\cn{enc}\colon\dom{mesg}
-\times\dom{mesg}\rightarrow\dom{mesg}\quad
-\cn{hash}\colon\dom{mesg}
-\rightarrow\dom{mesg}$\\
-$\cn{cat}\colon\dom{mesg}
-\times\dom{mesg}\rightarrow\dom{mesg}\quad C_i\colon\dom{mesg}$\\
-$\cn{name}\colon\dom{name}\rightarrow\dom{mesg}\quad
-\cn{text}\colon\dom{text}\rightarrow\dom{mesg}\quad
-\cn{data}\colon\dom{data}\rightarrow\dom{mesg}$\\
-$\cn{skey}\colon\dom{skey}\rightarrow\dom{mesg}\quad
-\cn{akey}\colon\dom{skey}\rightarrow\dom{mesg}$\\[1ex]
-Axiom: $\cn{invk}(\cn{invk}(x))\approx x$ for $x\colon\dom{akey}$\\
-\caption{Basic Crypto Many-Sorted Signature}\label{tab:many-sorted}
-\end{center}
-\end{table}
-
-The set of asymmetric keys $K$ is defined as follows.
-$$ K \leftarrow I \mid \cn{pubk}(I) \mid \cn{invk}(I) \mid
-\cn{invk}(\cn{pubk}(I)) $$ The key $\cn{invk}(x)$ is the inverse of
-the asymmetric key~$x$, and $\cn{pubk}(x)$ is principal $x$'s public
-key.
-
-Each occurrence of an identifier in a term is associated with a sort
-symbol.  The context in which an identifier occurs determines the
-sort.  The sort symbols are \dom{text}, \dom{data}, \dom{name},
-\dom{akey}, \dom{skey}, and \dom{mesg}, where a name refers to a
-principal.  An identifier occurrence in an asymmetric key of the form
-$\cn{pubk}(x)$ has sort \dom{name}, otherwise it has sort \dom{akey}.
-
-The set of atoms $B$ is defined as follows.
-$$ B \leftarrow \cn{text}(I) \mid \cn{data}(I) \mid \cn{name}(I) \mid
-\cn{skey}(I)\mid \cn{skey}(\cn{ltk}(I, I)) \mid \cn{akey}(K) $$ The
-atom $\cn{skey}(\cn{ltk}(x, y))$ is a symmetric, long term key
-shared between two principals~$x$, and~$y$.  The occurrence of $x$ in
-$\cn{text}(x)$ has sort \dom{text}, sort \dom{data} for
-$\cn{data}(x)$, sort \dom{name} for $\cn{name}(x)$, and sort
-\dom{skey} for $\cn{skey}(x)$.  The occurrences of $x$ and $y$ in
-$\cn{skey}(\cn{ltk}(x,y))$ both have sort \dom{name}.
-
-The set of terms $T$ is defined as follows.
-$$ T \leftarrow I \mid B \mid Q \mid \cn{cat}(T, T) \mid \cn{enc}(T,
-T) \mid \cn{hash}(T)$$ where $Q$ is the set of tags, represented by
-quoted string literals.  The second argument in \cn{enc} is a term for
-a key.  A term of the form $x$ is called an indeterminate, and the
-identifier occurrence has sort~\dom{mesg}.
-
-The terms of interest are \index{well-formed term}well-formed.  A term
-is \emph{well-formed} if every occurrence of each identifier has the
-same sort.  An example of a non-well-formed term is
-$\cn{cat}(x,\cn{akey}(x))$ because the identifier $x$ occurs with two
-sorts, \dom{mesg} and \dom{akey}.  A pair of well-formed terms are
-\emph{compatible}\index{compatible terms} if every identifier that
-occurs in both terms occurs with the same sort.
-
-A term is a variable if it specifies an identifier and its sort.
-$$ V \leftarrow I \mid \cn{text}(I)  \mid \cn{data}(I) \mid \cn{name}(I) \mid
-\cn{skey}(I)\mid \cn{akey}(I) $$ When a term is well-formed, the same
-variable is associated every occurrence of an identifier in a term.
-
-\begin{figure}
-$$
-\begin{array}{l}
-\cn{unify}(\ell, t, t') = \cn{unify\_aux}(\ell,\cn{chase}(\ell, t),
-\cn{chase}(\ell, t'))
-\\
-\\\cn{chase}(\ell, x)=
-\\ \qquad\mbox{let }t=\cn{lookup}(x,\ell)\mbox{ in}
-\\ \qquad \mbox{if }x = t\mbox{ then }x
-\mbox{ else }\cn{chase}(\ell, t)
-\\\cn{chase}(\ell, \cn{invk}(t))=\cn{chase\_invk}(\ell, t)\hfill(!)
-\\\cn{chase}(\ell, t)=t
-\\
-\\\cn{chase\_invk}(\ell, x)=\hfill(!)
-\\ \qquad\mbox{let }t=\cn{lookup}(x,\ell)\mbox{ in}\hfill(!)
-\\ \qquad \mbox{if }x = t\mbox{ then }\cn{invk}(x)
-\mbox{ else }\cn{chase\_invk}(\ell, t)\hfill(!)
-\\\cn{chase\_invk}(\ell, \cn{invk}(t))=\cn{chase}(\ell, t)\hfill(!)
-\\\cn{chase\_invk}(\ell, t)=\cn{invk}(t)\hfill(!)
-\\
-\\\cn{lookup}(x,\seq{})=x
-\\\cn{lookup}(x,(y,t)\cons\ell)=
-\mbox{if }x=y\mbox{ then }t\mbox{ else }
-\cn{lookup}(x, \ell)
-\\
-\\\cn{unify\_aux}(\ell,x,x) =\ell
-\\\cn{unify\_aux}(\ell,x,t) =\mbox{if }\cn{occurs}(x, t)\mbox{ then raise failure else }
-(x,t)\cons\ell
-\\\cn{unify\_aux}(\ell,t,x) =\cn{unify\_aux}(\ell,x,t)
-\\\cn{unify\_aux}(\ell,\cn{invk}(x),\cn{pubk}(y)) =
-\cn{unify\_aux}(\ell, x, \cn{invk}(\cn{pubk}(y)))\hfill(!)
-\\\cn{unify\_aux}(\ell,\cn{pubk}(x),\cn{invk}(y)) =
-\cn{unify\_aux}(\ell, y, \cn{invk}(\cn{pubk}(x)))\hfill(!)
-\\\cn{unify\_aux}(\ell,f(t,\ldots),f(t',\ldots)) =
-\cn{unify\_list}(\ell,\seq{t,\ldots},\seq{t',\ldots})
-\\\cn{unify\_aux}(\ell,t,t') =\mbox{raise failure}
-\\
-\\\cn{unify\_list}(\ell,\seq{},\seq{}) =\ell
-\\\cn{unify\_list}(\ell,t\cons u,t'\cons u') =
-\cn{unify\_list}(\cn{unify}(\ell,t,t'), u, u')
-\\\cn{unify\_list}(\ell,u,u') =\mbox{raise failure}
-\end{array}
-$$
-\caption{Unifier}\label{fig:unifier}
-\end{figure}
-
-There are efficient ways of implementing unification for this algebra
-because there are efficient ways for implementing for unification in
-equational theories representable by a convergent term rewrite
-system~\cite{Fay79}. As long as terms are compatible, substitutions
-produced by unifiers map an identifier that occurs with a given sort to a
-term of the same sort.  Depending on the sort symbol, a substitution is
-limited to the following forms:
-$$
-\begin{array}{cllll}
-\dom{mesg}&I\mapsto I&I\mapsto B
-&I\mapsto\cn{cat}(T,T)&I\mapsto\cn{enc}(T,T)\ldots\\
-\dom{akey}&I\mapsto I&I\mapsto\cn{pubk}(I)
-&I\mapsto\cn{invk}(I)&I\mapsto\cn{invk}(\cn{pubk}(I))\\
-\dom{skey}&I\mapsto I&I\mapsto\cn{ltk}(I, I)\\
-\dom{text}&I\mapsto I\\
-\dom{data}&I\mapsto I\\
-\dom{name}&I\mapsto I
-\end{array}
-$$
-
-The current implementation uses an algorithm for unification without
-equations described by Laurence Paulson~\cite[Page~381]{Paulson91}
-with modifications to the unification functions as shown in
-Figure~\ref{fig:unifier}, where $e\cons\ell$ means
-$\seq{e}\append\ell$.  The function \cn{unify} calls \cn{unify\_aux}
-in the unmodified version.
-
-\begin{figure}
-$$
-\begin{array}{l}
-\cn{match}(\ell,x,t) =
-\\\qquad\mbox{if }\lnot\cn{bound}(x, \ell)\mbox{ then }(x,t)\cons\ell
-\\\qquad\mbox{else if } \cn{lookup}(x,\ell)= t\mbox{ then }\ell
-\\\qquad\mbox{else raise failure}
-\\\cn{match}(\ell,f(t,\ldots),f(t',\ldots)) =
-\cn{match\_list}(\ell,\seq{t,\ldots},\seq{t',\ldots})
-\\\cn{match}(\ell,\cn{invk}(t),t') = \cn{match}(\ell,t,\cn{invk}(t'))\hfill(!)
-\\\cn{match}(\ell,t,t') =\mbox{raise failure}
-\\
-\\\cn{bound}(x,\seq{})=\cn{false}
-\\\cn{bound}(x,(y,t)\cons\ell)=
-x=y\mbox{ or }\cn{bound}(x, \ell)
-\\
-\\\cn{match\_list}(\ell,\seq{},\seq{}) =\ell
-\\\cn{match\_list}(\ell,t\cons u,t'\cons u') =
-\cn{match\_list}(\cn{match}(\ell,t,t'), u, u')
-\\\cn{match\_list}(\ell,u,u') =\mbox{raise failure}
-\end{array}
-$$
-\caption{Matcher}\label{fig:matcher}
-\end{figure}
-
-\chapter{Diffie-Hellman}
-
-\begin{table}
-\begin{center}
-Base sort symbols: \dom{name}, \dom{text}, \dom{data}, \dom{skey},
-\dom{akey}, \dom{expn}\\
-Non-base sort symbols: \dom{mesg}, \dom{base}, \dom{expr} \\[1ex]
-Subsorts: \dom{name}, \dom{text}, \dom{data}, \dom{akey}, \dom{skey},
-\dom{expr}, $\dom{base}<\dom{mesg}$,
-$\dom{expn}<\dom{expr}$\\[1ex]
-\begin{tabular}{@{}ll}
-$\enc{\cdot}{(\cdot)}\colon\dom{mesg}\times\dom{mesg}\rightarrow\dom{mesg}$
-&Encryption\\
-$\#\colon\dom{mesg}\rightarrow\dom{mesg}$
-&Hashing\\
-$(\cdot,\cdot)\colon\dom{mesg}\times\dom{mesg}\rightarrow\dom{mesg}$
-&Pairing\\
-``\ldots''$\colon\dom{mesg}$& Tag constants\\
-$K_{(\cdot)}\colon\dom{name}\rightarrow\dom{akey}$
-&Public key of name\\
-$(\cdot)^{-1}\colon\dom{akey}\rightarrow\dom{akey}$
-&Inverse of asymmetric key\\
-$\cn{ltk}\colon\dom{name}\times\dom{name}\rightarrow\dom{skey}$
-& Long term shared key\\
-$\gen\colon\dom{base}$
-& Generator constant\\
-$(\cdot)^{(\cdot)}\colon\dom{base}\times\dom{expr}\rightarrow\dom{base}$
-& Exponentiation\\
-$(\cdot\cdot)\colon\dom{expr}\times\dom{expr}\rightarrow\dom{expr}$
-& Group operation\\
-$(1/\cdot)\colon\dom{expr}\rightarrow\dom{expr}$
-& Group inverse\\
-$1\colon\dom{expr}$
-& Group identity
-\end{tabular}\\[1ex]
-Axioms: $(x^{-1})^{-1}\approx x$ for $x\colon\dom{akey}$\\
-$1x\approx x$, $x(1/x)\approx 1$, $xy\approx yx$, $x(yz)=(xy)z$,\\
-$h^1=h$, and $(h^x)^y=h^{xy}$ for $h\colon\dom{base}$ and
-$x,y,z\colon\dom{expr}$
-\\[1ex]
-\caption{Diffie-Hellman Signature}\label{tab:dh}
-\end{center}
-\end{table}
-
-Table~\ref{tab:dh} contains the signature used for Diffie-Hellman
-analysis.  In this algebra, messages of the form $\gen^x$ for
-$x\colon\dom{expn}$ are also atoms.
-
-\bibliography{cpsa}
-\bibliographystyle{plain}
-
-\printindex
-
-\end{document}
diff --git a/doc/cpsadiagrams.mp b/doc/cpsadiagrams.mp
deleted file mode 100644
--- a/doc/cpsadiagrams.mp
+++ /dev/null
@@ -1,307 +0,0 @@
-filenametemplate "%j-%c.mps";
-
-verbatimtex
-\documentclass[12pt]{article}
-\newcommand{\enc}[2]{\{\!|#1|\!\}_{#2}}
-\begin{document}
-etex
-
-input boxes;
-
-pair w; w = (4in, 0);		% Width of diagram
-
-alpha = .45;			% Row offset ratio for messages
-beta = .85;		        % Row offset ratio for shortened arrows
-
-input strands;
-
-input cmstrands;		% Use CM arrows
-
-picture node; node = btex $\bullet$ etex;
-
-% The height of a downarrow is the unit of length for a strand
-% succession edge.
-
-numeric delta;
-begingroup;
-  path p; p = bbox(btex $\downarrow$ etex);
-  delta = ypart(ulcorner p - llcorner p);
-endgroup;
-
-% The width of a leftarrow is the unit of length for a directed term
-% symbol.
-
-numeric dir_width;
-begingroup;
-  path p; p = bbox(btex $\leftarrow$ etex);
-  dir_width = xpart (lrcorner p - llcorner p);
-endgroup;
-
-% Needham-Schroeder Protocol
-
-% Initiator role
-
-beginfig(0);
-  % Backbone
-  strand.a(3, origin, delta, btex $\mathstrut\mathit{init}$ etex, node);
-
-  % Messages
-  outbnd.a(1, dir_width, btex $\enc{N_1, A}{K_B}$ etex);
-  inbnd.a(2, dir_width, btex $\enc{N_1, N_2}{K_A}$ etex);
-  outbnd.a(3, dir_width, btex $\enc{N_2}{K_B}$ etex);
-endfig;
-
-% Responder role
-
-beginfig(1);
-  % Backbone
-  strand.a(3, origin, delta, btex $\mathstrut\mathit{resp}$ etex, node);
-
-  % Messages
-  rinbnd.a(1, dir_width, btex $\enc{N_1, A}{K_B}$ etex);
-  routbnd.a(2, dir_width, btex $\enc{N_1, N_2}{K_A}$ etex);
-  rinbnd.a(3, dir_width, btex $\enc{N_2}{K_B}$ etex);
-endfig;
-
-% Intended run
-
-beginfig(2);
-  % Strand for principal A
-  strand.a(3, origin, delta, btex $\mathstrut\mathit{init}$ etex, node);
-
-  % Strand for principal B
-  strand.b(3, .5w, delta, btex $\mathstrut\mathit{resp}$ etex, node);
-
-  % Messages and arrows
-  label.top(btex $\enc{N_1, A}{K_B}$ etex, .5[a1.c, b1.c]);
-  drawmsg(a1.e -- b1.w);
-  label.top(btex $\enc{N_1, N_2}{K_A}$ etex, .5[a2.c, b2.c]);
-  drawmsg(b2.w -- a2.e);
-  label.top(btex $\enc{N_2}{K_B}$ etex, .5[a3.c, b3.c]);
-  drawmsg(a3.e -- b3.w);
-endfig;
-
-% Penetrated run
-
-beginfig(3);
-  % Strand for principal B
-  boxstrand.b(3, w, btex $\mathstrut B$ etex, node);
-  draw pic b3;
-
-  % Strand for principal P
-  boxstrand.p(4, .5w, btex $\mathstrut P$ etex, node);
-  draw pic p4;
-
-  spacestrand.p(3, delta);
-  draw pic p3;
-
-  % Strand for principal A
-  boxstrand.a(3, p3.c - p4.c, btex $\mathstrut A$ etex, node);
-  draw pic a3;
-
-  spacestrand.a(2, delta);
-  draw pic a2;
-
-  ypart b2.c = ypart a2.c;
-  draw pic b2;
-
-  spacestrand.b(1, delta);
-  draw pic b1;
-
-  ypart p2.c = ypart b1.c;
-  draw pic p2;
-
-  spacestrand.p(1, delta);
-  draw pic p1;
-
-  ypart a1.c = ypart p1.c;
-  draw pic a1;
-
-  drawsucc(a1.s -- a2.n);
-  drawsucc(a2.s -- a3.n);
-  drawsucc(p1.s -- p2.n);
-  drawsucc(p2.s -- p3.n);
-  drawsucc(p3.s -- p4.n);
-  drawsucc(b1.s -- b2.n);
-  drawsucc(b2.s -- b3.n);
-
-  label.top(btex $\enc{N_1, A}{K_P}$ etex, .5[a1.c, p1.c]);
-  drawmsg(a1.e -- p1.w);
-  label.top(btex $\enc{N_1, A}{K_B}$ etex, .5[p2.c, b1.c]);
-  drawmsg(p2.e -- b1.w);
-  label.top(btex $\enc{N_1, N_2}{K_A}$ etex, .75[b2.c, a2.c]);
-  drawmsg(b2.w -- a2.e);
-  label.top(btex $\enc{N_2}{K_P}$ etex, .5[a3.c, p3.c]);
-  drawmsg(a3.e -- p3.w);
-  label.top(btex $\enc{N_2}{K_B}$ etex, .5[p4.c, b3.c]);
-  drawmsg(p4.e -- b3.w);
-endfig;
-
-% Shape with $K^{-1}_A$ uncompromised, $N_2$ fresh
-
-beginfig(4);
-  % Strand for principal A
-  strand.a(3, origin, delta, btex $\mathstrut\mathit{init}$ etex, node);
-
-  % Strand for principal B
-  strand.b(3, w, delta, btex $\mathstrut\mathit{resp}$ etex, node);
-
-  % Centered ordering symbols
-  boxit.o1(btex \phantom{$\prec$} etex); o1.c = .5[a1.c, b1.c];
-  boxit.o2(btex $\succ$ etex); o2.c = .5[a2.c, b2.c];
-  boxit.o3(btex $\prec$ etex); o3.c = .5[a3.c, b3.c];
-
-  for i = 1 upto 3:
-    draw pic o[i];
-  endfor;
-
-  % Messages and arrows
-  label.top(btex $\enc{N_1, A}{K_C}$ etex, alpha[a1.c, o1.c]);
-  drawmsg(a1.e -- beta[a1.e,o1.w]); % Shortened arrow
-  label.top(btex $\enc{N_1, A}{K_B}$ etex, alpha[b1.c, o1.c]);
-  drawmsg(beta[b1.w,o1.e] -- b1.w); % Shortened arrow
-  label.top(btex $\enc{N_1, N_2}{K_A}$ etex, alpha[a2.c, o2.c]);
-  drawmsg(o2.w -- a2.e);
-  label.top(btex $\enc{N_1, N_2}{K_A}$ etex, alpha[b2.c, o2.c]);
-  drawmsg(b2.w -- o2.e);
-  label.top(btex $\enc{N_2}{K_C}$ etex, alpha[a3.c, o3.c]);
-  drawmsg(a3.e -- o3.w);
-  label.top(btex $\enc{N_2}{K_B}$ etex, alpha[b3.c, o3.c]);
-  drawmsg(o3.e -- b3.w);
-endfig;
-
-beginfig(5);
-  % Strand for principal A
-  strand.a(3, origin, delta, btex $\mathstrut\mathit{init}$ etex, node);
-
-  % Strand for principal B
-  strand.b(2, w + a2.c, delta, btex $\mathstrut\mathit{resp}$ etex, node);
-
-  % Centered ordering symbols
-  boxit.o1(btex $\prec$ etex); o1.c = .5[a1.c, b1.c];
-  boxit.o2(btex $\succ$ etex); o2.c = .5[a2.c, b2.c];
-
-  for i = 1 upto 2:
-    draw pic o[i];
-  endfor;
-
-  % Messages and arrows
-  label.top(btex $\enc{N_1, A}{K_B}$ etex, alpha[a1.c, o1.c]);
-  drawmsg(a1.e -- o1.w);
-  label.top(btex $\enc{N_1, A}{K_B}$ etex, alpha[b1.c, o1.c]);
-  drawmsg(o1.e -- b1.w);
-  label.top(btex $\enc{N_1, N_2}{K_A}$ etex, alpha[a2.c, o2.c]);
-  drawmsg(o2.w -- a2.e);
-  label.top(btex $\enc{N_1, N_2}{K_A}$ etex, alpha[b2.c, o2.c]);
-  drawmsg(b2.w -- o2.e);
-  label.top(btex $\enc{N_2}{K_B}$ etex,
-    alpha[a3.c, (xpart o2.c, ypart a3.c)]);
-  drawmsg(a3.c -- (beta * xpart o2.c, ypart a3.c));
-endfig;
-
-% Incompleteness example
-
-% Initiator role
-
-beginfig(6);
-  % Backbone
-  strand.a(2, origin, delta, btex $\mathstrut\mathit{init}$ etex, node);
-
-  % Messages
-  outbnd.a(1, dir_width, btex $\enc{N}{K}$ etex);
-  inbnd.a(2, dir_width, btex $N$ etex);
-endfig;
-
-% Responder role
-
-beginfig(7);
-  % Backbone
-  strand.a(2, origin, delta, btex $\mathstrut\mathit{resp}$ etex, node);
-
-  % Messages
-  rinbnd.a(1, dir_width, btex $\enc{N_1}{K}$ etex);
-  routbnd.a(2, dir_width, btex $N_2$ etex);
-endfig;
-
-% Omitted run
-
-beginfig(8);
-  % Strand for principal A
-  strand.a(2, origin, delta, btex $\mathstrut\mathit{init}$ etex, node);
-
-  % Strand for principal B
-  strand.b(2, .5w, delta, btex $\mathstrut\mathit{resp}$ etex, node);
-
-  % Messages and arrows
-  label.top(btex $\enc{N}{K}$ etex, .5[a1.c, b1.c]);
-  drawmsg(a1.e -- b1.w);
-  label.top(btex $N$ etex, .5[a2.c, b2.c]);
-  drawmsg(b2.w -- a2.e);
-endfig;
-
-beginfig(9);
-  % Strand for principal A
-  strand.a(3, origin, delta, btex $\mathstrut\mathit{init}$ etex, node);
-
-  % Strand for principal B
-  strand.b(2, w + a2.c, delta, btex $\mathstrut\mathit{resp}$ etex, node);
-
-  % Centered ordering symbols
-  boxit.o1(btex $\prec$ etex); o1.c = .5[a1.c, b1.c];
-  boxit.o2(btex $\succ$ etex); o2.c = .5[a2.c, b2.c];
-
-  for i = 1 upto 2:
-    draw pic o[i];
-  endfor;
-
-  % Messages and arrows
-  label.top(btex $\enc{N_1, A}{K_B}$ etex, alpha[a1.c, o1.c]);
-  drawmsg(a1.e -- o1.w);
-  label.top(btex $\enc{N_1, A}{K_B}$ etex, alpha[b1.c, o1.c]);
-  drawmsg(o1.e -- b1.w);
-  label.top(btex $\enc{N_1, N_2}{K_A}$ etex, alpha[a2.c, o2.c]);
-  drawmsg(o2.w -- a2.e);
-  label.top(btex $\enc{N_1, N_2'}{K_A}$ etex, alpha[b2.c, o2.c]);
-  drawmsg(b2.w -- o2.e);
-  label.top(btex $\enc{N_2}{K_B}$ etex,
-    alpha[a3.c, (xpart o2.c, ypart a3.c)]);
-  drawmsg(a3.e -- (beta * xpart o2.w, ypart a3.c));
-endfig;
-
-beginfig(10);
-  % Strand for principal A
-  strand.a(3, origin, delta, btex $\mathstrut\mathit{resp}$ etex, node);
-
-  % Strand for principal B
-  strand.b(3, w, delta, btex $\mathstrut\mathit{init}$ etex, node);
-
-  % Centered ordering symbols
-  boxit.o2(btex $\prec$ etex); o2.c = .5[a2.c, b2.c];
-  boxit.o3(btex $\succ$ etex); o3.c = .5[a3.c, b3.c];
-
-  for i = 2 upto 3:
-    draw pic o[i];
-  endfor;
-
-  % Messages and arrows
-  label.top(btex $\enc{N_1, A}{K_B}$ etex,
-      alpha[a1.c, (xpart o2.c, ypart a1.c)]);
-  drawmsg(a1.e -- (beta * xpart o2.w, ypart a1.c));
-  label.top(btex $\enc{N_1, A}{K_{B'}}$ etex,
-      alpha[b1.c, (xpart o2.c, ypart b1.c)]);
-  drawmsg((1-beta)[(xpart o2.e, ypart b1.c), b1.w] -- b1.w);
-  label.top(btex $\enc{N_1, N_2}{K_A}$ etex, alpha[a2.c, o2.c]);
-  drawmsg(a2.e -- o2.w);
-  label.top(btex $\enc{N_1, N_2}{K_A}$ etex, alpha[b2.c, o2.c]);
-  drawmsg(o2.e -- b2.w);
-  label.top(btex $\enc{N_2}{K_B}$ etex, alpha[a3.c, o3.c]);
-  drawmsg(o3.w -- a3.e);
-  label.top(btex $\enc{N_2}{K_{B'}}$ etex, alpha[b3.c, o3.c]);
-  drawmsg(b3.w -- o3.e);
-
-endfig;
-
-verbatimtex
-\end{document}
-etex
-bye;
diff --git a/doc/cpsagoals.pdf b/doc/cpsagoals.pdf
deleted file mode 100644
Binary files a/doc/cpsagoals.pdf and /dev/null differ
diff --git a/doc/cpsagoals.tex b/doc/cpsagoals.tex
deleted file mode 100644
--- a/doc/cpsagoals.tex
+++ /dev/null
@@ -1,736 +0,0 @@
-\documentclass[12pt]{article}
-\usepackage{amssymb}
-\usepackage{amsmath}
-\usepackage{url}
-\usepackage{graphicx}
-\usepackage{alltt}
-\input{macros}
-
-\newcommand{\sym}[1]{\textup{\texttt{#1}}}
-
-\title{CPSA and Formal Security Goals}
-\author{John D.~Ramsdell\\
-  The MITRE Corporation\\ CPSA Version \version}
-
-\begin{document}
-\maketitle
-\cpsacopying
-
-\tableofcontents
-
-\newpage
-
-\listoffigures
-
-\listoftables
-
-\newpage
-
-\section{Introduction}
-
-\begin{sloppypar}
-Analyzing a cryptographic protocol means finding out what security
-properties---essentially, authentication and secrecy properties---are
-true in all its possible executions.
-\end{sloppypar}
-
-Given a protocol definition and some assumptions about executions,
-{\cpsa} attempts to produce descriptions of all possible executions of
-the protocol compatible with the assumptions.  Naturally, there are
-infinitely many possible executions of a useful protocol, since
-different participants can run it with varying parameters, and the
-participants can run it repeatedly.
-
-However, for many naturally occurring protocols, there are only
-finitely many of these runs that are essentially different.  Indeed,
-there are frequently very few, often just one or two, even in cases
-where the protocol is flawed.  We call these essentially different
-executions the \emph{shapes} of the protocol.  Authentication and
-secrecy properties are easy to ``read off'' from the shapes, as are
-attacks and anomalies, according to the introduction in the {\cpsa}
-Primer~\cite{cpsaprimer09}.
-
-But how easy is it to read off authentication and secrecy properties?
-What precisely is it that an expert sees?  This paper describes
-{\cpsa}'s support for reasoning about security goals using first-order
-logic.  With security goals expressed in first-order logic, intuition
-is replaced by determining if a formula is true in all executions of
-the protocol.
-
-% \emph{Something about the benefits of first-order logic goes here.}
-
-This treatment of security goals relies heavily on a branch of
-first-order logic called model theory.  It deals with the relationship
-between descriptions in first-order languages and the structures that
-satisfy these descriptions.  In our case, the structures are skeletons
-that denote a collection of executions of a protocol.  This paper
-attempts to describe the language of security goals and its
-structures without requiring the reader to have studied model theory.
-
-The model theoretical foundation of this approach to security goals
-appears in~\cite{Guttman14}.  A practical use of security goals in
-protocol standardization is described in~\cite{GuttmanLiskovRowe14}.
-The precise semantics of the goal language is
-in~\cite[Appendix~C]{cpsaspec09}.  The syntax of security goals
-appears in~\cite[Table~2]{cpsaprimer09}.
-
-The distribution in which this paper is included contains the sample
-input {\cpsa} file \texttt{goals.scm}.  It contains the examples in
-this paper.  You are encouraged to run the examples and examine the
-output while reading this paper.
-
-%% Use a margin width of 62 for S-expressions
-
-\begin{figure}
-\begin{center}
-\includegraphics{cpsadiagrams-0.mps}\hfil
-\includegraphics{cpsadiagrams-1.mps}\\
-\end{center}
-\begin{center}
-\begin{minipage}{3in}
-\begin{verbatim}
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-     (send (enc n1 a (pubk b)))
-     (recv (enc n1 n2 (pubk a)))
-     (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc n1 a (pubk b)))
-     (send (enc n1 n2 (pubk a)))
-     (recv (enc n2 (pubk b))))))
-\end{verbatim}
-\end{minipage}
-\end{center}
-\caption{Needham-Schroeder Initiator and Responder Roles}
-\label{fig:ns roles}
-\end{figure}
-
-\begin{figure}
-\begin{verbatim}
-(defgoal ns                ; Goal
-  (forall ((b name) (n1 text) (z0 node))
-    (implies
-     (and (p "init" 2 z0)
-      (p "init" "n1" z0 n1) (p "init" "b" z0 b)
-      (non (privk b)) (uniq n1))
-     (exists ((z1 node))
-      (and (p "resp" 1 z1) (p "resp" "b" z1 b))))))
-
-(defskeleton ns            ; Point of view skeleton
-  (vars (a b name) (n1 n2 text))
-  (defstrand init 3 (a a) (b b) (n1 n1) (n2 n2))
-  (non-orig (privk b))
-  (uniq-orig n1))
-\end{verbatim}
-\begin{center}
-\includegraphics{cpsadiagrams-9.mps}
-\end{center}
-\begin{verbatim}
-(defskeleton ns            ; Shape
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig n1)
-  (satisfies yes))
-\end{verbatim}
-\caption{Needham-Schroeder Initiator Point of View}
-\label{fig:ns init}
-\end{figure}
-
-The {\cpsa} Primer~\cite{cpsaprimer09} is a prerequisite for reading
-this paper.  In particular, the Needham-Schroeder Protocol in
-Section~10 is reanalyzed using security goals here.  The roles are
-displayed in Figure~\ref{fig:ns roles}.
-
-The protocol is analyzed from the point of view of a complete run of
-one instance of the initiator role.  The input security goal, followed
-by the point of view skeleton it generates and the shape produced by
-{\cpsa}, are shown in Figure~\ref{fig:ns init}.  The syntax and
-semantics of the goal will be explained later.  Roughly speaking, it
-asserts that if a realized skeleton contains a full length initiator
-strand, its private key is uncompromised, and it uniquely generates
-\texttt{n1}, then the skeleton will contain a responder strand that
-agrees with the initiator on the name \texttt{b}.  The shape produced
-by {\cpsa} contains the annotation \texttt{(satisfies yes)}.  This
-indicates that its structure satisfies the description given by the
-security goal.  It will be explained later why the properties of
-{\cpsa} allows us to conclude that this goal is true in all executions
-of the protocol, and therefore conclude that the Needham-Schroeder
-protocol achieves this authentication goal.
-
-\section{Syntax}\label{sec:syntax}
-
-To be precise, a security goal is an order-sorted first-order logic
-sentence in a restricted form.  The sentence in Figure~\ref{fig:ns
-  init} has the form shared by all security goals.  It is a
-universally quantified implication.  The antecedent is a conjunction
-of atomic formulas.  For this sentence, the conclusion is an
-existentially quantified conjunction of atomic formulas, but in
-general, the conclusion is a disjunction of existentially quantified
-conjunctions of atomic formulas.  In what follows, \sym{(false)} is a
-synonym for the empty disjunction, \sym{(or)}.
-
-\begin{center}\scshape
-  \begin{tabular}{rcl}
-  goal&$\leftarrow$&(\sym{defgoal} prot sent$+$ comments)
-  \\ sent&$\leftarrow$&(\sym{forall} (decl$\ast$) (\sym{implies} antec concl))
-  \\ concl&$\leftarrow$&(\sym{false})
-  $\mid$ existl $\mid$ (\sym{or} existl$\ast)$
-  \\ existl&$\leftarrow$&(\sym{exists}
-  (decl$\ast$) antec) $\mid$ antec
-  \\ antec&$\leftarrow$&atomic $\mid$ (\sym{and} atomic$\ast$)
-  \end{tabular}
-\end{center}
-
-Variables are declared as they are for roles and skeletons with one
-exception, there is a new sort symbol \sym{node}.  Notice that in the
-sentence, variables \sym{z0} and \sym{z1} have sort \sym{node}.  Every
-universally quantified variable must occur in the antecedent of the
-implication.
-
-The predicates used to construct an atomic formula (\textsc{atomic})
-are listed in Table~\ref{tab:predicates}.  There are two classes of
-predicates, protocol specific and protocol independent predicates, and
-two kinds of protocol specific predicates, role position and role
-parameter predicates.  Protocol specific predicates are distinguished
-from protocol independent predicates by being composed of three
-tokens, the first of which is \texttt{p}.
-
-The first line of the table gives the syntax of a role position
-predicate.  It contains three tokens, \texttt{p}, a string that names
-a role, and an integer that specifies a position within the trace of
-the role.  That is, for role~$r$ with a trace of length~$n$, there
-are~$n$ role position predicates, \mbox{\texttt{p} $r$ $i$}, for
-$0\leq i < n$.  Thus \verb|(p "init" 2 z0)| is an atomic formula using
-the role position predicate for position 2 in the \texttt{init} role
-of the protocol in Figure~\ref{fig:ns roles}.
-
-The second line gives the syntax of a role parameter predicate.  It
-contains three tokens, \texttt{p}, a string that names a role, and a
-string that names a role variable.  For role~$r$, there is role
-parameter predicate for each variable declared by~$r$.  Thus
-\verb|(p "init" "n1" z0 n1)| is an atomic formula using the role
-parameter predicate for parameter \text{n1} in the \texttt{init} role
-of the protocol.
-
-The empty string names the listener role of a protocol.  The role
-has the variable \texttt{x} of sort \texttt{mesg} as its only role
-variable.  There are two positions in the listener role.  Its trace is
-\texttt{(trace (recv x) (send x))}.
-
-When a variable of sort \sym{node} occurs in a formula, its position
-must be specified using a role position formula.  When an algebra
-variable occurs in a formula, its association with the parameter of
-some role must be specified using a role parameter formula.
-
-\begin{table}
-\begin{center}
-  \begin{tabular}{lcl}
-    Symbol & Sort & Description\\
-    \hline
-    \scshape\sym{p} role pos & \dom{node} & \mbox{Role position} \\
-    \scshape\sym{p} role param & $\dom{node}\times\dom{mesg}$
-    & \mbox{Role parameter} \\
-    \sym{str-prec}& $\dom{node}\times\dom{node}$
-    & \mbox{Precedes on strand} \\
-    \sym{prec}& $\dom{node}\times\dom{node}$
-    & \mbox{Precedes} \\
-    \sym{non}& \dom{atom}
-    & \mbox{Non-origination} \\
-    \sym{pnon}& \dom{atom}
-    & \mbox{Penetrator non-origination} \\
-    \sym{uniq}& \dom{atom}
-    & \mbox{Unique origination} \\
-    \sym{uniq-at}& $\dom{atom}\times\dom{node}$
-    & \mbox{Unique origination at node} \\
-    $=$ & $\dom{all}\times\dom{all}$ & Equality
-  \end{tabular}
-\end{center}
-\caption{Predicates}\label{tab:predicates}
-\end{table}
-
-\section{Semantics}\label{sec:semantics}
-
-In a \texttt{defgoal} sentence, the antecedent specifies the point of
-view skeleton.  We focus on the antecedent.  In the example,
-
-\begin{quote}
-\begin{verbatim}
-(defstrand init 3 (a a) (b b) (n1 n1) (n2 n2))
-\end{verbatim}
-\end{quote}
-is extracted from
-\begin{quote}
-\begin{verbatim}
-(and (p "init" 2 z0)
-  (p "init" "n1" z0 n1) (p "init" "b" z0 b)).
-\end{verbatim}
-\end{quote}
-Notice that {\cpsa} adds a binding for \texttt{a} and \texttt{n2} just
-as it does had
-\begin{quote}
-\begin{verbatim}
-(defstrand init 3 (b b) (n1 n1))
-\end{verbatim}
-\end{quote}
-been given as input.
-
-Our aim now is to specify how to decide if a security goal is true in
-all possible executions of a protocol.  A skeleton defines a set of
-executions that contain the skeleton's structure.  We say a skeleton
-\emph{satisfies} a formula if the skeleton contains all of the
-structure specified by the formula.  To decide if a skeleton
-satisfies a formula, we decide if it satisfies each of its atomic
-formulas, and combine the results using the rules of first-order
-logic.
-
-Atomic formula \texttt{(p "init" 2 z0)} is called a role position
-formula.  A skeleton~$k$ satisfies the formula if \texttt{z0} maps to
-a node $n=(s,2)$ in~$k$ such that
-\begin{enumerate}
-\item the trace of strand~$s$ in~$k$ has a length greater than 2, and
-\item the trace when truncated to length 3 is an instance of the init
-  role.
-\end{enumerate}
-Consider the shape in Figure~\ref{fig:ns init}.  It satisfies
-\texttt{(p "init" 2 z0)} when \texttt{z0} maps to $(0,2)$.
-
-Atomic formula \texttt{(p "init" "n1" z0 n1)} is called a role
-parameter formula.  A skeleton~$k$ satisfies the formula if
-\texttt{z0} maps to a node $n=(s,i)$ in~$k$ and \texttt{n1} maps to a
-message algebra term~$t$ in~$k$ such that
-\begin{enumerate}
-\item the trace of strand~$s$ in~$k$ has a length greater than~$i$,
-\item the trace truncated to length $i+1$ is an instance of the
-  init role, and
-\item the truncated trace is compatible with mapping the init role's
-  \texttt{"n1"} role variable to~$t$.
-\end{enumerate}
-The shape in Figure~\ref{fig:ns init} satisfies \texttt{(p "init" "n1"
-  z0 n1)} when \texttt{z0} maps to $(0,2)$ and \texttt{n1} maps to the
-message algebra term \texttt{n1}.
-
-Collectively, a skeleton satisfies the formula
-\begin{quote}
-\begin{verbatim}
-(and (p "init" 2 z0)
-     (p "init" "a" z0 a) (p "init" "b" z0 b)
-     (p "init" "n1" z0 n1) (p "init" "n2" z0 n2))
-\end{verbatim}
-\end{quote}
-if the skeleton contains the structure specified by
-\begin{quote}
-\begin{verbatim}
-(defstrand init 3 (a a) (b b) (n1 n1) (n2 n2)).
-\end{verbatim}
-\end{quote}
-
-The antecedent in Figure~\ref{fig:ns init} contains two origination
-assertions.  The formula \texttt{(non (privk b))} is extracted as
-\texttt{(privk b)}.  A skeleton~$k$ satisfies the formula if
-\texttt{b} maps to a message algebra term~$t$ in~$k$ such that~$k$
-assumes that~$t$ is non-originating.  The unique origination formula for
-\texttt{n1} is similarly extracted.
-
-Putting it all together, the mapping
-\[\{\mathtt{n1}\mapsto\mathtt{n1},
-\mathtt{n2}\mapsto\mathtt{n2}, \mathtt{a}\mapsto\mathtt{a},
-\mathtt{b}\mapsto\mathtt{b},\mbox{\tt z0}\mapsto(0,2)\}\] shows that
-the shape in Figure~\ref{fig:ns init} satisfies the antecedent of the
-security goal.
-
-The \texttt{prec} predicate is used to assert a node precedes another
-node.  The conclusion in Figure~\ref{fig:ns init} with \texttt{(prec
-  z1 z0)} added is satisfied by the shape using the mapping $\mbox{\tt
-  z0}\mapsto(0,2)$ and $\mbox{\tt z1}\mapsto(1,1)$.
-
-The \texttt{str-prec} predicate is used to assert a node precedes another
-node and that both are on the same strand.
-
-The \texttt{uniq-at} predicate is used to assert not only that an atom
-uniquely originates, but also the node at which it originates.  It is
-typically used in conjunction with a \texttt{str-prec} formula.  In
-the Figure~\ref{fig:ns init} goal, the \texttt{(uniq n1)} formula
-could have been replaced by
-\begin{quote}
-\begin{verbatim}
-(p "init" 0 z2) (str-prec z2 z0) (uniq-at n1 z2),
-\end{verbatim}
-\end{quote}
-where \texttt{z2} has sort \texttt{node}.  The extracted point of view
-skeleton is the same.  Of course, an error is raised if the role
-position formula is replaced by \texttt{(p "init" 1 z2)}.
-
-Recall that our aim in analyzing a protocol is to find out what
-security goals are true in all of its possible executions.  We are
-interested in runs of {\cpsa} that show that when every shape
-satisfies a goal, it is true in every execution.
-
-When {\cpsa} performs a shape analysis, every shape it generates
-refines the input skeleton.  Skeleton refinement is defined
-in~\cite[Section~6]{cpsaprimer09}.  The definition makes precise the
-notion of structure containment, as skeleton~$A$ refines skeleton~$B$
-if and only if~$A$ contains the structure of skeleton~$B$.
-
-The skeleton~$k_0$ extracted from the antecedent of a security goal
-has the property that a skeleton refines~$k_0$ if and only if it
-satisfies the antecedent.  A skeleton with this property is called the
-\emph{characteristic skeleton} of the antecedent.
-
-Given a goal~\(\Phi\), consider a shape analysis starting from the
-characteristic skeleton~$k_0$ of its antecedent.  Assume {\cpsa} finds
-shapes $k_1,\ldots,k_n$ and that {\cpsa} determines that each~$k_i$
-satisfies~$\Phi$.  Consider the executions that contain the structure
-in~$k_0$.  {\cpsa} tells us that each execution is in the executions
-that contain the structure of some~$k_i$.  Furthermore, because~$k_0$
-is a characteristic skeleton, each~$k_i$ satisfies the antecedent
-of~$\Phi$.  Executions that do not contain the structure in~$k_0$ do
-not satisfy the antecedent.  Therefore,~$\Phi$ is true in all
-executions of the protocol and maximally informative.
-
-\section{Examples}\label{sec:examples}
-
-This section contains examples of both authentication and secrecy
-goals.  The first example shows the feedback the user receives when a
-shape does not satisfy a security goal.  The second example shows how
-to use a listener to state a secrecy goal.
-
-\subsection{Needham-Schroeder Responder}\label{sec:ns resp}
-
-\begin{figure}
-\begin{verbatim}
-(defgoal ns                ; Goal
-  (forall ((a b name) (n2 text) (z0 node))
-    (implies
-     (and (p "resp" 2 z0) (p "resp" "n2" z0 n2)
-      (p "resp" "a" z0 a) (p "resp" "b" z0 b)
-      (non (privk a)) (uniq n2))
-     (exists ((z1 node))
-      (and (p "init" 1 z1) (p "init" "b" z1 b)))))
-
-(defskeleton ns            ; Point of view skeleton
-  (vars (a b name) (n1 n2 text))
-  (defstrand init 3 (a a) (b b) (n1 n1) (n2 n2))
-  (non-orig (privk a))
-  (uniq-orig n2))
-\end{verbatim}
-\begin{center}
-\includegraphics{cpsadiagrams-10.mps}
-\end{center}
-\begin{verbatim}
-(defskeleton ns            ; Shape
-  (vars (n1 n2 text) (a b b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (satisfies (no (a a) (b b) (n2 n2) (z0 (0 2))))
-\end{verbatim}
-\caption{Needham-Schroeder Responder Point of View}
-\label{fig:ns resp}
-\end{figure}
-
-Figure~\ref{fig:ns resp} contains an analysis of Needham-Schroeder
-from the point of view of a complete run of the responder under the
-assumption that the responder's private key is uncompromised and the
-nonce it generates uniquely originates.
-
-The conclusion of the goal asserts that in an execution compatible
-with the point of view, there must be an initiator strand that agrees
-with the responder strand on the name \texttt{b}.  The shape produced
-by {\cpsa} is a counterexample to this assertion.  Because of this,
-{\cpsa} annotates the shape with
-\begin{quote}
-\begin{verbatim}
-(satisfies (no (a a) (b b) (n2 n2) (z0 (0 2))).
-\end{verbatim}
-\end{quote}
-The annotation includes a variable mapping for the shape that
-satisfies the antecedent of the goal but does not satisfy its
-conclusion.  The reason the shape does not satisfy the goal is because
-the mapping \texttt{(b b)} maps the initiator's \texttt{b} parameter
-to \texttt{b}, not \texttt{b-0} as is required to model the shape.
-
-Galvin Lowe identified this authentication failure in
-Needham-Schroeder and provided a fix.  In the Needham-Schroeder-Lowe
-Protocol, the name \texttt{b} is included within the encryption in second
-message of both roles.  With this modification, the shape found by
-{\cpsa} satisfies the security goal in Figure~\ref{fig:ns resp}, so
-Needham-Schroeder-Lowe achieves this authentication goal.
-
-\subsection{A Needham-Schroeder Secrecy Goal}\label{sec:secrecy goal}
-
-\begin{figure}
-\begin{quote}
-\begin{verbatim}
-(defgoal ns
-  (forall ((a b name) (n1 text) (z0 z1 node))
-    (implies
-     (and (p "init" 2 z0) (p "init" "n1" z0 n1)
-      (p "init" "a" z0 a) (p "init" "b" z0 b)
-      (p "" 0 z1) (p "" "x" z1 n1)    ; Listener
-      (non (privk a)) (non (privk b)) (uniq n1))
-     (false))))
-\end{verbatim}
-\end{quote}
-\caption{Needham-Schroeder Secrecy Goal}\label{fig:ns secrecy}
-\end{figure}
-
-Figure~\ref{fig:ns secrecy} contains an analysis of Needham-Schroeder
-from the point of view of a complete run of the initiator under the
-assumption that the responder's and its peer's private keys are
-uncompromised and the nonce~\texttt{n1} it generates uniquely
-originates.  Futhermore, the point of view asserts that the nonce is
-leaked using a listener.
-\begin{quote}
-\begin{verbatim}
-(p "" 0 z1) (p "" "x" z1 n1)    ; Listener
-\end{verbatim}
-\end{quote}
-
-{\cpsa} finds no shapes, so Needham-Schroeder achieves this secrecy
-goal and does not leak~\texttt{n1}.
-
-\subsection{Unilateral Authentication}\label{sec:unilateral}
-
-This example focuses on unilateral authentication.  To best visualize
-this example, process the sample file \texttt{goal.scm} with {\cpsa}
-and display its output in a browser.
-
-The protocol and its goal are shown in Figure~\ref{fig:unilateral}.
-The goal asserts that if a realized skeleton contains a full length
-initiator strand that uniquely generates \texttt{n1}, and
-peer~\texttt{a}'s private key is uncompromised, then the skeleton will
-contain a responder strand that agrees with the initiator on the
-name~\texttt{a}.  When given as input, {\cpsa} verifies that the goal
-is true in all executions of the protocol.
-
-\begin{figure}
-\begin{minipage}{2.7in}
-\begin{verbatim}
-(defprotocol unilateral basic
-  (defrole init
-    (vars (a name) (n text))
-    (trace
-     (send (enc n (pubk a)))
-     (recv n)))
-  (defrole resp
-    (vars (a name) (n text))
-    (trace
-     (recv (enc n (pubk a)))
-     (send n))))
-\end{verbatim}
-\end{minipage}\hfil
-\begin{minipage}{3.0in}
-\begin{verbatim}
-(defgoal unilateral
-  (forall ((a name) (n text)
-           (z0 node))
-   (implies
-    (and (p "init" 1 z0)
-     (p "init" "n" z0 n)
-     (p "init" "a" z0 a)
-     (non (privk a)) (uniq n))
-    (exists ((z1 node))
-     (and (p "resp" 1 z1)
-      (p "resp" "a" z1 a))))))
-\end{verbatim}
-\end{minipage}
-\caption{Unilateral Protocol and Authentication Goal}\label{fig:unilateral}
-\end{figure}
-
-\begin{figure}
-\begin{quote}
-\begin{verbatim}
-(defgoal ns
-  (forall ((a name) (n text) (z0 node))
-   (implies
-    (and (p "init" 1 z0) (p "init" "n1" z0 n)
-     (p "init" "b" z0 a) (non (privk a)) (uniq n))
-    (exists ((z1 node))
-     (and (p "resp" 1 z1) (p "resp" "b" z1 a))))))
-\end{verbatim}
-\end{quote}
-\caption{Translated Unilateral Goal for the
-  Initiator}\label{fig:unilateral ns init}
-\end{figure}
-
-\begin{figure}
-\begin{quote}
-\begin{verbatim}
-(defgoal ns
-  (forall ((a name) (n text) (z0 node))
-   (implies
-    (and (p "resp" 2 z0) (p "resp" "n2" z0 n)
-     (p "resp" "a" z0 a) (non (privk a)) (uniq n))
-    (exists ((z1 node))
-     (and (p "init" 2 z1) (p "init" "a" z1 a)))))
-\end{verbatim}
-\end{quote}
-\caption{Translated Unilateral Goal for the
-  Responder}\label{fig:unilateral ns resp}
-\end{figure}
-
-In Section~\ref{sec:ns resp}, a goal written for the Needham-Schroeder
-Protocol was reused to analyze the Needham-Schroeder-Lowe Protocol.
-We now use the unilateral authentication goal to analyze
-Needham-Schroeder.
-
-Consider the goal in Figure~\ref{fig:unilateral ns init}.  This goal
-is the result of translating the Unilateral role position and
-parameter predicates as follows.
-\begin{center}
-\begin{tabular}{l@{$\quad\rightarrow\quad$}l}
-  \texttt{p "init" "n"}&\texttt{p "init" "n1"}\\
-  \texttt{p "init" "a"}&\texttt{p "init" "b"}\\
-  \texttt{p "resp" "a"}&\texttt{p "resp" "b"}
-\end{tabular}
-\end{center}
-When given Figure~\ref{fig:unilateral ns init} as input, {\cpsa}
-verifies that the goal is true in all executions of the protocol.
-
-There is another way to translate the Unilateral goal.
-\begin{center}
-\begin{tabular}{l@{$\quad\rightarrow\quad$}l}
-  \texttt{p "init" 1}&\texttt{p "resp" "2"}\\
-  \texttt{p "init" "n"}&\texttt{p "resp" "n2"}\\
-  \texttt{p "init" "a"}&\texttt{p "resp" "a"}\\
-  \texttt{p "resp" "1"}&\texttt{p "init" "2"}\\
-  \texttt{p "resp" "a"}&\texttt{p "init" "a"}
-\end{tabular}
-\end{center}
-When given Figure~\ref{fig:unilateral ns resp} as input, {\cpsa}
-verifies that the goal is true in all executions of the protocol.
-
-{\cpsa} has demonstrated two ways in which Needham-Schroeder achieves
-the goals of the Unilateral Protocol.
-
-\section{The Rest of the Story}\label{sec:whole story}
-
-The examples in the previous section demonstrate the typical way
-security goals are analyzed with {\cpsa}.  However, there are more
-features that may be useful.
-
-A \texttt{defgoal} form may contain more than one sentence.  See
-Figure~\ref{fig:ns init goals} for an example.  When presented with
-more than one sentence, {\cpsa} extracts the point of view skeleton
-from the first sentence.
-
-It is wise to ensure that the antecedent in every sentence is
-identical.  When {\cpsa} performs satisfaction-checking on
-sentence~$\Phi$, it only determines if each shape it finds is
-satisfied.  If the point of view skeleton is not the characteristic
-skeleton of the antecedent of~$\Phi$, the fact that all skeletons
-satisfy~$\Phi$ cannot be used to conclude that~$\Phi$ is true in all
-executions of the protocol.
-
-\begin{figure}
-\begin{quote}
-\begin{verbatim}
-(defgoal ns
-  (forall ((a b name) (n text) (z0 node))
-    (implies
-     (and (p "init" 1 z0) (p "init" "n1" z0 n)
-      (p "init" "a" z0 a) (p "init" "b" z0 b)
-      (non (privk a)) (non (privk b)) (uniq n))
-     (exists ((z1 node))
-      (and (p "resp" 1 z1) (p "resp" "b" z1 b)))))
-  (forall ((a b name) (n text) (z0 node))
-   (implies
-     (and (p "init" 1 z0) (p "init" "n1" z0 n)
-      (p "init" "a" z0 a) (p "init" "b" z0 b)
-      (non (privk a)) (non (privk b)) (uniq n))
-     (exists ((z1 node))
-      (and (p "resp" 1 z1) (p "resp" "a" z1 a))))))
-\end{verbatim}
-\end{quote}
-\caption{Two Initiator Authentication Goals}\label{fig:ns init goals}
-\end{figure}
-
-{\cpsa} performs satisfaction-checking when an input skeleton in annotated
-with one or more security goals.  The annotation uses the
-\texttt{goals} key.
-
-\begin{quote}
-  \begin{alltt}
-(defskeleton
-   \ldots
-   (goals \textsc{sent\ensuremath{+}}))
-  \end{alltt}
-\end{quote}
-
-The program \texttt{cpsasas}, discussed in the next section, can be
-used to generate a formula with an antecedent such that the input
-skeleton is the characteristic skeleton of the antecedent.
-
-\subsection{Shape Analysis Sentences}\label{sec:sas}
-
-A shape analysis sentence expresses all that can be learned from a run
-of {\cpsa} as a security goal.  If a security goal can be derived from
-a shape analysis sentence, then the protocol achieves the security
-goal, that is, the goal is true in all executions of the protocol.
-
-The program \texttt{cpsasas} extracts shape analysis sentences from
-the output of {\cpsa}.  Consider the first example in this paper
-(Figure~\ref{fig:ns init}), which is in the sample file
-\texttt{goals.scm}.  To generate a maximally informative security goal
-from the initiator point of view with \texttt{ghci} and
-\texttt{Make.hs}, type
-\begin{quote}
-\begin{verbatim}
-$ ghci Make.hs
-*Make> sas "goals"
-\end{verbatim}
-\end{quote}
-When using GNU make, type ``\texttt{make goals\_sas.text}''.  The
-resulting shape analysis sentence is displayed in Figure~\ref{fig:ns
-  sas}.
-
-\begin{figure}
-\begin{verbatim}
-(defgoal ns
-  (forall ((n1 n2 text) (b a name) (z z-0 node))
-    (implies
-      (and (p "init" 0 z) (p "init" 2 z-0)
-        (p "init" "n1" z-0 n1) (p "init" "n2" z-0 n2)
-        (p "init" "a" z-0 a) (p "init" "b" z-0 b)
-        (str-prec z z-0) (non (privk b)) (uniq-at n1 z))
-      (exists ((n2-0 text) (z-1 z-2 z-3 node))
-        (and (p "init" 1 z-1) (p "resp" 0 z-2)
-          (p "resp" 1 z-3) (p "resp" "n2" z-3 n2-0)
-          (p "resp" "n1" z-3 n1) (p "resp" "b" z-3 b)
-          (p "resp" "a" z-3 a) (prec z z-2) (prec z-3 z-1)
-          (str-prec z z-1) (str-prec z-1 z-0)
-          (str-prec z-2 z-3))))))
-\end{verbatim}
-\caption{Initiator Shape Analysis Sentence}\label{fig:ns sas}
-\end{figure}
-
-A shape analysis sentences asserts that either a realized skeleton
-does not satisfy its antecedent or it satisfies one or more of the
-disjuncts in its conclusion.  {\cpsa} has been designed so that this
-assertion is true.  Therefore, every shape analysis sentence is true
-in all executions.
-
-A security goal is true in all executions if it can be derived from a
-shape analysis sentence~\cite{Ramsdell12}.  {\cpsa} comes with a
-Prolog program that translates shape analysis sentences into Prover9
-syntax~\cite{prover9}.  Prover9 can then be used to perform the
-required theorem-proving.
-
-In practice, theorem-proving using shape analysis sentences is rarely
-employed.  It's clumsy and it requires too much expertise.  The main
-use of \texttt{cpsasas} is for generating a formula that is edited to
-become a desired security goal.
-
-\bibliography{cpsa}
-\bibliographystyle{plain}
-
-\end{document}
diff --git a/doc/cpsaintroslides.pdf b/doc/cpsaintroslides.pdf
deleted file mode 100644
Binary files a/doc/cpsaintroslides.pdf and /dev/null differ
diff --git a/doc/cpsaintroslides.tex b/doc/cpsaintroslides.tex
deleted file mode 100644
--- a/doc/cpsaintroslides.tex
+++ /dev/null
@@ -1,395 +0,0 @@
-\documentclass[landscape]{slides}
-\usepackage{mitreslides}
-\usepackage{amssymb}
-\usepackage{amsmath}
-\usepackage{color}
-\usepackage{graphicx}
-\usepackage{alltt}
-\usepackage{url}
-%\usepackage{hyperref}
-
-\newcommand{\cpsa}{CPSA}
-\DeclareMathOperator{\domm}{\mathit{dom}}
-\newcommand{\cn}[1]{\ensuremath{\mathop{\relax
-                    \smash{\sf#1}}\!\mathop{\vphantom{#1}}\nolimits}}
-\newcommand{\dom}[1]{\ensuremath{\mathop{\relax
-                    \smash{\rm#1}}\!\mathop{\vphantom{#1}}\nolimits}}
-\newcommand{\fn}[1]{\ensuremath{\mathop{\relax
-                    \smash{\it#1}}\!\mathop{\vphantom{#1}}\nolimits}}
-\newcommand{\termalg}{\ensuremath{\mathfrak T}}
-\newcommand{\mesgalg}{\ensuremath{\mathfrak A}}
-\newcommand{\tr}{\ensuremath{\mathfrak C}}
-\newcommand{\ints}{\ensuremath{\mathbb Z}}
-\newcommand{\bundle}{\ensuremath{\mathcal{B}}}
-\newcommand{\nterm}[1]{\ensuremath{\langle\mathit{#1}\rangle}}
-\newcommand{\nterms}[1]{\ensuremath{\nterm{#1}^\ast}}
-\newcommand{\ntermp}[1]{\ensuremath{\nterm{#1}^+}}
-\newcommand{\ntermo}[1]{#1$^?$}
-\newcommand{\enc}[2]{\{\!|#1|\!\}_{#2}}
-\newcommand{\invk}[1]{{#1}^{-1}}
-\newcommand{\pubk}[1]{K_{#1}}
-\newcommand{\privk}[1]{K^{-1}_{#1}}
-\newcommand{\eqq}{\stackrel{?}{=}}
-\newcommand{\hash}[1]{\#(#1)}
-\newcommand{\inbnd}{\mathord -}
-\newcommand{\outbnd}{\mathord +}
-\newcommand{\cert}{\mathsf{cert}}
-\newcommand{\valid}{\mathsf{valid}}
-\newcommand{\data}{\mathsf{data}}
-\newcommand{\says}{\mathbin{\mathrm{says}}}
-\DeclareMathOperator{\ok}{\mathit{ok}}
-\DeclareMathOperator{\id}{\mathit{id}}
-\DeclareMathOperator{\resource}{\mathit{resource}}
-\DeclareMathOperator{\approved}{\mathit{approved}}
-\DeclareMathOperator{\ask}{\mathit{ask}}
-\DeclareMathOperator{\meas}{\mathit{meas}}
-\DeclareMathOperator{\verifier}{\mathit{verifier}}
-\DeclareMathOperator{\auth}{\mathit{auth}}
-\DeclareMathOperator{\epca}{\mathit{epca}}
-\DeclareMathOperator{\ltk}{\mathsf{ltk}}
-\newcommand{\ctosa}{\enc{R,A,K}{K_S}}
-\newcommand{\stova}{\enc{S,A,R,N_S}{K_V}}
-\newcommand{\ptova}{\enc{\cert,A,I,E}{\invk{K}_E}}
-\newcommand{\vtosa}{\enc{N_V,J,V,N_S,M}{K_S}}
-\newcommand{\stoca}{\enc{N_V,J,V,M}{K}}
-\newcommand{\ctoaa}{\enc{S, N_V,J,V,M,R}{\ltk(A,A)}}
-\newcommand{\atoca}{\enc{K',N_V,B}{\ltk(A,A)}}
-\newcommand{\blob}{\enc{K',S,J_O,M,P,
-\enc{\hash{\hash{A,V,N_V,J_O},M,P}}{\invk{}}}{K_V}}
-\newcommand{\vtosb}{\enc{\valid,N_S,K'}{K_S}}
-\newcommand{\stocb}{\enc{\data,D}{K'}}
-\newcommand{\seq}[1]{\langle#1\rangle}
-\newcommand{\append}{\mathbin{{}^\frown}}
-\newcommand{\flow}[3]{\ensuremath{#1,#2\rhd#3}}
-\newcommand{\infer}[2]{\begin{array}{c}#1\\\hline#2\end{array}}
-\newcommand{\inferb}[2]{\begin{array}[b]{c}#1\\\hline#2\end{array}}
-\newcommand{\infertwo}[3]{\inferb{#1\quad#2}{#3}}
-\newcommand{\termat}{\mathbin{@}}
-\newcommand{\all}[1]{\forall#1\mathpunct{.}}
-\newcommand{\some}[1]{\exists#1\mathpunct{.}}
-\newcommand{\idsigma}{\sigma_{\mathrm{id}}}
-
-\newenvironment{zitemize}
-{\begin{itemize}
-\setlength{\itemsep}{0em}
-\setlength{\topsep}{0em}
-\setlength{\partopsep}{0em}
-\setlength{\parsep}{0em}
-\setlength{\parskip}{0em}}%
-{\end{itemize}}
-
-\begin{document}
-
-\begin{titleslide}{Symbolic Cryptographic Protocol \\ Analysis using CPSA}
-%
-John D.~Ramsdell\\
-~\\
-The MITRE Corporation\\
-~\\
-October 2012
-\end{titleslide}
-
-\begin{mitreslide}{Cyptographic Protocol Shapes Analyzer}
-\begin{description}
-\item [Goal:] Protocol analysis using Dolev-Yao model
-\item [Foundation:] Strand Spaces
-\item [Distribution:] \url{http://hackage.haskell.org/package/cpsa}
-\item [Contributors:]
-  Joshua D. Guttman, John D. Ramsdell, Jon C. Herzog, Shaddin
-  F. Doghmi, F. Javier Thayer, Paul D. Rowe, and Moses D. Liskov
-\end{description}
-\end{mitreslide}
-
-\begin{note}
-  Pages of this form attempt to fill in the spoken part of a
-  class using these slides.
-
-  The Cryptographic Protocol Shapes Analyzer ({\cpsa}) attempts to
-  enumerate all essentially different executions possible for a
-  cryptographic protocol. We call them the \emph{shapes} of the
-  protocol. Naturally occurring protocols have only finitely many,
-  indeed very few shapes. Authentication and secrecy properties are
-  easy to determine from them, as are attacks and anomalies.
-
-  This presentation gives a very brief tour of the tool and how it is
-  used in practice.
-\end{note}
-
-\begin{mitreslide}{Anatomy of a CPSA Installation}
-\begin{zitemize}
-\item Programs
-\begin{zitemize}
-\item \texttt{cpsa}: main analysis tool
-\item \texttt{cpsashapes}: extracts shapes from \texttt{cpsa} output
-\item \texttt{cpsagraph}: visualize output using XHTML and SVG
-\item \texttt{cpsadiff}: compare two \texttt{cpsa} output files
-\item \texttt{cpsaannotations}: support rely-guarantee method
-\item \texttt{cpsasas}: produce shape analysis sentences
-\item \texttt{cpsapp}: pretty print input and output
-\item Build tools: GNU makefile template and a Haskell script
-\end{zitemize}
-\item Documentation
-\begin{zitemize}
-\item User documentation: user guide, primer, and overview
-\item Sample input: Needham-Schroeder, Blanchet, Woo-Lam, Otway-Rees,
-  Yahalom, ffgg
-\end{zitemize}
-\end{zitemize}
-\end{mitreslide}
-
-\begin{note}
-  Although there are many programs in the {\cpsa} package, typical
-  usage is very simple.
-\end{note}
-
-\begin{mitreslide}{Using CPSA}
-\begin{itemize}
-\item With a text editor, user enters a description of a
-\begin{zitemize}
-\item protocol as a set of roles
-\item problem point-of-view\\ (what is assumed to have happened)
-\end{zitemize}
-\item User runs the tool (\texttt{\$ echo build | ghci Make.hs} \\
-  or on Windows, click on \texttt{Make.hs} and type \texttt{build})
-\item In a web browser, user views the output that shows
-\begin{zitemize}
-\item what else CPSA inferred must have happened, or
-\item all CPSA steps used to produce the answers
-\end{zitemize}
-\end{itemize}
-\end{mitreslide}
-
-\begin{note}
-  At this point, if you have not already done so, follow the
-  instructions in \url{index.html} and analyze the examples.  The rest
-  of these slides will focus on Blanchet's ``Simple Example
-  Protocol'', so open \url{blanchet.xhtml}.  Click on
-  Derivation Tree 9.
-\end{note}
-
-\begin{mitreslide}{Blanchet's ``Simple Example Protocol''}
-$$\begin{array}{r@{{}\colon{}}l}
-A\to B&\enc{\enc{S}{\privk{A}}}{\pubk{B}}\\
-B\to A&\enc{D}{S}
-\end{array}$$
-\begin{center}
-CPSA Style Roles \\[2ex]
-\begin{tabular}{c}
-Initiator ($\fn{init}$ role)\\[3ex]
-\includegraphics{blanchet-0.mps}
-\end{tabular}\hfil
-\begin{tabular}{c}
-Responder ($\fn{resp}$ role)\\[3ex]
-\includegraphics{blanchet-1.mps}
-\end{tabular}\\[3ex]
-\end{center}
-\end{mitreslide}
-
-\begin{note}
-  Blanchet's protocol has two steps.
-  Alice sends to Bob a freshly generated symmetric key~$S$ signed with Alice's
-  private key~$\privk{A}$ and then encrypted with Bob's public
-  key~$\pubk{B}$.  Bob sends data~$D$ encrypted with the symmetric key.
-
-  Locate the description of the protocol in \url{blanchet.xhtml} in
-  the third derivation tree.
-\end{note}
-
-\begin{mitreslide}{Blanchet Protocol in CPSA}
-\begin{quote}
-\begin{verbatim}
-(defprotocol blanchet basic
-  (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace
-     (send (enc (enc s (privk a)) (pubk b)))
-     (recv (enc d s))))
-  (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace
-     (recv (enc (enc s (privk a)) (pubk b)))
-     (send (enc d s)))))
-\end{verbatim}
-\end{quote}
-\end{mitreslide}
-
-\begin{note}
-  Locate the description of scenario in \url{blanchet.xhtml} in
-  Derivation Tree 9.
-\end{note}
-
-\begin{mitreslide}{Blanchet Problem Statement}
-\begin{itemize}
-\item Analyze from the point-of-view of a full length responder
-\item Assume $\privk{A}$ and $\privk{B}$ are uncompromised
-\item Assume symmetric key~$S$ is freshly generated
-\hfill\raisebox{0ex}[0ex]{\includegraphics{blanchet-5.mps}}
-\end{itemize}
-\begin{quote}
-\begin{verbatim}
-(defskeleton blanchet
-  (vars (a b name) (s skey) (d data))
-  (defstrand resp 2 (a a) (b b) (s s) (d d))
-  (non-orig (privk a) (privk b))
-  (uniq-orig s))
-\end{verbatim}
-\end{quote}
-\end{mitreslide}
-
-\begin{note}
-  {\cpsa} takes one step to find the shape associated with the scenario.
-  Locate the shape for the scenario in this derivation tree.
-\end{note}
-
-\begin{mitreslide}{Blanchet Shape}
-\begin{quote}
-\begin{alltt}
-(defskeleton blanchet
-  (vars (d data) (a b \textcolor{blue}{b-0} name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (defstrand init 1 (a a) (b \textcolor{blue}{b-0}) (s s))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig s)
-  ...)
-\end{alltt}
-\end{quote}
-\end{mitreslide}
-
-\begin{note}
-  Observe that the responder role variable \texttt{b} maps to skeleton
-  variable \texttt{b}, but the initiator role variable \texttt{b} maps
-  to skeleton variable \texttt{b\_0}.  The two strands disagree on
-  Bob's identity when agreement is expected.  The dotted line in
-  Skeleton 10 indicates the message transmitted differs from the one sent.
-
-  In the next slide, the traces show the implication of the
-  disagreement on the instantiations of variable \texttt{b}.
-\end{note}
-
-\begin{mitreslide}{Blanchet Shape with Traces}
-\begin{quote}
-\begin{alltt}
-(defskeleton blanchet
-  (vars (d data) (a b \textcolor{blue}{b-0} name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (defstrand init 1 (a a) (b \textcolor{blue}{b-0}) (s s))
-  ...
-  (traces
-    ((recv (enc (enc s (privk a)) (pubk b)))
-     (send (enc d s)))
-    ((send (enc (enc s (privk a)) (pubk \textcolor{blue}{b-0})))))
-  ...)
-\end{alltt}
-\end{quote}
-\end{mitreslide}
-
-\begin{mitreslide}{Blanchet Shape}
-\begin{center}
-\includegraphics{blanchet-4.mps}
-\end{center}
-\begin{quote}
-\begin{alltt}
-(defskeleton blanchet
-  (vars (d data) (a b \textcolor{blue}{b-0} name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (defstrand init 1 (a a) (b \textcolor{blue}{b-0}) (s s))
-  (precedes ((1 0) (0 0)))
-  ...)
-\end{alltt}
-\end{quote}
-\end{mitreslide}
-
-\begin{note}
-  The operation field describes the authentication test that was
-  solved to produce the shape.  Authentication tests are introduced in
-  \url{cpsaprimer.pdf}.
-\end{note}
-
-\begin{mitreslide}{Blanchet Shape with Operation}
-\begin{quote}
-\begin{alltt}
-(defskeleton blanchet
-  (vars (d data) (a b \textcolor{blue}{b-0} name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (defstrand init 1 (a a) (b \textcolor{blue}{b-0}) (s s))
-  ...
-  (operation
-    encryption-test       ; Authentication test type
-    (added-strand init 1) ; Regular augmentation
-    (enc s (privk a))     ; Critical message
-    (0 0))                ; Test node
-  ...)
-\end{alltt}
-\end{quote}
-\end{mitreslide}
-
-\begin{note}
-  The operation field explains why {\cpsa} produced strands that do
-  not agree on the identity of \texttt{b}.  The critical message does
-  not refer to it, so there is nothing that forces agreement.
-
-  Navigate to Derivation Tree 23 in \url{blanchet.xhtml}.
-\end{note}
-
-\begin{mitreslide}{Corrected Blanchet Example Protocol}
-$$\begin{array}{r@{{}\colon{}}l}
-A\to B&\enc{\enc{S,B}{\privk{A}}}{\pubk{B}}\\
-B\to A&\enc{D}{S}
-\end{array}$$
-\begin{center}
-CPSA Style Roles \\[2ex]
-\begin{tabular}{c}
-Initiator ($\fn{init}$ role)\\[2ex]
-\includegraphics{blanchet-2.mps}
-\end{tabular}\hfil
-\begin{tabular}{c}
-Responder ($\fn{resp}$ role)\\[2ex]
-\includegraphics{blanchet-3.mps}
-\end{tabular}\\[3ex]
-\end{center}
-\end{mitreslide}
-
-\begin{mitreslide}{Corrected Blanchet Protocol in CPSA}
-\begin{quote}
-\begin{alltt}
-(defprotocol blanchet-fixed basic
-  (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace
-     (send (enc (enc s \textcolor{blue}{b} (privk a)) (pubk b)))
-     (recv (enc d s))))
-  (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace
-     (recv (enc (enc s \textcolor{blue}{b} (privk a)) (pubk b)))
-     (send (enc d s)))))
-\end{alltt}
-\end{quote}
-\end{mitreslide}
-
-\begin{note}
-  The corrected protocol ensures the critical message refers to
-  \texttt{b}.  As a result, {\cpsa} infers the desired agreement.
-\end{note}
-
-\begin{mitreslide}{Corrected Blanchet Shape}
-\begin{quote}
-\begin{alltt}
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (defstrand init 1 (a a) (b b) (s s))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig s)
-  (operation encryption-test
-    (added-strand init 1)
-    (enc s \textcolor{blue}{b} (privk a))   ; Critical message
-    (0 0))
-  ...)
-\end{alltt}
-\end{quote}
-\end{mitreslide}
-
-\end{document}
diff --git a/doc/cpsamanual.pdf b/doc/cpsamanual.pdf
new file mode 100644
Binary files /dev/null and b/doc/cpsamanual.pdf differ
diff --git a/doc/cpsaoverview.pdf b/doc/cpsaoverview.pdf
deleted file mode 100644
Binary files a/doc/cpsaoverview.pdf and /dev/null differ
diff --git a/doc/cpsaoverview.tex b/doc/cpsaoverview.tex
deleted file mode 100644
--- a/doc/cpsaoverview.tex
+++ /dev/null
@@ -1,343 +0,0 @@
-\documentclass[12pt]{article}
-\usepackage{alltt}
-\usepackage{url}
-
-\newcommand{\cpsacopying}{\begingroup
-  \renewcommand{\thefootnote}{}\footnotetext{{\copyright} 2009 The
-    MITRE Corporation.  Permission to copy without fee all or part of
-    this material is granted provided that the copies are not made or
-    distributed for direct commercial advantage, this copyright notice
-    and the title of the publication and its date appear, and notice
-    in given that copying is by permission of The MITRE
-    Corporation.}\endgroup}
-
-\newcommand{\nterm}[1]{\ensuremath{\langle\mathit{#1}\rangle}}
-\newcommand{\nterms}[1]{\ensuremath{\nterm{#1}^\ast}}
-\newcommand{\ntermp}[1]{\ensuremath{\nterm{#1}^+}}
-\newcommand{\ntermo}[1]{#1$^?$}
-
-\title{CPSA Overview}
-\author{John D.~Ramsdell\qquad Joshua D.~Guttman\\ The MITRE Corporation}
-
-\begin{document}
-\maketitle
-\cpsacopying
-
-Enclosed is a brief overview of CPSA, along with a description of
-CPSA's support for the rely-guarantee
-method~\cite{GuttmanEtAl04,RamsdellEtAl09}.  The message terms
-\nterm{term} used by CPSA are a straightforward representation of
-terms using Lisp-style, prefix notation.
-
-A subset of the terms are called {\em atoms}. Atoms belong to the {\em
-  base sorts} \texttt{name, text, data, skey, akey}.  Syntactically,
-atomic terms may be either symbols (i.e., identifiers) or
-atomic-sorted function applications such as \texttt{(pubk~a)}.  Even
-though an atom as a term may have terms within it, a receiver of an
-atom is not allowed to extract terms that occur in it.  This reflects
-the fact that the reception of the atom \texttt{(invk~k)}, the inverse
-of some asymmetric key~\texttt{k}, does not allow the receiver to
-construct~\texttt{k}.
-
-Non-atomic terms are constructed by applications of encryption
-(\texttt{enc}), hashing (\texttt{hash}), and pairing (\texttt{cat}),
-where $n$-ary concatenation is parsed right-associatively.  The second
-argument of an encryption is the key. Encryption may also be written
-in an $n$-ary form where the last argument is the key and the
-arguments preceding it are implicitly concatenated.  Hashing also may
-written in an $n$-ary form and its arguments are implicitly concatenated.
-
-A term carries one of its subterms if the possession of the right set
-of keys allows the extraction of the subterm.  The carries relation is
-the least relation such that (1)~$t$ carries~$t$, (2)~\texttt{(enc
-  $t_0$ $t_1$)} carries~$t$ if~$t_0$ carries~$t$, and (3)~\texttt{(cat
-  $t_0$ $t_1$)} carries~$t$ if~$t_0$ or~$t_1$ carries~$t$.  Note that
-\texttt{(enc $t_0$ $t_1$)} does not carry~$t_1$ unless (anomalously)~$t_0$
-carries~$t_1$.
-
-\section{Protocols}
-
-A protocol is a set of roles.
-\begin{quote}
-\begin{alltt}
-(defprotocol \nterm{sym} basic \ntermp{role})
-\end{alltt}
-\end{quote}
-The symbol \nterm{sym} names the protocol.  The symbol \texttt{basic}
-identifies the term algebra used to specify messages in roles.
-
-A role has the form:
-\begin{quote}
-\begin{alltt}
-(defrole \nterm{sym} (vars \nterms{decl})
-\quad (trace \ntermp{event})
-\quad \ntermo{(non-orig \nterms{non})}
-\quad \ntermo{(pen-non-orig \nterms{non})}
-\quad \ntermo{(uniq-orig \nterms{atom})}
-\quad \nterm{annos})
-
-\nterm{non} ::= \nterm{atom} | (\nterm{height} \nterm{atom})
-\end{alltt}
-\end{quote}
-Non-terminal \nterm{sym} is an S-expression symbol that names the
-role.  A \nterm{decl} is a list of variable symbols followed by a sort
-symbol.  The \texttt{trace} is a sequence of message events, each
-indicating a message to be transmitted or received.  The syntax used
-for a message event \nterm{event} has
-one of two forms, \texttt{(send \nterm{term})} or \texttt{(recv
-  \nterm{term})}.  The length of a role is the length of its trace,
-and must be positive.  The remaining components of a role will be
-described later.
-
-A term originates in a trace if it is carried in some event
-and the first event in which it is carried is a sending term.
-A term is acquired by a trace if it first occurs in a receiving term
-and is also carried by that term.
-
-\section{Executions}
-
-An execution of a protocol may involve any number of strands, each
-conveying either regular or adversarial behavior.  Thus, each strand
-is an instance of some role.  For CPSA input and output, a strand is
-specified by the following form:
-\begin{quote}
-\begin{alltt}
-(defstrand \nterm{sym} \nterm{int} \nterms{maplet})
-\end{alltt}
-\end{quote}
-The symbol names the role, \nterm{int} is the height which must be
-positive and no greater than the role's length, and the remainder
-determines a substitution from role variables to terms.
-\begin{quote}
-\begin{alltt}
-\nterm{maplet} ::= (\nterm{sym} \nterm{term})
-\end{alltt}
-\end{quote}
-The trace associated with the specified behavior is the result of
-truncating the role's trace so it agrees with the height, and applying
-the substitution \texttt{(\nterms{maplet})}.
-
-A strand's behavior includes inherited origination assumptions.  When
-a role assumes atom~$a$ is uniquely originating using the
-\texttt{uniq-orig} form, applying the substitution
-\texttt{(\nterms{maplet})} to $a$ produces an inherited uniquely
-originating atom.  A role atom assumed to be non-originating using the
-\texttt{non-orig} or \texttt{pen-non-orig} form is inherited
-similarly.  For a non-originating assumption, a strand height may be
-associated with an atom.  In this case, a non-originating assumption
-is inherited by strands that meet or exceed the height constraint.
-Note that the definition of a uniquely originating atom and a
-non-originating atom in an execution is still to come.  Also, the two
-flavors of non-origination assumptions have yet to be described.
-
-A strand in an execution is identified by a natural number.  To
-describe an execution, the behavior of each participant is listed
-sequentially, and position of the \texttt{defstrand} form in the list
-determines the strand's identifier.  Zero-based indexing is used,
-so zero identifies the first strand.
-
-A messaging event in an execution occurs at a node, which is a pair of
-natural numbers.  The first number is the strand's identifier.  The
-second number is the position of an event in the trace of the
-strand, once again using zero-based indexing.  Thus node \texttt{(1~1)}
-in
-\begin{quote}
-\begin{alltt}
-(defstrand r1 3 (a b) (b a))
-(defstrand r2 2 (x a) (y a) (z b))
-\end{alltt}
-\end{quote}
-names the last event in the last strand.  The term is the
-result of instantiating the second event in role \texttt{r2}'s
-trace using the substitution \texttt{((x a) (y a) (z b))}.
-
-Message exchanges are part of an execution.  Each exchange is
-described by a pair of nodes.  The first node must name a sending
-term, and the second node must name a receiving term.  In an
-execution, the two terms are the same.  Furthermore, for each
-receiving term in a strand's trace, there is a unique node that
-transmits its term.  In other words, all message receptions are
-explained by transmissions within the execution.
-
-In an execution, a \emph{uniquely originating atom} originates in the
-trace of exactly one strand.  An inherited uniquely originating atom
-must originate in the trace of its strand.  CPSA uses uniquely
-originating atoms to model freshly generated nonces used in many
-protocols.
-
-A \emph{non-originating atom} is carried by no trace of any strand in
-an execution, and it or its inverse is the key of an encryption in one
-of those traces.  The inherited non-origination atoms must satisfy
-this property too.
-
-Strands in executions represent both adversarial and non-adversarial
-behaviors.  A strand that is an instance of a protocol role is
-non-adversarial, and is called regular.  A strand that represents
-adversarial behavior is called a penetrator strand.
-
-The roles that define adversary behavior codify the basic abilities
-that make up the Dolev-Yao model.  They include transmitting an atom
-such as a name or a key; transmitting a tag; transmitting an encrypted
-message after receiving its plain text and the key; and transmitting a
-plain text after receiving ciphertext and its decryption key.  The
-adversary can also concatenate two messages, or separate the pieces of
-a concatenated message.  Since a penetrator strand that encrypts or
-decrypts must receive the key as one of its inputs, keys used by the
-adversary---compromised keys---have always been transmitted by some
-strand. The basic adversary roles are built into CPSA.
-
-A \emph{penetrator non-originating atom} may be carried, and it or its
-inverse must occur in some trace.  The inherited penetrator
-non-origination atoms must satisfy this property too.  A penetrator
-non-originating assumption asserts that the adversary is not allowed
-to originate the atom.
-
-\section{Skeletons}
-
-CPSA never directly represents adversarial behavior.  Instead, a
-skeleton is used.  A skeleton represents regular behavior that might
-make up part of an execution. A skeleton is specified in CPSA output using a
-\texttt{defskeleton} form.
-\begin{quote}
-\begin{alltt}
-(defskeleton \nterm{sym} (vars \nterms{decl})
-\quad \ntermp{defstrand}
-\quad \ntermo{(precedes \nterms{pair})}
-\quad \ntermo{(non-orig \nterms{atom})}
-\quad \ntermo{(pen-non-orig \nterms{atom})}
-\quad \ntermo{(uniq-orig \nterms{atom})})
-\end{alltt}
-\end{quote}
-The symbol names the protocol used by its participants.  The regular
-strands are specified as they are in an execution.  The precedes form
-defines a binary relation on nodes (\texttt{\nterm{pair} ::=
-  (\nterm{node} \nterm{node})}).  As in an execution, the first node
-names a sending term and the second term names a receiving term.
-Unlike an execution, the pair of nodes in the relation need not agree
-on their message term.  Two nodes are related if the sending event
-precedes the reception reception event, as an execution it represents
-may include events in between.
-
-The final three additional components of a skeleton are a set of
-non-originating atoms, a set of penetrator non-originating atoms, and
-a set of uniquely originating atoms.  To be a skeleton, each uniquely
-originating atom must originate in at most one strand in the skeleton,
-and each non-originating atom must never be carried by some event in
-the skeleton and every variable that occurs in the atom must occur in
-some event, and every variable that occurs in each penetrator
-non-originating atom must occur in some event.  Furthermore, for each
-uniquely originating atom that originates in the skeleton, the node
-relation must ensure that reception nodes that carry the atom follow
-the node of its origination.
-
-One special skeleton is associated with each execution.  It summarizes
-the regular behavior of the execution.  It is derived from the
-execution by enriching its node relation to contain all node orderings
-implied by transitive closure, deleting all strands and nodes that
-refer to penetrator behavior, and then performing the transitive
-reduction on the resulting node relation.  The set of uniquely
-originating atoms is the set of terms that originate on exactly one
-strand in the execution, and are carried in a term of a regular
-strand.  The set of non-originating atoms is the union of two sets.
-One set contains each term that is used as an encryption or decryption
-key in some term in the execution, but is not carried by any term.
-The other set contains the terms specified by non-origination
-assumptions in roles.  If a realized skeleton instance maps all of the
-variables that occur in one of its non-originating role terms, the
-mapped term is a member of the skeleton's set of non-originating
-terms.  A skeleton is \emph{realized} if it summarizes the behavior of
-some execution.
-
-\subsection{Preskeletons}
-
-Preskeletons are used to pose problems for CPSA to solve.  A
-preskeleton is similar to a skeleton except atoms assumed to uniquely
-originate may originate in more than one strand, and the node relation
-need not ensure that reception nodes that carry the atom follow some
-node of origination.  Experience has shown that it is more natural to
-specify some problems in a form that doesn't satisfy all the
-properties of a skeleton.  If CPSA cannot immediately convert its
-input into a skeleton, an error is signal.  With the exception of the
-restatement of the original problem, all preskeletons printed by CPSA
-are skeletons.  A problem statement is called a \emph{scenario}, and
-the converted skeleton is called the \emph{scenario skeleton}.
-
-\subsection{Shapes}
-
-Given a scenario skeleton, CPSA determines whether there is an execution
-containing the strands in the skeleton, and satisfying its
-origination assumptions.  Usually an execution contains additional
-regular strands, as well as adversary behavior.  A major part of what
-CPSA does is to find all additional regular strands that are necessary
-to extend the scenario to an execution---a realized skeleton.  If a
-realized skeleton is most-general, in the sense that there is no other
-realized skeleton that can be instantiated to it by merging nodes or
-atoms, then it is called a {\em shape}. CPSA finds all shapes for a
-scenario.
-
-\section{Listeners}
-
-In addition to the roles specified in a protocol, for each term~$t$, a
-regular strand may be an instance of a so-called {\em listener} role
-with the trace \texttt{(recv~$t$) (send~$t$)}.  There are no
-non-originating or uniquely originating atoms associated with a
-listener role.  Listener behavior is specified with:
-\begin{quote}
-\begin{alltt}
-(deflistener \nterm{term})
-\end{alltt}
-\end{quote}
-
-A listener strand is used in a skeleton to assert that a term~$t$ is
-derivable by the adversary, unprotected by encryption.  Hence it is used
-to test for compromise of a term.  The term is protected if the
-resulting skeleton is unrealizable.  Otherwise, CPSA will find a shape
-that shows how the adversary accesses~$t$.
-
-\section{Annotations}
-
-To be analyzed, each role in a protocol must include an
-\texttt{annotations} form, as defined in Table~\ref{tab:anno}.  The
-\nterm{term} just after the \texttt{annotations} symbol is a role atom
-that, when instantiated, is the principal associated with the strand in
-the shape.  A principal may be a key.
-
-\begin{table}
-\begingroup\ttfamily
-\begin{tabular}{rcl}
-\nterm{annos}&$::=$
-&(annotations \nterm{term} (\nterm{int} \nterm{form})$^\ast$)
-\\ \nterm{form}&$::=$&(\nterm{sym} \nterms{fterm}) | (not \nterm{form})
-\\ &|& (and \nterms{form}) | (or \nterms{form})
-\\ &|& (implies \nterms{form} \nterm{form})
-\\ &|& (iff \nterm{form} \nterm{form})
-\\ &|& (says \nterm{term} \nterm{form})
-\\ &|& (forall (\nterms{decl}) \nterm{form})
-\\ &|& (exists (\nterms{decl}) \nterm{form})
-\\ \nterm{fterm}&$::=$&\nterm{term} | (\nterm{sym} \nterms{fterm})
-\end{tabular}
-\endgroup
-\caption{Annotation Syntax}\label{tab:anno}
-\end{table}
-
-What follows is sequences of pairs.  The integer gives the position of
-the event in the trace that is annotated by the formula, using
-zero-based indexing.  Thus, each formula is associated with a node.
-Nodes for which no formula is specified are implicitly defined to be
-the trivial formula \texttt{(and)} for truth.  Use \texttt{(or)} for
-falsehood.
-
-The language of formulas is first-order logic extended with a modal
-``says'' operator. Formula terms may include function symbols that are not
-part of a protocol's message signature.
-
-On output, each shape contains an \texttt{annotations} form and an
-\texttt{obligations} form. The annotations form presents every
-non-trivial formula derived from the protocol. The obligations form
-presents every non-trivial formula that must be true if the shape is
-sound.
-
-\bibliography{cpsa}
-\bibliographystyle{plain}
-
-\end{document}
diff --git a/doc/cpsaprimer.pdf b/doc/cpsaprimer.pdf
deleted file mode 100644
Binary files a/doc/cpsaprimer.pdf and /dev/null differ
diff --git a/doc/cpsaprimer.tex b/doc/cpsaprimer.tex
deleted file mode 100644
--- a/doc/cpsaprimer.tex
+++ /dev/null
@@ -1,1291 +0,0 @@
-\documentclass[12pt]{article}
-\usepackage{amssymb}
-\usepackage{amsmath}
-\usepackage{url}
-\usepackage{graphicx}
-\usepackage{makeidx}
-\usepackage{alltt}
-\input{macros}
-
-\makeindex
-
-\title{CPSA Primer}
-\author{John D.~Ramsdell\qquad Joshua D.~Guttman\\
-  The MITRE Corporation\\ CPSA Version \version}
-
-\begin{document}
-\maketitle
-\cpsacopying
-
-\tableofcontents
-
-\listoffigures
-
-\listoftables
-
-\newpage
-
-\section{Introduction}
-
-\begin{sloppypar}
-Analyzing a cryptographic protocol means finding out what security
-properties---essentially, authentication and secrecy properties---are
-true in all its possible executions.  Protocol analysis is hard
-because an adversary can often manipulate the regular, law-abiding
-participants.  The adversary may be able to manipulate the regular
-participants into an unexpected execution, breaking a secrecy or
-authentication property that the protocol was intended to ensure.
-\end{sloppypar}
-
-{\cpsa}, The Cryptographic Protocol Shapes Analyzer, is a software
-tool.  Given a protocol definition and some assumptions about
-executions, it attempts to produce descriptions of all possible
-executions of the protocol compatible with the assumptions.
-Naturally, there are infinitely many possible executions of a useful
-protocol, since different participants can run it with varying
-parameters, and the participants can run it repeatedly.
-
-However, for many naturally occurring protocols, there are only
-finitely many of these runs that are essentially different.  Indeed,
-there are frequently very few, often just one or two, even in cases
-where the protocol is flawed.  We call these essentially different
-executions the \emph{shapes} of the protocol.  Authentication and
-secrecy properties are easy to ``read off'' from the shapes, as are
-attacks and anomalies.
-
-The purpose of this document is to provide the background required to
-make effective use of a {\cpsa} software distribution.  In particular,
-the advice in Section~\ref{sec:advice} is essential reading.
-
-The {\cpsa} program reads a sequence of problem descriptions, and
-prints the steps it used to solve each problem.  Each input problem
-contains some initial behavior, together with assumptions about some
-uncompromised keys and freshly chosen values.  {\cpsa} discovers what
-shapes are compatible with this problem description.  Normally, the
-initial behavior is a local run of one participant, so that the
-problem is to see what possible executions exist from that
-participant's ``point of view.''  The analysis reveals what the other
-participants must have done, given the first participant's view.
-
-The shapes analysis is performed within a pure Dolev-Yao
-model~\cite{DolevYao83}.  {\cpsa}'s search is based on a high-level
-algorithm that was claimed to be complete, i.e.\@ every shape can in
-fact be found in a finite number of
-steps~\cite{DoghmiGuttmanThayer07,Guttman11}.  Further theoretical
-work showed classes of executions that are not found by the algorithm,
-however it also showed that every omitted execution requires an
-unnatural interpretation of a protocol's roles.  Hence the algorithm
-is complete relative to natural role semantics.
-Appendix~\ref{sec:omitted executions} discusses omitted executions.
-
-\section{Overview}
-
-A {\cpsa} release includes several programs, an analyzer, and various
-tools used to interpret the results.  The analyzer, \texttt{cpsa},
-provides support for several algebras, one of which is the Basic
-Crypto Algebra.  Programs that assist in the interpretation of results
-are \texttt{cpsashapes} and \texttt{cpsagraph}.  The analyzer prints
-the steps it used to solve each problem.  The \texttt{cpsashapes}
-program extracts the shapes discovered by an analyzer run.  The
-\texttt{cpsagraph} program graphs both forms of output using Scalable
-Vector Graphics~(\textsc{svg}).  A standards-compliant browser such as
-FireFox or Safari displays the generated diagrams.
-
-The expected work flow follows.  An analysis problem is entered using
-an ordinary text editor, preferably one with support for Lisp syntax.
-Problem statement errors in the input are detected by running the
-analyzer.  Many error reports are of the form that allow editors such
-as Emacs to move its cursor to location of the problem.
-
-There are two classes of problem statement errors: syntax and semantic
-errors.  Correcting syntax errors is straightforward, but correcting
-semantic errors requires an understanding of the core data structures.
-Section~\ref{sec:semantic errors} describes their correction.
-
-Once the problem statement errors have been eliminated, the analyzer
-should produce useful output as a text document.  The text document
-contains each step used to derive a shape from a problem statement.
-It is common to filter the output using the \texttt{cpsashapes}
-program, and look only at the computed shapes associated with each
-problem statement.
-
-The \texttt{cpsagraph} program is applied to the output to produce a
-more readable, hyperlinked \textsc{xhtml} document that can be displayed
-in a standards-compliant web browser.  The {\cpsa} User Guide contains
-the up-to-date description of \texttt{cpsagraph} generated documents.
-The guide is also the place to find command-line usage information for
-all programs in a release.  The user guide is an \textsc{xhtml}
-document delivered with the software.
-
-The \texttt{cpsa} program uses S-expressions for both input and
-output.  S-expression is an abbreviation for a Symbolic Expression of
-Lisp fame, and is described in Appendix~\ref{sec:syntax reference}.
-
-The input may optionally start with a \texttt{herald} form.  The form
-contains a title for the run and an association list.  The association
-list allows options normally specified on the command line to be
-specified within an input file.  In the following example, the herald
-form specifies a strand bound of 12 in a way that is equivalent to the
-command line option \texttt{--bound=12}.
-
-\begin{quote}
-\begin{verbatim}
-(herald Needham-Schroeder (bound 12))
-\end{verbatim}
-\end{quote}
-
-The body of the input consists of two forms: protocol definitions and
-initial behavior descriptions.  The exact details of both forms depend
-on the message algebra specified by the protocol.  Protocols that
-specify \texttt{basic} as their algebra get an implementation of the
-Basic Crypto Algebra~(\textsc{bca}) described in the next section.  A
-complete grammar for \texttt{cpsa} input with \textsc{bca} protocols
-is displayed in Table~\ref{tab:syntax} on Page~\pageref{tab:syntax}.
-
-\section{BCA Messages}
-
-Each message exchanged in a protocol is represented by a term.  Terms
-represent atomic values such as text objects, principal names, and
-asymmetric and symmetric keys.  They also represent values composed
-from other values via encryption and concatenation.
-
-A sort system is used to classify terms. A {\cpsa} message algebra is
-an order-sorted algebra~\cite{GoguenMeseguer92} with restrictions,
-hence the use of the word sort instead of type.  Other aspects of
-{\cpsa}'s use of order-sorted algebras is beyond the scope of this
-paper.
-
-The sorts that correspond to the atomic values are the base
-sorts---for \textsc{bca} they are \fn{text}, \fn{data}, \fn{name},
-\fn{akey}, and \fn{skey}.  The non-base sort is
-\fn{mesg}.  Every term is of sort~\fn{mesg}, and every one of the
-other sorts is a subsort of~\fn{mesg}.\index{sort}
-
-The simplest term is a variable, which syntactically is a
-\textsc{symbol} as described in Appendix~\ref{sec:syntax reference}.
-Internally, each variable has a sort, so the sort of each variable in
-the input must be declared in a \texttt{vars} form, such as:
-$$\texttt{(vars (t text) (n name) (k akey))}.$$
-
-Asymmetric keys come in pairs related by the \texttt{invk}
-\index{operator}operator.  If~$t$ is a term of sort~\fn{akey}, so is
-$\texttt{(invk~}t\texttt{)}$.  Furthermore,
-$\texttt{(invk~(invk~}t\texttt{))}$ is equated with~$t$.  A name can
-be used to identify an asymmetric key pair using the \texttt{pubk} and
-\texttt{privk} operators, as in \texttt{(pubk~n)} and
-\texttt{(privk~n)}---the latter is interpreted as
-\texttt{(invk~(pubk~n))}.  A name may be associated with more than one
-key using the binary form of \texttt{pubk}, where the first argument
-is a quoted constant, as in
-\texttt{(pubk~"sig"~n)} and
-\texttt{(pubk~"enc"~n)}.
-Two names can be used to identify a long
-term symmetric key with the \texttt{ltk} operator.
-
-Terms formed from base sorted variables, and the operators
-\texttt{invk}, \texttt{pubk}, \texttt{privk}, and \texttt{ltk} are
-called atoms, because each one represents an atomic value.  A key
-property of an atom is that the receiver of an atom carried in a
-message term cannot decompose the atom into parts.  For example, the
-reception of a message that consists of the atom \texttt{(invk~k)}
-does not allow its receiver to deduce~\texttt{k}.  Within this
-document, S-expression syntax will often, for the sake of readability,
-be replaced by the traditional notation for terms.  Thus
-\texttt{(invk~k)} will be written as $K^{-1}$, and \texttt{(pubk~n)}
-as $K_{N}$.
-
-The terms in this algebra are freely generated from the atoms, tags,
-concatenation, encryption, and hashing.  A tag is a quoted constant.
-The concatenation of terms~$t$ and~$t'$ is~$t,t'$ in traditional infix
-notation and \texttt{(cat $t$ $t'$)} in S-expression syntax.  The
-comma operator is right associative and \texttt{(cat $a$ $b$ $c$ $d$)}
-is equivalent to \texttt{(cat $a$ (cat $b$ (cat $c$ $d$)))}.
-Given~$t$, the term to be protected, and key term~$k$, the encryption
-of~$t$ using~$k$ is~$\enc{t}{k}$ in traditional notation and
-\texttt{(enc $t$ $k$)} in S-expression syntax.  The term represents
-asymmetric encryption when the key is of sort \dom{akey}, otherwise it
-represents symmetric encryption.  Additionally, \texttt{(enc $a$ $b$
-  $c$ $d$ $k$)} is equivalent to \texttt{(enc (cat $a$ $b$ $c$ $d$)
-  $k$)}.  Given~$t$, the term to be hashed, its hash is $\hash{t}$ in
-traditional notation and \texttt{(hash $t$)} in S-expression syntax.
-{\cpsa} treats a hashed term as if it were an encryption in which the
-term that is hashed is the encryption key.  As with encryption,
-\texttt{(hash $a$ $b$ $c$ $d$)} is equivalent to \texttt{hash (cat $a$
-  $b$ $c$ $d$))}.  Figure~\ref{fig:ns responder} on
-Page~\pageref{fig:ns responder} contains examples of \textsc{bca}
-message terms.  Also see \textsc{term} in Table~\ref{tab:syntax},
-Appendix~\ref{sec:syntax reference}.
-
-A message term \emph{carries}\index{carries} a subterm of the message
-if the possession of the right set of keys allows the extraction of
-the subterm.  The carries relation is the least relation such that
-(1)~$t$ carries~$t$, (2)~$\enc{t_0}{t_1}$ carries~$t$ if~$t_0$
-carries~$t$, and (3)~$t_0,t_1$ carries~$t$ if~$t_0$ or~$t_1$
-carries~$t$.  As noted above, the message~$k^{-1}$ does not carry~$k$.
-Also,~$\enc{t}{k}$ does not carry~$k$ unless (anomalously)~$t$
-carries~$k$.
-
-\begin{figure}
-\begin{center}
-\includegraphics{cpsadiagrams-0.mps}\hfil
-\includegraphics{cpsadiagrams-1.mps}
-\caption{Needham-Schroeder Initiator and Responder Roles}
-\label{fig:ns roles}
-\end{center}
-\end{figure}
-
-\section{Protocols}
-
-A \index{protocol}\emph{protocol} defines the patterns of allowed
-behavior for non-adversarial participants.  In other words, the
-behavior of each participant must be an instance of some protocol
-template, called a \index{role}\emph{role.}  Figure~\ref{fig:ns roles}
-displays the roles that make up the Needham-Schroeder protocol.
-
-In S-expression syntax, a protocol is a named set of roles and is
-defined by the \texttt{defprotocol} form.  See \textsc{protocol} in
-Table~\ref{tab:syntax}, Appendix~\ref{sec:syntax reference}.
-\begin{center}
-\begin{tabular}{l}
-\verb|(defprotocol ns basic|\\
-\verb|  (defrole init| \ldots\texttt{)}\\
-\verb|  (defrole resp| \ldots\texttt{))}
-\end{tabular}
-\end{center}
-
-The name of this protocol (\textsc{id}) is \texttt{ns}, and the second
-identifier (\textsc{alg}) names the message algebra in use.  The
-identifier for the Basic Crypto Algebra is \texttt{basic}.
-
-A role has a name, a declared set of variables, and a trace that
-provides a template for the behavior of its instances.  A trace is a
-non-empty sequence of message events, either a message reception or a
-transmission.  An inbound\index{inbound} message with term~$t$
-is~$\inbnd t$ in text and \texttt{(recv $t$)} in S-expression syntax.
-An outbound\index{outbound} term is~$\outbnd t$ in text and
-\texttt{(send $t$)} in S-expression syntax.  The Needham-Schroeder
-responder's role in S-expression syntax is in Figure~\ref{fig:ns
-  responder}.
-
-% A linear representation of the Needham-Schroeder responder's trace
-% follows.
-% $$\fn{resp}_t=\inbnd\enc{N_1, A}{K_B}\Rightarrow \outbnd\enc{N_1,
-%  N_2}{K_A}\Rightarrow\inbnd \enc{N_2}{K_B}$$
-
-\begin{figure}
-\begin{quote}
-\begin{verbatim}
-(defrole resp (vars (b a name) (n2 n1 text))
-  (trace (recv (enc n1 a (pubk b)))
-         (send (enc n1 n2 (pubk a)))
-         (recv (enc n2 (pubk b)))))
-\end{verbatim}
-\end{quote}
-\caption{Needham-Schroeder Responder Role}
-\label{fig:ns responder}
-\end{figure}
-
-Zero-based indexing\index{zero-based indexing}\index{indexing,
-  zero-based} is used though out this document and in the source code
-it describes.  Within the document, a finite sequence is a function
-from an initial segment of the natural numbers.  Angle brackets are
-used for sequence construction.  Thus $\seq{3,2,99} = \{0\mapsto 3,
-1\mapsto 2, 2\mapsto 99\}$, and the responder's trace is
-$\seq{\inbnd\enc{N_1, A}{K_B}, \outbnd\enc{N_1,
-    N_2}{K_A},\inbnd\enc{N_2}{K_B}}.$ The length of a sequence~$x$ is
-$|x|$.  \nocite{Dijkstra82}
-
-A term \emph{originates}\index{origination} in a trace if it is
-carried in some event and the first term in which it is
-carried is an outbound term.  A term is
-\emph{acquired}\index{acquired} by a trace if it first occurs in an
-inbound term and is also carried by that term.
-
-Some atoms in a role have special properties.  An atom may be declared
-to be non-originating with the \texttt{non-orig} form or the
-\texttt{pen-non-orig} form and uniquely originating with the
-\texttt{uniq-orig} form.  The declarations make assertions about
-instances of a role, assertions that will be defined after role
-instantiation is explained.
-
-Every variable that occurs in each term declared to be non-originating
-must occur in some term in the trace, and the term must not be carried
-by any term in the trace.  Every variable that occurs in each term
-declared to be penetrator non-originating must occur in some term in
-the trace, but the term may be carried by some term in a trace.  Each
-term declared to be uniquely originating must originate in the trace.
-Each variable of sort \fn{mesg} must be acquired in the trace.
-
-\section{Executions}
-
-A protocol analysis problem is specified by a skeleton.  Some
-background information is presented before details of a problem
-specification is given.
-
-A skeleton describes a set of executions of a protocol.  They
-specify the local behavior of participants and their interactions via
-message-passing.  A definition of an execution is presented for the
-case in which protocols declare no terms to be non-originating or
-uniquely originating, and then is later amended.  The executions are a
-representation of the strand space notion of bundle.
-
-A strand\index{strand} represents a principal executing a single local
-session of a protocol role.  The sequence of events that
-describes the session is patterned after a prefix of its role's trace.
-In the context of a protocol, a strand's trace is represented by an
-\emph{instance}\index{instance}, a triple consisting of a role name, a
-height, and a map from role variables to terms.  The length of the
-described sequence is the instance's \emph{height}\index{height}, and
-must be positive and no greater than the length of the associated
-role's trace.  The map is the instance's
-\index{environment}\emph{environment.}  The domain of the map is the
-set of variables that occur in the events in the prefix of the
-role's trace of the same length as the instance's height.  \iffalse An
-instance is in $I=R\times\nat\times(X\rightarrow T)$.  \fi
-
-An example of an instance of the Needham-Schroeder responder role
-is:
-\begin{center}
-\texttt{(defstrand resp 2 (b a) (a b) (n1 n1) (n2 n2))}
-\end{center}
-The trace associated with this instance is:
-$$\seq{\inbnd\enc{N_1, B}{K_A}, \outbnd\enc{N_1,
-N_2}{K_B}}.$$
-
-The \emph{position}\index{position} of a event in the
-instance's trace is its index in the sequence, and in this example,
-the position of $\inbnd\enc{N_1, B}{K_A}$ is zero.
-
-In addition to a protocol, a component of an execution is a collection
-of local sessions.  An instance cannot be used to identify one
-session, because two principals may engage in the same pattern of
-message passing.  Instead, a sequence of instances is used as a
-component of an execution, and a \emph{strand} is represented by an
-index that selects an instance from the sequence.  In other words,
-each principal executing a local session is represented by a natural
-number less than the length of the sequence of instances, and its
-behavior is described by the instance found using its representation.
-
-A \emph{node}\index{node} is a pair of natural numbers that identifies
-an event within a sequence of instances.  The first integer is
-the strand, and the second is the position of the event within
-the strand's trace.  A node with an inbound term is a reception
-node\index{reception node}, and one with an outbound term is a
-\index{transmission node}transmission node.  Given a sequence~$i$, its
-nodes are: $$\{(s,p)\mid s<|i|, p<\cn{height}(i(s))\}.$$
-
-The remaining component of an execution is a binary relation between
-transmission nodes and reception nodes, where each pair of nodes in
-the relation agree on their message term.  The relation specifies
-message transmissions between strands.  The nodes of the graph
-associated with an execution are the nodes in the sequence of
-instances, and the edges include the ones in the relation.
-Additionally, the following strand succession edges\index{strand
-  succession edges} are included: $$\{((s,p), (s, p+1))\mid s<|i|,
-p+1<\cn{height}(i(s))\}.$$ Executions with cyclic graphs are omitted
-from consideration, because they violate causality.  The transitive
-irreflexive~$\prec$ is the transitive closure of the graph's edges,
-and $n_0\prec n_1$ asserts that the message event at~$n_0$ precedes
-the one at~$n_1$.
-
-The node relation of an execution satisfies one additional property.
-For each reception node in its sequence, there exists a unique
-transmission node, related to it by the communication ordering.  In
-other words, the relation must be a function.  Informally, this
-property ensures that every message reception is accounted for by the
-activity of a principal that is part of the execution.
-Figure~\ref{fig:ns intended} shows the intended execution of the
-Needham-Schroeder Protocol.  The node graph of an execution is a
-bundle.
-
-A set of runs of the protocol is associated with each execution.  A
-variable is associated with an execution if the variable occurs in the
-range of an environment in some instance.  To derive a run from an
-execution, a substitution that maps each variable associated with the
-execution to a ground term is applied to the execution.  {\cpsa}
-message algebras do not contain the constants required to name all the
-ground terms.  For most sorts, the identity of a particular ground
-term is irrelevant to the analysis.  Message tags are the only
-exception to this rule.  For this reason, {\cpsa} message algebras are
-free algebras, but not initial algebras.
-
-Strands in executions represent both adversarial and non-adversarial
-behaviors.  A strand that is an instance of a protocol role is
-non-adversarial, and is called \index{regular}\emph{regular.}  A
-strand that represents adversarial behavior is called a
-\emph{penetrator}\index{penetrator} strand.
-
-\begin{figure}
-\begin{center}
-\includegraphics{cpsadiagrams-2.mps}
-\end{center}
-\begin{quote}
-\begin{verbatim}
-(vars (n1 n2 text) (a b name))
-(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-(defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-(precedes ((0 0) (1 0)) ((1 1) (0 1)) ((0 2) (1 2)))
-\end{verbatim}
-\end{quote}
-\caption{Needham-Schroeder Intended Run}
-\label{fig:ns intended}
-\end{figure}
-
-The roles that define adversary behavior codify the basic abilities
-that make up the Dolev-Yao model.  They include transmitting an atom
-such as a name or a key; transmitting a tag; transmitting an encrypted
-message after receiving its plain text and the key; and transmitting a
-plain text after receiving ciphertext and its decryption key.  The
-adversary can also concatenate two messages, or separate the pieces of
-a concatenated message.  Since a penetrator strand that encrypts or
-decrypts must receive the key as one of its inputs, keys used by the
-adversary---compromised keys---have always been transmitted by some
-participant.
-
-Figure~\ref{fig:ns penetrated} shows a penetrated execution of the
-Needham-Schroeder Protocol.  Strand space theory would decompose the
-penetrator behavior into multiple strands; instead the description of
-the penetrator has been simplified by the use of an artificially
-constructed role~\fn{pen}.
-
-A \index{non-origination}\emph{non-originating term} is an atom
-that is carried by no message, and it or its inverse is the key of an
-encryption in some message.  Each non-originating term is a key that
-is not compromised, as the penetrator has no access to the key.
-
-A \index{penetrator non-origination}\emph{penetrator non-originating
-  term} is an atom that is forbidden from being originated on a
-penetrator strand in an execution.
-
-A \index{unique origination}\emph{uniquely originating term} is an
-atom that originates on exactly one strand in the execution.  The
-correct behavior of some protocols depends on the fact that its
-executions include only ones in which some terms are uniquely
-originating---each term's provenance is one node.  Implementations of
-these protocols can ensure unique origination of a term by freshly
-generating a nonce for the component of the message it represents.
-
-Occasionally, protocol roles designate some terms to be
-non-originating or uniquely originating.  Consider the prefix of the
-trace of a role associated with some instance.  When a uniquely
-originating role term is carried in the prefix, the instance's
-environment maps it to a term that must originate in the instance's
-strand.  Furthermore, when the variables in a non-originating role
-term occur in the prefix, the instance's environment maps that term to
-one that must not be carried by any message term in the execution.
-The mapping of a non-originating role term can be conditioned on the
-height of the instance.  A role non-origination assumption of the form
-\texttt{(3 a)} asserts that \texttt{a} will not be mapped into an
-instance unless its height is at least three.  Penetrator
-non-originating atoms are similar.  Section~\ref{sec:advice} provides
-advice on when to add non-origination or unique origination
-assumptions to roles.
-
-\begin{figure}
-\begin{center}
-\includegraphics{cpsadiagrams-3.mps}
-\caption{Needham-Schroeder Penetrated}
-\label{fig:ns penetrated}
-\end{center}
-\end{figure}
-
-\section{Skeletons}\index{skeleton}
-
-A \emph{skeleton} represents regular behavior that might make up part
-of an execution.  The components of a skeleton are similar to an
-execution.  The components of a skeleton include a protocol, a
-sequence of instances, and a binary relation between transmission
-nodes and reception nodes within the sequence.  Unlike an execution,
-the strands in a skeleton specify only regular behavior.  Furthermore,
-the pair of nodes in the relation need not agree on their message
-term.  Two nodes are related if the transmitting node precedes the
-reception node, as an execution it represents may include nodes
-between the related transmission and reception nodes.
-
-The final three additional components of a skeleton are a set of
-non-originating terms, a set of penetrator non-originating terms, and
-a set of uniquely originating terms.  To be a skeleton, each uniquely
-originating term must originate in at most one strand in the skeleton,
-and each non-originating term must never be carried by some event in
-the skeleton and every variable that occurs in the term must occur in
-some event.  For a penetrator non-originating term, is suffices that
-every variable that occurs in the term must occur in some event.
-Furthermore, for each uniquely originating term that originates in the
-skeleton, the node relation must ensure that reception nodes that
-carry the term follow the node of its origination.
-Figure~\ref{fig:skeleton} shows the components in the S-expression
-representation of a skeleton.
-
-\begin{figure}
-\begin{quote}
-\begin{alltt}
-(defskeleton \textsc{protocol} \textsc{variables}
-   \ldots                ; Instance sequence
-   (precedes \ldots)     ; Node orderings
-   (non-orig \ldots)     ; Non-originating terms
-   (pen-non-orig \ldots) ; Penetrator non-originating terms
-   (uniq-orig \ldots))   ; Uniquely originating terms
-\end{alltt}
-\end{quote}
-\caption{Components of Skeletons}\label{fig:skeleton}
-\end{figure}
-
-Two skeletons are equivalent if there is a permutation of the strands
-in one skeleton that when applied to its sequence and its node
-relation, produces the other skeleton.  Two skeletons are also
-equivalent if they differ only by a systematic, sort-preserving
-renaming of their variables, excluding variables that occur in the
-domains of environments---the role variables.  The trace of a strand
-is used for the comparison, so role names need not match.
-
-A skeleton is normalized by performing a transitive reduction on its
-node relation.  The transitive reduction\index{transitive reduction}
-of an ordering is the minimal ordering such that both orderings have
-the same transitive closure.  Here, communication orderings implied by
-transitive closure are removed.  Two skeletons are equivalent if their
-normalized forms are equivalent.
-
-One special skeleton is associated with each execution.  It summarizes
-the regular behavior of the execution.  It is derived from the
-execution by enriching its node relation to contain all node orderings
-implied by transitive closure, deleting all strands and nodes that
-refer to penetrator behavior, and then performing the transitive
-reduction on the resulting node relation.  The set of uniquely
-originating terms is the set of terms that originate on exactly one
-strand in the execution, and are carried in a term of a regular
-strand.  The set of non-originating terms is the union of two sets.
-One set contains each term that is used as an encryption or decryption
-key in some term in the execution, but is not carried by any term.
-The other set contains the terms specified by non-origination
-assumptions in roles.  If a realized skeleton instance maps all of the
-variables that occur in one of its non-originating role terms, the
-mapped term is a member of the skeleton's set of non-originating
-terms.  A skeleton is \emph{realized}\index{realized skeleton} if it
-summarizes the behavior of some execution.
-
-Skeletons are a central concept in the {\cpsa} algorithm because they
-capture the notion that the details of penetrator behavior are
-irrelevant to the analysis.  From the perspective of regular behavior,
-all that is needed is a description of the messages that can be
-derived by the penetrator at a given reception node of a regular
-strand.  In a realized skeleton, some combination of penetrator
-behavior and regular behavior derives the message at every reception
-node.  The skeleton's node relation specifies the transmission nodes
-that provide messages available to the penetrator for message
-derivations.  The rules for message derivation are algebra specific.
-If the message derivation rules imply a message at a reception node in a
-skeleton is derivable, the node is~\emph{realized.}
-
-A skeleton with an unrealized node might be related to another
-skeleton with additional regular behavior that makes the original node
-realized.  A skeleton with additional regular behavior is called a
-refinement.
-
-A skeleton~$A$ structurally refines~$B$ if the transitive closure of the
-graph associated with~$B$ is a subgraph of the one associated
-with~$A$, the event at corresponding nodes agree, the set of
-uniquely originating terms of~$B$ is a subset of the ones in~$A$, the
-set of non-originating terms of~$B$ is a subset of the ones in~$A$,
-and a uniquely originating term that originates in~$B$ originates at
-the corresponding node in~$A$.  Penetrator non-originating assumptions
-are similar to non-originating assumptions.
-
-A skeleton~$A$ message refines~$B$ if~$A$ and~$B$ agree on all but the
-terms in the range of each strand's environment and its
-non-originating and uniquely originating terms, and there is a
-substitution that maps each term in~$B$ to its related term in~$A$.
-Similar to structural refinement, a uniquely originating term that
-originates in~$B$ originates at the same node in the image of~$B$.
-
-A skeleton~$A$ refines\index{refinement}~$B$ if~$A$ is equivalent to a
-skeleton that structurally or message refines~$B$.\footnote{A
-  skeleton~$A$ refines~$B$ if there is a homomorphism from~$B$ to~$A$
-  as defined in~\cite{DoghmiGuttmanThayer07}.  The implementation
-  avoids the complexities of directly representing homomorphisms by
-  composing structural and message refinement with equivalence checks,
-  as is done in this chapter.}  Each skeleton describes the realized
-skeletons that refine it.  A skeleton is \emph{dead} if no realized
-skeleton refines it.  A diagram of a skeleton is in Figure~\ref{fig:ns
-  shape}.
-
-\begin{figure}
-\begin{center}
-\includegraphics{cpsadiagrams-4.mps}
-\caption{Needham-Schroeder Shape ($K^{-1}_A$ uncompromised, $N_2$ fresh)}
-\label{fig:ns shape}
-\end{center}
-\end{figure}
-
-The {\cpsa} algorithm computes realized skeletons from unrealized
-skeletons by identifying an unrealized node, and computing the
-skeletons that refine the unrealized skeleton by making the target
-node realized.
-
-\section{Listeners}\index{listeners}
-
-In addition to the roles specified in a protocol, for each term~$t$, a
-regular strand may be an instance of the listener role with the trace
-$\fn{lsn}(t) = \seq{\inbnd t, \outbnd t}$.  There are no non-originating or
-uniquely originating terms associated with a listener role.
-
-A listener strand is used in a skeleton to assert that an atom~$t$ is
-available on its own to the adversary, unprotected by encryption.  For
-example, to test if the protocol keeps a term~$t$ from the adversary,
-one adds a strand that listens for~$t$.  The term is protected if the
-resulting skeleton is dead.  Otherwise, the {\cpsa} analyzer program
-will find a refined realized skeleton that shows how the adversary
-accesses~$t$.
-
-A listener instance in S-expression syntax follows.  See
-\textsc{strand} in Table~\ref{tab:syntax}, Appendix~\ref{sec:syntax
-  reference}.
-\begin{center}
-\texttt{(deflistener }\textsc{term}\texttt{)}
-\end{center}
-The {\cpsa} programs generate the associated listener role and hide
-it on output.  Listener role names are absent in all forms of output,
-one indication that a strand is an instance of a listener role.
-
-\section{Authentication Tests}\label{sec:authentication tests}
-\index{nonce test}\index{encryption test}
-
-Authentication tests~\cite{GuttmanThayer02} guide the search for
-skeletons that refine one with an unrealized node into ones in which
-it is realized.  There are two types of authentication tests, nonce
-and encryption tests.  In both cases, an unrealized node is selected,
-called the \index{test node}\emph{test node.}  A term carried by the
-inbound message at the test node is identified as the \index{critical
-  term}\emph{critical term.}  A critical term is one that occurs in a
-message context, the construction of which cannot be explained by the
-regular behavior in the current skeleton or by penetrator behavior.
-An authentication test determines the additional regular behavior
-required to refine a skeleton into ones in which the test node is
-realized.
-
-The critical term in a nonce test is a uniquely originating term, the
-nonce.  It is freshly generated by one regular participant in each run
-of the protocol.  A nonce is unguessable by both regular and
-adversarial participants except when it is received in an unprotected
-context.
-
-A reception node's \index{outbound predecessors}\emph{outbound
-  predecessors} is the set of messages sent by transmission nodes that
-precede the reception node, as given by the transitive closure of its
-skeleton's node ordering relation.  Suppose every occurrence of the
-nonce in the outbound predecessors of the test node is within a
-context protected by encryption, but the critical term in the test
-node occurs outside of all of those encryptions.  Clearly, another
-participant was able to decrypt one of the test node's outbound
-predecessors.  The set of encryptions that protects a critical term
-in a test node's outbound predecessors is called its \index{escape
-  set}\emph{escape set.}
-
-There are three ways to refine a skeleton to account for the
-decryption: regular augmentation, listener augmentation, and
-contraction.  For regular augmentation, an instance of a protocol role
-is added to the skeleton.  The final transmission node of the strand
-is called a \emph{transforming node.}  The strand is selected for
-augmentation because relative to the test node's outbound
-predecessors, the transforming node's message shows the strand
-performed the decryption.
-
-The penetrator can expose the critical term if it has access to any
-of the decryption keys used to protect it in the escape set.  For
-listener augmentation, an instance of a listener role listening to one
-decryption key used to protect the critical term is added, and the
-skeleton's communication ordering relation is updated to record the
-fact that the listener's transmission node precedes the test node.  If
-the resulting skeleton is not dead, the decryption can be explained by
-penetrator behavior.
-
-For a contraction, a message refining substitution is found that
-equates two or more atoms.  Sometimes, the key used to protect the
-critical term can be equated with one used in previous messages,
-thus vacuously explaining the decryption of the critical term.
-
-The critical term in an encryption test is an encryption.  When the
-encryption key is unavailable, the encryption is unguessable.
-Whenever the unavailability of the encryption key can be established,
-the methods used to refine skeletons with nonce tests apply.
-Additionally, an instance of a listener role listening for the
-critical term's encryption key is added.  If the resulting skeleton
-is not dead, the encryption can be explained by penetrator behavior.
-
-\section{Generalization}
-
-Repeated use of authentication tests either produce realized skeletons
-or show that a skeleton is dead.  The next step in the algorithm is to
-make each realized skeleton into a shape, using the process of
-generalization.
-
-Realized skeleton~$A$ \emph{generalizes}\index{generalization}
-realized skeleton~$B$ if~$A$ refines the origin problem specification,
-and $B$ refines~$A$.  Furthermore,~$A$ may not combine strands in~$B$.
-The \emph{shape}\index{shape} associated with a realized skeleton is
-its maximally generalized realized skeleton.  The shapes of a protocol
-capture all the essentially different executions possible for the
-protocol consistent with the initial behavior specification.
-Figure~\ref{fig:ns shape} shows the shape associated with the
-Needham-Schroeder Protocol from the point of view of a responder
-strand.
-
-A different fixed set of operations is used to transform a realized
-skeleton into a shape: deletion, weakening, separation, and
-forgetting.  If an operation succeeds, it produces a more general
-realized skeleton, one that is not equivalent to the starting
-skeleton.  If no operations succeeds, the skeleton is a shape.
-
-For deletion, a node and all nodes that follow it in a strand are
-deleted, and the resulting skeleton is checked to see if it
-generalized the starting skeleton.  The operation is tried for each
-node in the starting skeleton until there is a success.
-
-If deletion fails, a skeleton is weakened by deleting one element of
-the communication ordering, then checking the result to see if it
-generalized the starting skeleton.  The operation is tried for each
-communication ordering in the starting skeleton until there is a success.
-
-If weakening fails, origination assumption forgetting is tried by
-deleting each term in the non-originating set that is not
-specified by a role.  This is followed by deleting each term in the
-uniquely originating set that is not specified by a role.
-
-If origination assumption forgetting fails, variable separation is
-tried.  Sometimes a more general skeleton can be found by replacing
-some occurrences of one variable by a fresh variable.  To separate a
-variable, the collection of places at which the variable occurs in the
-range of all environments is generated, and a fresh variable is
-substituted for the variable at a subset of these places.  All
-possibilities are tried until a more general skeleton is found.
-
-Sometimes a shape is derived from another shape by collapsing two
-strands in a shape.  Collapsing might produce an unrealized skeleton,
-so authentication tests apply.
-
-\section{Skeletons}\index{skeleton}\label{sec:skeletons}
-
-With this background, the \texttt{defskeleton} form in
-Table~\ref{tab:syntax}, Appendix~\ref{sec:syntax reference} is
-explained.  The key object in {\cpsa} input and output is a skeleton,
-but an object with weaker properties is allowed for the initial
-problem statement.  A \index{preskeleton}\emph{preskeleton} is a
-skeleton except that terms in the uniquely originating set may
-originate in more than one strand.  Furthermore, the node relation of
-a preskeleton need not imply that a node that carries a uniquely
-originating term is after the node of its origination.  A preskeleton
-that cannot be immediately converted into a skeleton is erroneous, and
-an error message is issued.
-
-Referring to \textsc{skeleton} in Table~\ref{tab:syntax}, the
-\textsc{id} in the skeleton form names a protocol.  It refers to
-the most recent protocol definition of that name which precedes the
-skeleton form.  The \textsc{id} in the strand form names a role.
-The integer in the strand form gives the height of the strand.  The
-sequence of pairs of terms in the strand form specify an environment
-used to construct the messages in a strand from its role's trace.  The
-first term is interpreted using the role's variables and the second
-term uses the skeleton's variables.  The environment used to
-produce the strand's trace is derived by matching the second term
-using the first term as a pattern.
-
-The \texttt{precedes} form specifies members of the node relation.
-The first integer in a node identifies the strand using the order in
-which strands are defined in the \texttt{defskeleton} form.
-
-A variable may occur in more then one role within a protocol.  The
-reader performs a renaming so as to ensure these occurrences do not
-overlap.  Furthermore, the maplets used to specify a strand need not
-specify how to map every role variable.  The reader inserts missing
-mappings, and renames every skeleton variable that also occurs in a
-role of its protocol.  The sort of every skeleton variable that occurs
-in the \texttt{non-orig}, \texttt{pen-non-orig}, or \texttt{uniq-orig}
-list or in a maplet must be declared, using the \texttt{vars} form.
-
-The \textsc{prot-alist}, \textsc{role-alist}, and \textsc{skel-alist}
-productions are Lisp style association lists, that is, lists of
-key-value pairs, where every key is a symbol.  Key-value pairs with
-unrecognized keys are ignored, and are available for use by other
-tools.  On output, unrecognized key-value pairs are preserved when
-printing protocols, but elided when printing skeletons, with the
-exception of the \texttt{comment} key.
-
-\subsection{Semantic Errors in the Input}\label{sec:semantic errors}
-
-The error messages generated for syntax errors are informative,
-however the ones generated for semantic errors are less so.  A role
-might be rejected because it is not \index{well-formed
-  role}well-formed.  A role is not well-formed if (1) there is a term
-declared to be uniquely originating that does not originate in the
-trace, (2) there is a term declared to be non-originating that is
-carried by some term in the trace, a variable occurs in the term that
-does not occur in the trace, or the declaration of the term included a
-height, and a variable occurs in the term that does not occur in the
-prefix of the trace of the given height, or (3) a variable of sort
-\dom{mesg} is not acquired in the trace.  The error message might not
-indicate which condition caused the rejection.
-
-Similarly, a skeleton might be rejected because it is not
-\index{well-formed skeleton}well-formed.  A skeleton is not
-well-formed if (1) the first node in a node pair refers to an inbound
-term, or the second node refers to an outbound term, (2) the node
-ordering contains cycles, (3) a term declared to be uniquely
-originating, is not carried by any term, (4) an instance maps a
-uniquely originating role term to a term that does not originate in
-the instance's strand, or (5) a term declared to be non-originating is
-carried by a term in some strand, or a variable occurs in the term
-that does not occur in any strand.  Once again, the error message might
-not indicate which condition caused the rejection.
-
-\subsection{Needham-Schroeder Input}
-
-\begin{sloppypar}
-This section contains the verbatim input of the running example used
-throughout this paper.  The use of an editor that pretty-prints
-S-expressions is recommended.
-\end{sloppypar}
-
-\begin{verbatim}
-;;; Hey Emacs, use -*- mode:scheme -*-
-(herald "Needham-Schroeder Public-Key Protocol"
-        (comment "This protocol contains a man-in-the-middle"
-                 "attack discovered by Galvin Lowe."))
-\end{verbatim}
-
-An S-expression version of Figure~\ref{fig:ns roles} follows.
-
-\begin{verbatim}
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-     (send (enc n1 a (pubk b)))
-     (recv (enc n1 n2 (pubk a)))
-     (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc n1 a (pubk b)))
-     (send (enc n1 n2 (pubk a)))
-     (recv (enc n2 (pubk b))))))
-\end{verbatim}
-
-The protocol is analyzed from the point of view of a complete run of
-one instance of an initiator role.
-
-\begin{verbatim}
-(defskeleton ns
-  (vars (a b name) (n1 text))
-  (defstrand init 3 (a a) (b b) (n1 n1))
-  (non-orig (privk b) (privk a))
-  (uniq-orig n1))
-\end{verbatim}
-
-\section{Output}\label{sec:output}
-
-The {\cpsa} output format has been designed so that it can be reused
-as input.  All skeletons in the output are normalized skeletons,
-with the possible exception of an initial preskeleton, the one used to
-state a problem.  If an initial preskeleton cannot be converted into a
-skeleton, an error is immediately signaled.
-
-For each skeleton, a {\cpsa} analyzer computes a set of skeletons that
-refine it using a fixed set of operations based on authentication
-tests.  The immediate descendants of a skeleton are called its
-\index{cohort}\emph{cohort.}  A member of the cohort that is
-equivalent to a previously seen skeleton is replaced by that skeleton.
-Thus the skeletons in an analysis form a directed acyclic graph.  All
-but one skeleton has a single parent, and one skeleton can be a member
-of several cohorts.
-
-The operations above either produce realized skeletons or show that a
-skeleton is dead.  The next step in the algorithm is to make each
-realized skeleton into a shape, using the process of generalization.
-Although the set of shapes is in some sense the answer to the problem,
-an understanding of the operations used to generate the shapes can be
-very informative.  The remainder of this section describes the
-annotations in the output that allow for an understanding of each step
-of the analysis.
-
-On output, key-value pairs are added to each skeleton's association
-list, \textsc{skel-alist}.  Every skeleton in the output is labeled
-with a unique identifier with
-\index{label}\texttt{(label~}\textsc{integer}\texttt{)}.  A skeleton
-has \texttt{(parent~}\textsc{integer}\texttt{)} if it is a member of
-the cohort of the identified parent.  A skeleton has
-\texttt{(seen~}\textsc{integer+}\texttt{)} when members of its cohort
-are equivalent to previously seen skeletons.  A skeleton lists its
-unrealized nodes with
-\texttt{(unrealized~}\textsc{node$\ast$}\texttt{)}.  The traces
-associated with each strand is given by the
-\texttt{(traces~}\ldots\texttt{)} form.
-
-\begin{figure}
-\begin{verbatim}
-(defskeleton ns
-  (vars (n1 n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (operation nonce-test (added-strand resp 2) n1 (0 1)
-    (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1 a (pubk b)))
-      (send (enc n1 n2-0 (pubk a)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-\end{verbatim}
-\caption{Annotated {\cpsa} Output}\label{fig:output}
-\end{figure}
-
-Figure~\ref{fig:output} shows a skeleton generated during an analysis
-of the Needham-Schroeder Protocol from the point of view of an
-initiator strand.  It is labeled as~1.  It's parent is labeled~0.  It
-has one child, and that child has not been seen before.  It is
-unrealized.
-
-\label{sec:operation}
-\begin{sloppypar}
-The operation used to derive a skeleton is recorded with
-\index{operation}\texttt{(operation~}\textsc{test kind term node
-  term$\ast$}\texttt{)}, where \textsc{test} is the authentication
-test \texttt{encryption-test} or \texttt{nonce-test}, \textsc{kind} is
-\texttt{(added-strand} \textsc{id} \textsc{integer}\texttt{)},
-\texttt{(contracted} \textsc{maplet$\ast$}\texttt{)}, or
-\texttt{(added-listener} \textsc{term}\texttt{)}, \textsc{term} is the
-critical term, \textsc{node} in the test node, and the remaining terms
-specify the escape set. When the operation kind is added strand, the
-instance's role name and height are provided. For kind added-listener,
-a term is provided. For kind contracted, the substitution is
-provided. When a substitution refers to a variable not in the
-skeleton, its name is unpredictable. For generalization, the operation
-is recorded as
-\texttt{(operation~generalization~}\textsc{method}\texttt{)}, where
-\textsc{method} is one of \texttt{deleted} \textsc{node},
-\texttt{weakened} \textsc{node-pair}, \texttt{separated}
-\textsc{term}, or \texttt{forgot} \textsc{term}.  Shapes can be
-collapsed leading to new shapes.  For shape collapsing, the operation
-is recorded as \texttt{(operation~collapsed} \textsc{integer}
-\textsc{integer}\texttt{)}, where the two \textsc{integer}s identify
-the strands merged.
-\end{sloppypar}
-
-The skeleton in Figure~\ref{fig:output} was generated as a result of a
-nonce test, by augmenting the starting skeleton with a responder
-strand of length two.  The critical term is \texttt{n1}, the test
-node is \texttt{(0~1)}, and the escape set has one element.
-
-When the operation kind is added strand, it is possible that the
-number of strands in the skeleton and its parent are the same.  In
-this case, {\cpsa} has found a way to produce a more concise
-representation of the skeleton by merging two strands.
-
-\subsection{Needham-Schroeder Output}
-
-% Use --margin=60 to generate output
-
-This section contains the verbatim output of the running example used
-throughout this paper.  A run starts by displaying the program's
-version number.
-
-\begin{verbatim}
-(herald "Needham-Schroeder Public-Key Protocol"
-  (comment "This protocol contains a man-in-the-middle"
-    "attack discovered by Galvin Lowe."))
-\end{verbatim}
-
-\begin{flushleft}
-\texttt{(comment "CPSA {\version}")}\\
-\texttt{(comment "All input read")}
-\end{flushleft}
-
-An S-expression version of Figure~\ref{fig:ns roles} follows.
-
-\begin{verbatim}
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc n1 a (pubk b)))
-      (recv (enc n1 n2 (pubk a))) (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc n1 a (pubk b)))
-      (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b))))))
-\end{verbatim}
-
-The protocol is analyzed from the point of view of a complete run of
-one instance of an initiator role.
-
-\begin{verbatim}
-(defskeleton ns
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (label 0)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-\end{verbatim}
-
-A nonce test justifies adding an instance of part of a reponder role.
-
-\begin{verbatim}
-(defskeleton ns
-  (vars (n1 n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (operation nonce-test (added-strand resp 2) n1 (0 1)
-    (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1 a (pubk b)))
-      (send (enc n1 n2-0 (pubk a)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-\end{verbatim}
-
-A nonce test justifies a contraction that produces the one and only
-shape.  The shape is also displayed in Figure~\ref{fig:ns init pov}.
-
-\begin{figure}
-\begin{center}
-\includegraphics{cpsadiagrams-5.mps}
-\caption{Needham-Schroeder Shape (Initiator Point of View)}
-\label{fig:ns init pov}
-\end{center}
-\end{figure}
-
-\begin{verbatim}
-(defskeleton ns
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
-    (enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1 a (pubk b)))
-      (send (enc n1 n2 (pubk a)))))
-  (label 2)
-  (parent 1)
-  (unrealized)
-  (shape))
-\end{verbatim}
-
-The following phrase means {\cpsa} is finished with this problem---its
-exhausted its to do list.
-
-\begin{verbatim}
-(comment "Nothing left to do")
-\end{verbatim}
-
-\section{First-Order Logic and Security Goals}\label{sec:security goals}
-
-Another way to specify a problem statement is with a security goal. A
-security goal a sentence in first-order logic.  It asserts that if
-some properties hold for a skeleton, then some other properties must
-hold for all shapes computed by CPSA starting with the skeleton.
-Security goals can be used to formally state authentication and
-secrecy goals of a protocol.
-
-The \texttt{defgoal} form is used to pose an analysis problem with a
-sentence instead of a skeleton.  CPSA extracts a point of view
-skeleton from the antecedent of the formula and then analyzes it.
-When it prints a shape, it checks to see if the shape satisfies the
-conclusion of the security goal.  See~\cite{cpsagoals09} for details.
-The grammar of security goals is in Table~\ref{tab:goal}.
-
-\section{Macros}\label{sec:macros}
-
-After reading the input, {\cpsa} expands macros before in analyzing
-the results. A macro definition is a top-level form.\index{macros}
-
-\begin{quote}\scshape
-(\texttt{\textup{defmacro}} (name arg${}^\ast$) body)
-\end{quote}
-
-The {\cpsa} program expands all calls to macros in non-macro defining
-S-expressions using the macros that have been defined previously. A
-macro definition can be used to expand a call if the first element of
-a list matches the name of the macro, and the length of the remaining
-elements in the list matches the length of the macro's argument
-list. When two macros definitions are applicable, the last definition
-takes precedence. The {\cpsa} program omits macro definitions from its
-output.
-
-After expanding a list, elements of the list of the form
-\verb|(^ |$\cdots$\verb| )| are spliced into the output.  Thus
-\verb|(a ^(b c) d)| becomes \verb|(a b c d)| after macro expansion.
-
-\section{Includes}\label{sec:include}
-
-While performing macro expansion, {\cpsa} includes other source files
-with the top-level include form,\index{includes}
-\begin{quote}\scshape
-(\texttt{\textup{include}} file)
-\end{quote}
-where \texttt{\scshape file} is a string.
-
-\section{Advice}\label{sec:advice}
-
-This section contains advice derived from using {\cpsa}.  When
-specifying {\cpsa} input, one must decide when to specify terms as
-uniquely originating or non-originating in a role, and when to
-specifying them in the initial skeleton.  If a fresh value is
-generated by all programs that implement a role in a protocol, the
-term that represents the fresh value should be assumed to be uniquely
-originating in the role.  Otherwise, unique origination assumptions
-should be specified in the initial skeleton.
-
-Adding non-origination assumptions to a role can lead to an
-excessively weak protocol analysis, i.e.\ an analysis relative to an
-unrealistically narrow assumption.  Placing non-origination
-assumptions in the initial skeleton is preferred whenever possible.
-
-The Basic Crypto Algebra has two text-like sorts, \dom{text} and
-\dom{data}.  For some protocols, message fields that carry uniquely
-originating data cannot be carried by other text-like fields.  To
-ensure {\cpsa} does not explore skeletons in which uniquely
-originating data is carried in fields with predictable values, the
-convention is to use the sort \dom{data} for uniquely originating
-data, and sort \dom{text} for the other fields.
-
-When looking at the output, try extracting the shapes first.  If the
-shapes only version of the output does not answer your questions, try
-studying the output that contains intermediate skeletons.
-
-When {\cpsa} generates an unexpected intermediate skeleton, study its
-operation field (see Page~\ref{sec:operation}).  Usually, the
-unexpected intermediate skeletons of interest have been generated as a
-result of an authentication test.  Section~\ref{sec:authentication
-  tests} explains how to interpret an operation field for an
-authentication test.
-
-When using {\cpsa} for protocol design, focus on authentication tests.
-For each iteration of the design, search for the most informative
-unexpected intermediate skeleton.  That skeleton is likely to suggest
-a  missing origination assumption, or the redesign of some message
-term included in the operation field.
-
-There are situations in which origination assumptions are not
-justified for initial segments of runs of a protocol, but are required
-to show that complete runs of the protocol have certain expected
-shapes.  In this case, the progressive refinement analysis technique
-is used.  The initial segments of runs are analyzed with only the
-origination assumptions justified initially.  A shape associated with
-a partial run may justify additional origination assumptions.  For
-example, a strand in a partial run may send its next message only
-after a trust decision is made, and the implication of the decision is
-that the strand infers that some key is uncompromised.  In this
-case, the shape with the new origination assumption and additional
-regular behavior is supplied as input to {\cpsa}, thereby refining the
-original problem.
-
-As there is no guarantee that {\cpsa} is bug free, you may come upon
-input that causes non-termination.  As a result, whenever you run the
-program unattended, you should limit its memory usage.  To get output
-that can be visualized, specify a step count and/or a strand bound so
-that {\cpsa} has the chance to abort the run in a fashion that
-generates graphable output.  Of course, sending us input that causes
-erroneous behavior will help us improve {\cpsa}.
-
-\section{Formula Extraction}\label{sec:formulas}
-
-The \texttt{cpsasas} program extracts a formula in the language of
-order-sorted first-order logic for each problem and its shapes from a
-{\cpsa} run. The formula is called a shape analysis
-sentence~\cite{Ramsdell12}. The formula is satisfied in all realized
-skeletons when {\cpsa} finds all the shapes for the problem.  The
-details of formula extraction are presented in Appendix~B of The
-{\cpsa} Specification~\cite{cpsaspec09}.
-
-\section{Annotations}\label{sec:annotations}
-
-The \texttt{cpsaannotations} program uses protocol annotations to
-annotate shapes and generate protocol soundness obligations for use
-with the rely-guarantee method of trust
-management~\cite{GuttmanEtAl04,RamsdellEtAl09}.  The language of
-formulas is order-sorted first-order logic extended with a modal says
-operator.  Formula terms may include function symbols that are not
-part of a protocol's message signature.  The syntax of a formula is
-specified in the {\cpsa} Overview~\cite{cpsaoverview09}.
-
-\section{Parameter Analysis}\label{sec:parameters}
-
-The parameters of a role are the atoms that are not acquired by the
-role's trace, but must be available before a complete execution of the
-trace is possible. The \texttt{cpsaparameters} program computes sets
-of sets of parameters consistent with the role. If the expected
-parameter set is not a member, a specification error is indicated.
-The details of parameter analysis are presented in Appendix~A of The
-{\cpsa} Specification~\cite{cpsaspec09}.
-
-\section*{Acknowledgement}
-
-Jonathan K.\@ Millen provided valuable feedback as our first {\cpsa}
-user and on a draft of this document.
-
-\appendix
-
-\section{BCA Syntax Reference}\label{sec:syntax reference}
-
-\input{bcasyntax}
-
-\section{Omitted Executions}\label{sec:omitted executions}
-
-When given some initial behavior, the {\cpsa} program discovers what
-shapes are compatible with it.  Early work claimed that the {\cpsa}
-algorithm would generate every shape in a finite number of
-steps~\cite{DoghmiGuttmanThayer07,Guttman11}.  Further theoretical
-work showed classes of executions that are not found by the algorithm,
-however it also showed that every omitted execution requires an
-unnatural interpretation of a protocol's roles.  Hence the algorithm
-is complete relative to natural role semantics.  We present an example
-of a protocol that has a shape missed by {\cpsa}.
-
-The protocol has an initiator role and a responder role.
-\begin{center}
-\includegraphics{cpsadiagrams-6.mps}\hfil
-\includegraphics{cpsadiagrams-7.mps}
-\end{center}
-
-Observe that a natural interpretation of~$N_2$ in the responder role
-is that a binding for it is known when an instance of the role begins
-execution.
-
-Consider a scenario in which there is an instance of the initiator
-role where~$N$ is freshly generated and~$K^{-1}$ is uncompromised.
-{\cpsa} will find no shapes compatible with the scenario, however what
-follows is.
-\begin{center}
-\includegraphics{cpsadiagrams-8.mps}
-\end{center}
-Yet this shape requires that the message for~$N_2$ in an instance the
-responder role be obtained from its first message reception---an
-unnatural interpretation of the responder role.
-
-\bibliography{cpsa}
-\bibliographystyle{plain}
-
-\printindex
-
-\end{document}
diff --git a/doc/cpsaspec.pdf b/doc/cpsaspec.pdf
deleted file mode 100644
Binary files a/doc/cpsaspec.pdf and /dev/null differ
diff --git a/doc/cpsaspec.tex b/doc/cpsaspec.tex
deleted file mode 100644
--- a/doc/cpsaspec.tex
+++ /dev/null
@@ -1,2286 +0,0 @@
-\documentclass[12pt]{report}
-\usepackage{amssymb}
-\usepackage{amsmath}
-\usepackage{amsthm}
-\usepackage{url}
-\usepackage[matrix,arrow,curve]{xy}
-\usepackage{makeidx}
-% Include this for a hyperlinked version of the document
-% \usepackage{hyperref}
-\theoremstyle{definition}
-\newtheorem{defn}{Definition}[chapter]
-\newtheorem{thm}{Theorem}[chapter]
-\newtheorem{lem}[thm]{Lemma}
-\newtheorem{cor}[thm]{Corollary}
-\newtheorem{conj}[thm]{Conjecture}
-\newtheorem{prop}[thm]{Proposition}
-\input{macros}
-
-\hyphenation{pro-to-skel-e-ton}
-\hyphenation{pro-to-role}
-
-% This environment is used for comments about this draft.
-\newenvironment{note}{\itshape\par}{}
-
-\newcommand{\inv}[1]{\ensuremath{\cn{inv}(#1)}}
-\newcommand{\gen}{\ensuremath{\cn{g}}}
-\newcommand{\expr}[2]{\ensuremath{{#1}^{#2}}}
-\newcommand{\bca}{\textsc{bca}}
-\newcommand{\alga}{\alg{A}}
-\newcommand{\tr}{\ensuremath{\mathfrak C}}
-\newcommand{\base}{\ensuremath{\mathfrak B}}
-\newcommand{\ints}{\ensuremath{\mathbb Z}}
-\newcommand{\solve}[1]{\stackrel{#1}{\longtwoheadrightarrow}}
-\newcommand{\outpred}{\fn{outpred}}
-\newcommand{\avoid}{\fn{avoid}}
-\newcommand{\dcmp}{\fn{dcmp}}
-\newcommand{\carpos}{\fn{carpos}}
-\newcommand{\esc}{\fn{esc}}
-\newcommand{\aug}{\fn{aug}}
-\newcommand{\crit}{\fn{crit}}
-\newcommand{\critpos}{\fn{critp}}
-\newcommand{\anc}{\fn{anc}}
-\newcommand{\mcow}{\fn{cow}}
-\newcommand{\mncow}{\fn{ncow}}
-\newcommand{\sdom}{\fn{Dom}}
-\newcommand{\sran}{\fn{Ran}}
-\newcommand{\svars}{\fn{Vars}}
-\newcommand{\evt}{\fn{evt}}
-\newcommand{\msg}{\fn{msg}}
-\newcommand{\role}{\mathsf{r}}
-\newcommand{\skel}{\mathsf{k}}
-\newcommand{\rl}{\fn{rl}}
-\newcommand{\inst}{\mathsf{i}}
-\newcommand{\nodes}{\fn{nodes}}
-\newcommand{\lsn}{\fn{lsn}}
-\newcommand{\init}{\fn{init}}
-\newcommand{\resp}{\fn{resp}}
-\newcommand{\form}{\mathcal{F}}
-\newcommand{\sent}{\mathcal{S}}
-
-\makeindex
-
-\title{The CPSA Specification:\\
-A Reduction System for Searching for Shapes in Cryptographic Protocols}
-\author{John D.~Ramsdell\qquad Joshua D.~Guttman\\
-  \quad Moses D.~Liskov\qquad Paul D.~Rowe\\
-  The MITRE Corporation\\ CPSA Version \version}
-
-\begin{document}
-\maketitle
-\cpsacopying
-
-\tableofcontents
-
-\begin{abstract}
-We describe a term reduction system that enumerates all essentially
-different executions possible for a cryptographic protocol.  We call
-them the \emph{shapes} of the protocol.  Naturally occurring protocols
-have only finitely many, indeed very few shapes.  Authentication and
-secrecy properties are easy to determine from them, as are attacks and
-anomalies.  Our Cryptographic Protocols Shapes Analyzer ({\cpsa})
-program is a direct implementation of the reduction system described
-within, and the form of the reduction system is partially determined
-by the implementation.
-\end{abstract}
-
-\chapter{Introduction}
-
-The Cryptographic Protocol Shapes Analyzer ({\cpsa}) attempts to
-enumerate all essentially different executions possible for a
-cryptographic protocol.  We call them the \emph{shapes} of the
-protocol.  Naturally occurring protocols have only finitely many,
-indeed very few shapes.  Authentication and secrecy properties are
-easy to determine from them, as are attacks and anomalies.
-
-The shapes analysis is performed within a pure Dolev-Yao model.  The
-{\cpsa} program reads a sequence of problem descriptions, and prints
-the steps it used to solve each problem.  For each input problem,
-{\cpsa} is given some initial behavior, and it descovers what shapes
-are compatible with it.  Normally, the initial behavior is from the
-point of view of one participant.  The analysis reveals what the other
-participants must have done, given the participant's view.
-
-This document specifies the {\cpsa} program using a term reduction
-system.  Chapter~\ref{chp:order-sorted mesg algs} describes message
-algebras as order-sorted quotient term algebras.
-Chapter~\ref{chp:strand spaces and bundles} presents an
-implementation-oriented view of strand spaces.
-Chapter~\ref{chp:adversary model} details the model of the adversary.
-The formal definition of a partial run of a protocol is called a
-skeleton, and is introduced in Chapter~\ref{chp:skeletons}.
-
-The term reduction systems used to specify the algorithm is presented
-in Chapter~\ref{chp:algorithms}, and the primitive reduction rules are
-in Chapter~\ref{chp:prim preskel ops}.  The rules used to transform
-terms called preskeletons into skeletons are in
-Chapter~\ref{chp:preskeleton reduction}.
-
-The algorithm used to model adversarial behavior is in
-Chapter~\ref{chp:penetrator derivable}.  The algorithms used to infer
-what else must have happened given a partial description of a run of
-a protocol as skeleton is in Chapters~\ref{chp:cow} and~\ref{chp:auth
-  tests}.  Chapters~\ref{chp:generalization} and~\ref{chp:collapsing}
-find most general descriptions of {\cpsa} answers---the shapes.
-Finally, Chapter~\ref{chp:skeleton reduction} assembles reduction
-rules into one system that specifies the {\cpsa} program.
-
-Appendix~\ref{chp:penetrator non-origination} describes an extension
-to Strand Space theory that models passwords and related concepts.
-Appendix~\ref{chp:traces} details the sense in which a protocol role
-can be viewed as an abstraction of a program.
-Appendix~\ref{chp:logic} describes a formula in the language of
-order-sorted first-order logic for each problem and its shapes found
-by {\cpsa}.  The formula is called a shape analysis sentence.  The
-formula is modeled by all skeletons that describe full runs of a
-protocol when {\cpsa} finds all the shapes for the problem.
-
-{\cpsa}'s search is based on a high-level algorithm that was claimed
-to be complete, i.e.\@ every shape can in fact be found in a finite
-number of steps~\cite{DoghmiGuttmanThayer07,Guttman11}.  Further
-theoretical work~\cite{cpsatheory11} showed classes of executions that
-are not found by the algorithm, however it also showed that every
-omitted execution requires an unnatural interpretation of a protocol's
-roles.  Hence the algorithm is complete relative to natural role
-semantics.  See~\cite[Appendix~B]{cpsaprimer09} for more on omitted
-executions.
-
-A {\cpsa} release includes two other documents, the {\cpsa}
-Design~\cite{cpsadesign09} and the {\cpsa} Primer~\cite{cpsaprimer09}.
-The design document describes details of the {\cpsa}
-implementation that would clutter this one.  It should be read by
-anyone interesting in reading and modifying the source code.  The
-{\cpsa} Primer provides an overview of {\cpsa}, and is worth
-reading before this document is approached.
-
-\section{Notation}\label{sec:notation}
-
-A finite sequence\index{sequence} is a function from an initial
-segment of the natural numbers.  The length of a sequence~$X$ is~$|X|$,
-and sequence~$X=\seq{X(0),\ldots,X(n-1)}$ for $n=|X|$.  Alternatively,
-$\seq{x_0,x_1,\ldots,x_{n-1}} =x_0\cons x_1\cons\ldots\cons
-x_{n-1}\cons\seq{}$.  If~$S$ is a set, then~$S^\ast$ is the set of finite
-sequences of~$S$, and~$S^+$ is the non-empty finite sequences of~$S$.
-The concatenation of sequences~$X_0$ and~$X_1$ is~$X_0\append X_1$.
-The prefix of sequence~$X$ of length~$n$ is~$\prefix{X}{n}$.
-
-Generally, when discussing terms, a lowercase Latin letter is used to
-denote a term, and an uppercase Latin letter is used to denote a set
-of terms or a sequence of terms.
-
-\chapter{Order-Sorted Message Algebras}\label{chp:order-sorted mesg algs}
-
-{\cpsa} models a message by an equivalence class of terms over a
-signature. A sort system is used to classify messages.  {\cpsa}
-depends on the sort system to allow it to treat a variable that
-represents an asymmetric key differently from a variable that
-represents an arbitrary message.  In particular, {\cpsa} uses
-order-sorted quotient term algebras~\cite{GoguenMeseguer92} for
-message algebras.  This formalism enables the use of well-known
-algorithms for unification and matching in the presences of equations
-and sorts~\cite{BaaderSnyder01}.
-
-This paper makes no attempt to provide a general introduction to
-order-sorted quotient term algebras.  We use a message algebra called
-the Basic Crypto Algebra (\bca), which is the main algebra used by
-{\cpsa}.
-
-\begin{figure}
-\begin{center}
-Sorts: \dom{name}, \dom{text}, \dom{data}, \dom{skey}, \dom{akey} $<$ \dom{mesg}\\[1ex]
-Base sorts: \dom{name}, \dom{text}, \dom{data}, \dom{skey}, \dom{akey}\\
-Carried positions: $\bullet$ denotes a carried position.\\[1ex]
-\begin{tabular}{@{}ll}
-$\enc{\bullet}{(\cdot)}\colon\dom{mesg}\times\dom{mesg}\rightarrow\dom{mesg}
-$&Encryption\\
-$\hash{(\cdot)}\colon\dom{mesg}\rightarrow\dom{mesg}
-$&Hashing\\
-$(\bullet,\bullet)\colon\dom{mesg}\times\dom{mesg}\rightarrow\dom{mesg}$
-&Pairing\\
-``\ldots''$\colon{}\dom{mesg}$& Tag constants\\
-$K_{(\cdot)}\colon\dom{name}\rightarrow\dom{akey}$
-&Public key of name\\
-$(\cdot)^{-1}\colon\dom{akey}\rightarrow\dom{akey}$
-&Inverse of key\\
-$\cn{ltk}(\cdot,\cdot)\colon\dom{name}\times\dom{name}\rightarrow\dom{skey}$
-& Long term key
-\end{tabular}\\[1ex]
-Equation: $(x^{-1})^{-1} \approx x$ for $x\colon\dom{akey}$
-\end{center}
-\caption{Basic Crypto Signature and Equation}\label{fig:bcs}
-\end{figure}
-
-There are six {\bca} sorts: $\dom{mesg}$, \index{sorts}the sort of
-all messages, $\dom{skey}$, the sort of symmetric keys,
-$\dom{akey}$, the sort of asymmetric keys, $\dom{name}$, the sort of
-participant names, and $\dom{text}$ and $\dom{data}$ for ordinary
-values.  Sort $\dom{mesg}$ is sometimes written as~$\top$ and the
-other sorts are called \index{base sorts}\emph{base sorts}.
-All base sorts are subsorts of $\dom{mesg}$.  The function
-symbols, or \index{operations}\emph{operations}, used to form terms
-are given by the signature in Figure~\ref{fig:bcs}.
-
-Each variable~$x$ used to form a term has a unique sort~$s$, written
-$x\colon s$.  Variable set~$X$\index{variable set} is an indexed set
-of sets of variables, $X_s=\{x\mid x\colon s\}$.  For {\bca},
-$X_{\dom{mesg}}$, $X_{\dom{skey}}$, $X_{\dom{akey}}$,
-$X_{\dom{name}}$, $X_{\dom{text}}$, and $X_{\dom{data}}$ partition
-the set of variables in~$X$.  By abuse of notation, at times, we
-write~$X$ for the set of variables in~$X$.
-
-\begin{figure}
-$$\begin{array}{r@{{}={}}l}
-\alga_{\dom{skey}}&\{\{x\}\mid x \in X_{\dom{skey}}\} \cup \{\{\cn{ltk}(a,b)\}\mid a \in X_{\dom{name}}, b \in X_{\dom{name}}\}\\
-\alga_{\dom{akey}}&\begin{array}[t]{@{}l}
-\{\{x^{-2n}\mid n\in\nat\}\mid x\in X_{\dom{akey}}\}\\
-\quad{}\cup\{\{x^{-2n-1}\mid n\in\nat\}\mid x\in X_{\dom{akey}}\}\\
-\quad{}\cup\{\{K_x^{-2n}\mid n\in\nat\}\mid x\in X_{\dom{name}}\}\\
-\quad{}\cup\{\{K_x^{-2n-1}\mid n\in\nat\}\mid x\in X_{\dom{name}}\}\\
-\end{array}\\
-\alga_{\dom{name}}&\{\{x\}\mid x \in X_{\dom{name}}\}\\
-\alga_{\dom{text}}&\{\{x\}\mid x \in X_{\dom{text}}\}\\
-\alga_{\dom{data}}&\{\{x\}\mid x \in X_{\dom{data}}\}\\
-\base&\alga_{\dom{skey}} \cup \alga_{\dom{akey}} \cup \alga_{\dom{name}} \cup \alga_{\dom{text}} \cup \alga_{\dom{data}}\\
-\alga^0&\base\cup \{\{x\}\mid x\in X_{\dom{mesg}}\} \cup
-\{\{x\}\mid x \hbox{ is a tag constant }\}\\
-\alga^{n+1}&\alga^n
-\begin{array}[t]{@{}l}
-{}\cup\{\{(t_0,t_1)\mid t_0\in T_0, t_1\in T_1\}\mid
- T_0\in\alga^n,T_1\in\alga^n\}\\
-{}\cup\{\{\enc{t_0}{t_1}\mid t_0\in T_0, t_1\in T_1\}\mid
- T_0\in\alga^n,T_1\in\alga^n\}\\
-{}\cup\{\{\hash{t}\mid t\in T\}\mid T\in\alga^n\}
-\end{array}\\
-\alga = \alga_{\dom{mesg}}&\bigcup_{n\in\nat}\alga^n
-\end{array}$$
-\caption{{\bca} Messages~$\alga$ and Atoms~$\base$}\label{fig:algebra}
-\end{figure}
-
-The Basic Crypto Quotient Term Algebra~$\alga$ generated by variable
-set~$X$ is displayed in Figure~\ref{fig:algebra}.  The union of the
-messages in~$\alga$ is set of terms generated by~$X$, and~$\alga$
-partitions the set of terms into a set of equivalence classes induced
-by the equations.  Terms~$t_0$ and~$t_1$ are equivalent, written
-$t_0\equiv t_1$, iff $t_0\in T\land t_1\in T$ for some $T\in\alga$.
-The canonical representative of a message is the $t$ in $\{t'\mid
-t'\equiv t\}$ with the fewest occurrences of the $(\cdot)^{-1}$
-operation.
-
-Keys, names, data, and texts in the algebra are called
-\index{atoms}\emph{atoms} and are members of~$\base$.  We write
-$t\colon B$ iff $\{t'\mid t'\equiv t\}\in\base$.  Note that encryption
-is defined with an encryption key of sort $\dom{mesg}$.  When the
-encryption key is of sort $\dom{akey}$ this is meant to model
-asymmetric encryption: otherwise, this models symmetric encryption.
-Note that even complex messages such as encryptions can be used as
-encryption keys in the symmetric sense.
-
-To find the decryption key associated with an encryption, one must
-exclude the case in which the key is a variable of sort \dom{mesg},
-as there is no way to determine if the encryption operation denotes
-symmetric or asymmetric encryption.  Therefore, the decryption
-key\index{inverse key} associated with encryption key~$t$
-is~$\fn{inv}(t)$.
-
-$$\fn{inv}(t) =\left\{
-\begin{array}{ll}
-\cn{invk}(t)&\mbox{if $t\colon\dom{akey}$;}\\
-\mbox{undefined}&\mbox{if $t$ is a variable of sort $\dom{mesg}$;}\\
-t&\mbox{otherwise.}
-\end{array}\right.$$
-
-An important property possessed by the algebra is that for all
-$T\in\alga$, if there are any encryptions in $T$ then all members of
-$T$ are encryptions.  As a result, a message can be identified as
-representing an encryption and if it is, decomposed into its plaintext
-and its decryption key.  This property is a consequence of the fact
-that equations relate atoms, not arbitrary messages.  A similar
-property holds for pairs and hashes.  A hash\index{hash} is treated as
-a kind of encryption in which the term that is hashed is the
-encryption key.
-
-We write $\alga_X$ when it is important to identify the variable
-set~$X$ that generates the algebra.  Given two variable sets~$X$
-and~$Y$, a \index{substitution}\emph{substitution} is an order-sorted
-map~$\sigma\colon X\rightarrow\alga_Y$ such that $\sigma(x)\neq x$ for
-only finitely many elements of~$X$.  For a substitution~$\sigma$, the
-\index{domain}\index{domain}\emph{domain} is the set of variables
-$\sdom(\sigma)=\{x\mid \sigma(x)\neq x\}$ and the
-\index{range}\emph{range} is the set $\sran(\sigma)=\{\sigma(x)\mid
-x\in\sdom(\sigma)\}$.  Substitution~$\sigma_0$ is \index{more general
-  substitution}\emph{more general than}~$\sigma_1$,
-written~$\sigma_0\unlhd\sigma_1$, if there exists a
-substitution~$\sigma_2$ such that
-$\all{x}\sigma_1(x)\equiv\sigma_2(\sigma_0(x))$.  Given a
-substitution~$\sigma\colon X\rightarrow\alga_Y$, the unique
-homomorphism\index{homomorphism!algebra} $\sigma^\ast\colon
-\alga_X\rightarrow\alga_Y$ induced by~$\sigma$ is also
-denoted~$\sigma$.
-
-A \index{position}\emph{position}~$p$ is a finite sequence of natural
-numbers.  The term in~$t$ that \emph{occurs at}~$p$, written~$t\termat
-p$, is:
-$$\begin{array}{l}
-t\termat\seq{}=t;\\
-(t_0,t_1)\termat i\cons p=t_i\termat p\mbox{ for $i\in\{0,1\}$};\\
-\enc{t_0}{t_1}\termat i\cons p=t_i\termat p\mbox{ for
-  $i\in\{0,1\}$};\\
-t^{-1}\termat 0\cons p=t\termat p.
-\end{array}$$
-A term~$t$ \index{occurs in}\emph{occurs in} term~$t'$ if $t=t'\termat
-p$ for some~$p$.  A message~$T$ \emph{occurs in} message~$T'$ if the
-canonical representative of~$T$ occurs in the canonical representative
-of~$T'$.
-
-A carried term is one that can be extracted from a message reception
-assuming plaintext is extractable from encryptions.  The positions at
-which term $t$ is carried in $t'$ is $\carpos(t,t')$\index{carried
-  positions}\index{carpos@\carpos}\label{def:carried positions},
-where
-$$\carpos(t,t')=\left\{
-\begin{array}{ll}
-\{\seq{}\}&\mbox{if $t'\equiv t$, else}\\
-\multicolumn{2}{l}{\{0\cons p \mid
-p\in\carpos(t,t_1)\}}\\
-& \mbox{if $t'=\enc{t_0}{t_1}$, else}\\
-\multicolumn{2}{l}{\{i\cons p \mid
-i\in\{0,1\}, p\in\carpos(t,t_i)\}} \\
-& \mbox{if $t'=(t_0,t_1)$ else}\\
-\emptyset&\mbox{otherwise.}
-\end{array}\right.$$
-
-Term~$t$ \index{carries}\emph{carries}~$t'$ if $\carpos(t',t)$ is not
-empty, and $t'\sqsubseteq t$ when~$t'$ is carried by~$t$.  Note that
-for all terms $t_0,t_1,t'_0,t'_1$, if $t_0\equiv t_1$ and $t'_0\equiv
-t'_1$, then $\carpos(t_0,t'_0)= \carpos(t_1,t'_1)$.  We write $t'
-\sqsubseteq_p t$ when $p \in \carpos(t',t)$ and $t \termat p \equiv
-t'$.
-
-In what follows, we will often conflate a term with the message of
-which it is a member, and use lowercase letters to denote both.
-
-\chapter{Strand Spaces and Bundles}\label{chp:strand spaces and bundles}
-
-When using strand space theory, one normally hypothesizes the
-existence of a single global strand space.  This is a very reasonable
-assumption for theoretical analysis, but from the point view of an
-implementer, it turns out that it is better to assume there are many
-local strand spaces and the design specification task is to describe
-the relations between these local spaces.  Our reformulation of strand
-space notation provides an implementation oriented way of describing
-the concept of a local strand space, and a direct link between from
-algorithm specification to the data structures used in the
-implementation.
-
-A run of a protocol is viewed as an exchange of messages by a finite
-set of local sessions of the protocol.  Each local session is called a
-\index{strand}\emph{strand}.  The behavior of a strand, its
-\index{trace}\emph{trace}, is a sequence of messaging events.  An
-\index{event}\emph{event} is either a message transmission or a
-reception.  Outbound message $t\in\alga_X$ is written as~$\outbnd t$,
-and inbound message~$t$ is written as~$\inbnd t$.  The set of traces
-over $\alga_X$ is $\tr_X=(\pm\alga_X)^+$.  A message
-\index{originates}\emph{originates} in a trace if it is carried by
-some event and the first event in which it is carried is outbound.  A
-message is \index{gained}\emph{gained} by a trace if it is carried by
-some event and the first event in which it is carried is inbound.  A
-message is \index{acquired}\emph{acquired} by a trace if it first
-occurs in a reception event and is also carried by that event.
-
-Abstractly, a strand space is a multiset of traces, but since we wish
-to name each element, a \index{strand space}\emph{strand
-  space}~$\Theta_X$ over algebra~$\alga_X$ is defined to be a sequence
-of traces in $\tr_X$.  A strand~$s$ is a member of the domain of
-$\Theta_X$, and its trace is $\Theta_X(s)$.  In a strand space, the
-elements of the generator set~$X$ denote atomic message elements, such
-as keys, and not composite messages, such as encryptions and pairs.
-\enlargethispage{3ex}
-Therefore, the sort of every variable in~$X$ is a base sort.
-
-Message events occur at nodes in a strand space.  For each strand~$s$,
-there is a node for every event in~$\Theta(s)$.  The
-\index{nodes}\emph{nodes} of strand space $\Theta$ are $\{(s,i)\mid
-s\in\sdom(\Theta), 0\leq i< |\Theta(s)|\}$, the event at a node is
-\index{evt@\evt}$\evt_\Theta(s,i)=\Theta(s)(i)$, and the message at a
-node is \index{msg@\msg}$\msg_\Theta(s,i) = m$ such that
-$\evt_\Theta(s,i) = \pm m$.  Just as a position names a subterm within
-another term, a strand names a trace within a strand space, and a node
-names an event in a strand space.  The relation~$\Rightarrow$ defined
-by $\{(s,i-1)\Rightarrow(s,i)\mid s\in\sdom(\Theta), 1\leq
-i<|\Theta(s)|\}$ is called the \index{strand succession}\emph{strand
-  succession relation}.
-
-A \index{bundle}\emph{bundle} in strand space $\Theta$ is a finite
-directed acyclic graph $\Upsilon(\Theta,\to)$, where the vertices are
-the nodes of $\Theta$, and an edge represents
-communication~($\rightarrow$) or strand succession~($\Rightarrow$).
-For \index{communication}communication, if $n_0\rightarrow n_1$, then
-there is a message~$t$ such that~$\evt_\Theta(n_0)=\outbnd t$
-and~$\evt_\Theta(n_1)=\inbnd t$.  For each reception node~$n_1$, there
-is a unique transmission node~$n_0$ with $n_0\rightarrow n_1$.
-
-Each acyclic graph has a transitive irreflexive relation~$\prec$ on
-its vertices.  The relation specifies the causal ordering of nodes in
-a bundle.  An transitive irreflexive binary relation is also called a
-\index{strict partial order}\index{partial order!strict}strict partial
-order.
-
-An atom \index{uniquely originates}\emph{uniquely originates} in a
-bundle if it originates in the trace of exactly one strand.  An atom
-is \index{non-originating}\emph{non-originating} in a bundle if it
-originates on no strand, but each of its variables occurs in some
-strand's trace.
-
-In a run of a protocol, the behavior of each strand is constrained by
-a role in a protocol.  Adversarial strands are constrained by roles as
-are non-adversarial strands.  A protorole over $\alga_Y$ is
-$\role_Y(C,N,U)$, where $C\in\tr_Y$, $N\subseteq\base_Y$, and
-$U\subseteq\base_Y$.  The trace of the role is~$C$, its
-non-origination assumptions are~$N$, and its unique origination
-assumptions are~$U$.  A protorole is a \index{role}\emph{role} if (1)
-$t\in N$ implies $t$ is not carried in $C$, and all variables in $N$
-occur in $C$, (2) $t\in U$ implies $t$ originates in $C$, (3) if
-variable~$x$ occurs in $C$ then $x$ is an atom or it is acquired in
-$C$, and (4) the trace of a role may not match the pattern
-$\seq{\inbnd t, \outbnd t,\ldots}$.  This is to ensure
-that listeners, which are introduced on Page~\pageref{def:listeners},
-cannot be confused with protocol constrained strands.
-A \index{protocol}\emph{protocol} is a set of roles.  Let
-\index{Vars@\svars}$\svars(P)$ be the set of variables that occur in
-the traces of the roles in protocol~$P$.
-
-A bundle~$\Upsilon(\Theta_X,\to)$ is a \index{run of
-  protocol}\emph{run of protocol} $P$ if there is a role mapping
-$\rl\colon\Theta_X\to P$ that satisfies properties for each
-$s\in\sdom(\Theta_X)$.  Assuming $\rl(s)=\role_Y(C,N,U)$ and $X$ and
-$Y$ share no variables, and let $h=|\Theta_X(s)|$, the properties are
-(1) $h\leq|C|$, (2) there is a
-homomorphism~$\sigma\colon\alga_Y\to\alga_X$ such that
-$\comp{\sigma}{\prefix{C}{h}}=\Theta_X(s)$, (3) $\sdom(\sigma)$ is the
-set of variables that occur in~$\prefix{C}{h}$, (4) if the variables
-in $t\in N$ occur in $\sdom(\sigma)$, then $\sigma(t)$ is
-non-originating in $\Upsilon(\Theta_X,\to)$, and (5) if $t\in U$
-originates at index~$i$ in~$C$, and $i<h$, then $\sigma(t)$
-uniquely originates in $\Upsilon(\Theta_X,\to)$ at node $(s,i)$.
-Origination assumptions in bundles specified by roles are called
-\index{inherited origination assumptions}\emph{inherited origination
-  assumptions}.
-
-\chapter{Adversary Model}\label{chp:adversary model}
-
-A fixed set of penetrator roles encodes the adversary model associated
-with a message algebra.  For the Basic Crypto Algebra, there are eight
-roles.  Each role makes no origination assumptions, and the trace of
-each role is given in Figure~\ref{fig:pen}.  The first line of the
-figure specifies many traces, one for each base sort, and a trace for
-each tag.
-
-\begin{figure}
-$$\begin{array}{lll}
-\mbox{Create}(z\colon B)&
-\seq{\outbnd z}&\seq{\outbnd\mbox{``\ldots''}}\\
-\mbox{Pair}(x,y\colon\top)&
-\seq{\inbnd x,\inbnd y,\outbnd(x, y)}&
-\seq{\inbnd(x, y),\outbnd x,\outbnd y}\\
-\mbox{Encrypt}(x,y\colon\top)&
-\seq{\inbnd x,\inbnd y,\outbnd\enc{x}{y}}&
-\seq{\inbnd\enc{x}{y},\inbnd \fn{inv}(y),\outbnd x}\\
-\mbox{Hash}(x\colon\top)&
-\seq{\inbnd x,\outbnd\hash{x}}
-\end{array}$$
-\caption{Basic Crypto Algebra Penetrator Role Traces}\label{fig:pen}
-\end{figure}
-
-A strand exhibits non-adversarial behavior when its role is not a
-penetrator role.  A non-adversarial strand is called a \index{regular
-  strand}\emph{regular} strand as is its role.
-
-The penetrator cannot use a non-originating atom to encrypt or decrypt
-a message, because every key it uses must be carried in a message.
-Consider a uniquely originating atom that originates on a regular
-strand.  The penetrator cannot make the atom using a create role,
-because the atom would originate in more than one trace.  Therefore,
-the penetrator can use a uniquely originating atom to encrypt or
-decrypt a message only if it is transmitted by a regular strand
-unprotected by encryption.
-
-\chapter{Skeletons}\label{chp:skeletons}
-
-The details of penetrator behavior are abstracted away when performing
-protocol analysis.  The abstracted description of a bundle is called a
-realized skeleton, which is defined using a protoskeleton.  A
-\emph{protoskeleton} over $\alga_X$ is
-$\skel_X(\rl,P,\Theta_X,\prec,N,U)$, where $\rl\colon\sdom(\Theta_X)\to P$ is
-a role map, the sets~$X$ and $\svars(P)$ are disjoint,
-$\Theta_X$ is a sequence of traces in $\tr_X$, $\prec$ is a relation
-on the nodes in $\Theta_X$, $N\subseteq\base_X$ are its
-non-origination assumptions, and $U\subseteq\base_X$ are its unique
-origination assumptions.  Unlike a strand space, the sort of a
-variable in~$X$ need not be a base sort.
-
-Assume the strands in bundle $\Upsilon(\Theta_X,\to)$ have been
-permuted so that regular strands precede penetrator strands in
-sequence~$\Theta_X$, and $\rl$ demonstrates the bundle is a run of
-protocol~$P$.  Let~$P'$ be~$P$ without penetrator roles.  Skeleton
-$\skel_X(\rl',P',\Theta'_X,\prec,N,U)$ \index{realized
-  skeleton}\index{skeleton!realized}\emph{realizes} the bundle if
-$\rl'$ and $\Theta'_X$ are the truncations of $\rl$ and $\Theta_X$
-respectively that omit penetrator strands from their domains, $\prec$
-is the transitive irreflexive relation associated with the bundle
-without penetrator nodes, $N$ is the set of non-originating atoms with
-variables that occur in $\Theta'_X$, and $U$ is the set of atoms that
-uniquely originate and are carried by some regular event.
-
-A protoskeleton $\skel_X(\rl,P,\Theta_X,\prec,N,U)$ is a
-\index{preskeleton}\emph{preskeleton} if the following properties hold.
-\begin{enumerate}
-\item Sequence $\rl$ demonstrates that the strands in $\sdom(\Theta_X)$
-  satisfy the conditions for being a part of a run of protocol~$P$.
-\item Relation $\prec$ is transitive, irreflexive, and includes the
-  strand succession relation $(\Rightarrow)$.
-\item If $n\prec n'$, then either $n\Rightarrow n'$,
-  $\evt_{\Theta_X}(n)=\outbnd t$ and   $\evt_{\Theta_X}(n')=\inbnd
-  t'$, or $n\prec n''\prec n'$ for some~$n''$.
-\item Each atom in $N$ is carried by no event, and each variable
-  in the atom occurs in some event.
-\item Each atom in $U$ is carried by some event.
-\item $N$ includes the non-originating atoms inherited from roles via
-  the role map.
-\item $U$ includes the uniquely originating atoms inherited from roles via
-  the role map.
-\end{enumerate}
-
-\begin{sloppypar}
-Let $\orig_k(t)$ be the set of nodes at which~$t$ originates in
-preskeleton~$k$, and~$\gain_k(t)$ be the set of nodes at which~$t$ is
-gained in~$k$.  Preskeleton $\skel_X(\rl,P,\Theta_X,\prec,N,U)$ is a
-\index{skeleton}\emph{skeleton} if each atom in $U$ originates on at
-most one strand, and the node of origination precedes each node that
-gains the atom, i.e.\@ for every~$t\in U$, $n_0\in\orig_k(t)$ and
-$n_1\in\gain_k(t)$ implies~$n_0\prec n_1$.
-\end{sloppypar}
-
-Let $k_0=\skel_X(rl_0,P,\Theta_0,\prec_0,N_0,U_0)$ and
-$k_1=\skel_Y(rl_1,P,\Theta_1,\prec_1,N_1,U_1)$ be preskeletons.  There
-is a \index{preskeleton
-  homomorphism}\index{homomorphism!preskeleton}\emph{preskeleton
-  homomorphism}\label{def:preskeleton homomorphism} from~$k_0$
-to~$k_1$ if~$\phi$ and~$\sigma$ are maps with the following
-properties:
-\begin{enumerate}
-\item $\phi$ maps strands of~$k_0$ into those of~$k_1$, and nodes as
-  $\phi((s,i))=(\phi(s),i)$, that is $\phi$ is in
-  $\sdom(\Theta_0)\to\sdom(\Theta_1)$;
-\item $\sigma\colon\alga_X\to\alga_Y$ is a message algebra homomorphism;
-\item $n\in\nodes(\Theta_0)$ implies
-  $\sigma(\evt_{\Theta_0}(n))=\evt_{\Theta_1}(\phi(n))$;
-\item $n_0\prec_0
-n_1$ implies $\phi(n_0)\prec_1\phi(n_1)$;
-\item $\sigma(N_0)\subseteq N_1$;
-\item $\sigma(U_0)\subseteq U_1$;
-\item $t\in U_0$ implies
-  $\phi(\orig_{k_0}(t))\subseteq\orig_{k_1}(\sigma(t))$.
-\end{enumerate}
-
-A homomorphism is \index{strandwise injective
-  homomorphism}\index{homomorphism!strandwise
-  injective}\emph{strandwise injective} if its strand map is
-injective.  Two preskeletons are isomorphic if they are related by
-\index{isomorphic preskeletons}\index{preskeletons!isomorphic}
-\label{def:isomorphic preskeletons}
-strandwise injective homomorphism in both directions.  A homomorphism
-is \index{nodewise isomorphic
-  homomorphism}\index{homomorphism!nodewise isomorphic}\emph{nodewise
-  isomorphic} if the strand map~$\phi$ implies a bijection on nodes,
-and $n_0\prec_1 n_1$ implies $\phi^{-1}(n_0)\prec_0\phi^{-1}(n_1)$.  A
-skeleton is \index{realized
-  skeleton}\index{skeleton!realized}\emph{realized} if there is a
-nodewise isomorphic homomorphism from it to a skeleton that realizes a
-bundle, and message component of the homomorphism is injective.
-
-Our formalism requires that every protocol include a
-listener\label{def:listeners} role\index{listener role} of the form:
-$\lsn(x\colon\top)=\role(\seq{\inbnd x,\outbnd
-  x},\emptyset,\emptyset)$.  Instances of this role are sometimes used
-to make penetrator derived messages visible in skeletons.  We say
-skeleton~$k$ \emph{realizes modulo listeners} bundle
-$\Upsilon(\Theta,\to) $ if~$k$ realizes $\Upsilon(\Theta',\to')$ and
-\hbox{$\Upsilon(\Theta,\to)$} is the result of removing listener
-strands, and adjusting the communication ordering $\to$ appropriately.
-
-The set of bundles denoted by preskeleton~$k$, $\sembrack{k}$, is:
-$$\sembrack{k} = \{\Upsilon\mid
-\mbox{$k\homomorphism{\phi,\sigma}k'$ and $k'$ realizes modulo
-  listeners $\Upsilon$}\}$$ A {\cpsa} algorithm is \emph{complete} if
-when given a preskeleton~$k$, either the algorithm diverges, or else it
-terminates and produces a finite set of realized skeletons~$K$, such
-that $\sembrack{k}=\bigcup_{k'\in K}\sembrack{k'}$.
-\label{def:preskeleton denotation}
-
-\section{Blanchet's Simple Example Protocol}\label{sec:blanchet's
-  simple example protocol}
-
-The following protocol is a simplified version of the Denning-Sacco
-key distribution protocol~\cite{DenningSacco81} due to Bruno Blanchet.
-$$\begin{array}{r@{{}:{}}l}
-A\to B&\enc{\enc{s}{a^{-1}}}{b}\\
-B\to A&\enc{d}{s}
-\end{array}$$
-Symmetric key~$s$ is freshly generated, asymmetric keys $a^{-1}$ and
-$b^{-1}$ are uncompromised, and the goal of the protocol is to keep
-data~$d$ secret.  The protocol was constructed with a known flaw for
-expository purposes.
-
-This {\cpsa} description of the protocol has an initiator and a
-responder role.
-$$\begin{array}{r@{{}={}}l}
-\init(a,b\colon\srt{A},s\colon\srt{S}, d\colon\srt{D})&
-\role(\seq{\outbnd\enc{\enc{s}{a^{-1}}}{b},\inbnd\enc{d}{s}},
-\emptyset,\emptyset)\\
-\resp(a,b\colon\srt{A},s\colon\srt{S}, d\colon\srt{D})&
-\role(\seq{\inbnd\enc{\enc{s}{a^{-1}}}{b},\outbnd\enc{d}{s}},
-\emptyset,\emptyset)
-\end{array}$$
-where we use~\srt{A} for sort \dom{akey}, \srt{S} for sort \dom{skey}, and
-\srt{D} for sort \dom{data} to save space.  The algebra for the initiator
-role is generated from $X$, where $X_{\srt{A}}=\{a,b\}$, $X_{\srt{S}}=\{s\}$,
-$X_{\srt{D}}=\{d\}$, $X_{\dom{text}}=\emptyset$, $X_{\dom{name}}=\emptyset$,
-and $X_\top=\emptyset$.
-
-An interesting point of view for analysis is to see if the
-authentication goals of the initiator are met.  To do so, we assume
-there was full length run of an initiator strand, and let {\cpsa}
-determine what else must have happened.  Let variable set $Y=a,b\colon
-\srt{A},s\colon\srt{S}, d\colon\srt{D}$.  The point-of-view skeleton is:
-$$\begin{array}{r@{}ll}
-\skel_Y(
-&\seq{\init(a_0,b_0,s_0,d_0)},
-&\mbox{Role map}\\
-&\{\init(a_0,b_0,s_0,d_0),\resp(a_1,b_1,s_1,d_1)\},
-&\mbox{Protocol}\\
-&\seq{\seq{\outbnd\enc{\enc{s}{a^{-1}}}{b},\inbnd\enc{d}{s}}},
-&\mbox{Traces}\\
-&\emptyset,
-&\mbox{Node orderings}\\
-&\{a^{-1},b^{-1}\},
-&\mbox{Non-origination}\\
-&\{s\})
-&\mbox{Unique origination}
-\end{array}$$
-where the variable set that generates the algebra for the initiator
-and responder roles have been renamed so as to avoid conflicts with
-the variable set~$Y$ used by the skeleton.
-
-The skeleton produced by {\cpsa} for this problem follows.  Notice
-that the two strands agree on the key~$b$ used in the outermost
-encryption of their first message, and indication that the
-authentication goals of the initiator are met.  See
-Figure~\ref{fig:blanchet's protocol} to see the structure of the shape.
-$$\begin{array}{r@{}ll}
-\skel_Y(
-&\seq{\init(a_0,b_0,s_0,d_0),\resp(a_1,b_1,s_1,d_1)},
-&\mbox{Role map}\\
-&\{\init(a_0,b_0,s_0,d_0),\resp(a_1,b_1,s_1,d_1)\},
-&\mbox{Protocol}\\
-&\langle\begin{array}[t]{@{}l}
-\seq{\outbnd\enc{\enc{s}{a^{-1}}}{b},\inbnd\enc{d}{s}},\\
-\seq{\inbnd\enc{\enc{s}{a^{-1}}}{b},\outbnd\enc{d}{s}}\rangle,
-\end{array}
-&\mbox{Traces}\\
-&\{(0,0)\prec(1,0),(1,1)\prec(0,1)\},
-&\mbox{Node orderings}\\
-&\{a^{-1},b^{-1}\},
-&\mbox{Non-origination}\\
-&\{s\})
-&\mbox{Unique origination}
-\end{array}$$
-The homomorphism from the point-of-view skeleton to the shape is
-$$(\seq{1},\{a\mapsto a, b\mapsto b, s\mapsto s, d\mapsto d\}).$$
-
-\begin{figure}
-\begin{center}
-\begin{tabular}{c@{\qquad}c}
-$\xymatrix{
-\txt{\strut init}&\txt{\strut resp}\\
-\bullet\ar@{=>}[d]\ar[r]&\bullet\ar@{=>}[d]\\
-\bullet&\bullet\ar[l]}$
-&
-$\xymatrix{
-\txt{\strut resp}&\txt{\strut init}\\
-\bullet\ar@{=>}[d]&\bullet\ar@{-->}[l]\\
-\bullet&}$
-\end{tabular}
-\end{center}
-\caption{Shapes for Blanchet's Protocol}\label{fig:blanchet's protocol}
-\end{figure}
-
-An analysis of the authentication goals for the responder shows the
-flaw built into the protocol.  To do the analysis, assume there was a
-full length run of a responder strand, and let {\cpsa} determine what
-else must have happened.  In this case, the point-of-view skeleton is:
-$$\begin{array}{r@{}ll}
-\skel_Y(
-&\seq{\resp(a_0,b_0,s_0,d_0)},
-&\mbox{Role map}\\
-&\{\init(a_0,b_0,s_0,d_0),\resp(a_1,b_1,s_1,d_1)\},
-&\mbox{Protocol}\\
-&\seq{\seq{\inbnd\enc{\enc{s}{a^{-1}}}{b},\outbnd\enc{d}{s}}},
-&\mbox{Traces}\\
-&\emptyset,
-&\mbox{Node orderings}\\
-&\{a^{-1},b^{-1}\},
-&\mbox{Non-origination}\\
-&\{s\})
-&\mbox{Unique origination}
-\end{array}$$
-
-The shape generated by {\cpsa} follows.  An early indication of a
-problem is the variable set for the shape has three asymmetric keys.
-Let variable set $Z=a,b,b'\colon\srt{A},s\colon\srt{S}, d\colon\srt{D}$.  The shape
-is:
-$$\begin{array}{r@{}ll}
-\skel_Z(
-&\seq{\resp(a_0,b_0,s_0,d_0),\init(a_1,b_1,s_1,d_1)},
-&\mbox{Role map}\\
-&\{\init(a_0,b_0,s_0,d_0),\resp(a_1,b_1,s_1,d_1)\},
-&\mbox{Protocol}\\
-&\langle\begin{array}[t]{@{}l}
-\seq{\inbnd\enc{\enc{s}{a^{-1}}}{b},\outbnd\enc{d}{s}},\\
-\seq{\outbnd\enc{\enc{s}{a^{-1}}}{b'}}\rangle,
-\end{array}
-&\begin{array}[t]{@{}l}
-\mbox{Traces}\\
-\mbox{\emph{Note key is $b'$ not $b$!}}
-\end{array}\\
-&\{(1,0)\prec(0,0)\},
-&\mbox{Node orderings}\\
-&\{a^{-1},b^{-1}\},
-&\mbox{Non-origination}\\
-&\{s\})
-&\mbox{Unique origination}
-\end{array}$$
-
-Notice that the two strands do not agree on the key used in the outermost
-encryption of their first message---an authentication failure.  To see
-that the authentication failure leads to the failure to protect the
-secrecy of data~$d$, the protocol is analyzed using the following
-point-of-view:
-$$\begin{array}{r@{}ll}
-\skel_Y(
-&\seq{\resp(a_0,b_0,s_0,d_0),\lsn(x)},
-&\mbox{Role map}\\
-&\{\init(a_0,b_0,s_0,d_0),\resp(a_1,b_1,s_1,d_1),\lsn(x)\},
-&\mbox{Protocol}\\
-&\seq{
-\seq{\inbnd\enc{\enc{s}{a^{-1}}}{b},\outbnd\enc{d}{s}},
-\seq{\inbnd d,\outbnd d}},
-&\mbox{Traces}\\
-&\{(0,1)\prec(1,0),
-&\mbox{Node orderings}\\
-&\{a^{-1},b^{-1}\},
-&\mbox{Non-origination}\\
-&\{s,d\})
-&\mbox{Unique origination}
-\end{array}$$
-
-{\cpsa} finds a shape that shows how data~$d$ is revealed to the adversary.
-
-\section{Dolev-Yao Example 1.3}
-
-The intended run of the protocol in the Dolev-Yao Example 1.3 is:
-$$\begin{array}{r@{{}:{}}l}
-A\to B&\enc{\enc{m}{b},a}{b}\\
-B\to A&\enc{\enc{m}{a},b}{a}
-\end{array}$$
-assuming text~$m$ is freshly generated, and asymmetric keys $a^{-1}$
-and $b^{-1}$ are uncompromised.
-
-The {\cpsa} description of the protocol also has an initiator and a
-responder role.
-$$\begin{array}{r@{{}={}}l}
-\init(a,b\colon\srt{A}, m\colon\srt{D})&
-\role(\seq{\outbnd\enc{\enc{m}{b},a}{b},\inbnd\enc{\enc{m}{a},b}{a}},
-\emptyset,\emptyset)\\
-\resp(a,b\colon\srt{A}, m\colon\top)&
-\role(\seq{\inbnd\enc{\enc{m}{b},a}{b},\outbnd\enc{\enc{m}{a},b}{a}},
-\emptyset,\emptyset)\\
-\end{array}$$
-
-An interesting point of view for analysis is to see if~$m$ is kept
-secret after the initiator sends its message.  Let variable set
-$Z=a,b\colon\srt{A}, m\colon\srt{D}$.  The initial scenario preskeleton is:
-$$\begin{array}{r@{}ll}
-\skel_Z(
-&\seq{\init(a_0,b_0,m_0),\lsn(x)},
-&\mbox{Role map}\\
-&\{\init(a_0,b_0,m_0),\resp(a_1,b_1,m_1),\lsn(x)\},
-&\mbox{Protocol}\\
-&\seq{\seq{\outbnd\enc{\enc{m}{b},a}{b}},\seq{\inbnd m}},
-&\mbox{Traces}\\
-&\emptyset,
-&\mbox{Node orderings}\\
-&\{a^{-1},b^{-1}\},
-&\mbox{Non-origination}\\
-&\{m\})
-&\mbox{Unique origination}
-\end{array}$$
-where the variable set that generates the algebra for the initiator
-role has been renamed so as to avoid conflicts with the variable set~$Z$
-used by the preskeleton.
-
-\begin{figure}
-$$\xymatrix{
-\txt{\strut init}&\txt{\strut }&\txt{\strut resp}&\txt{\strut resp}\\
-\bullet\ar[rrr]&&&\bullet\ar@{=>}[d]\\
-&&\bullet\ar@{=>}[d]&\bullet\ar@{-->}[l]\\
-&\bullet\ar@{=>}[d]&\bullet\ar@{-->}[l]&\\
-&\bullet&&}$$
-\caption{Dolev-Yao Example 1.3 Shape}\label{fig:dy shape}
-\end{figure}
-
-{\cpsa} determines $m$ is not kept secret by producing the shape in
-Figure~\ref{fig:dy shape}.  The added strands in the shape are
-instances of responder roles.  The strands in the shape are:
-$$\begin{array}{l}
-\seq{\outbnd\enc{\enc{m}{b},a}{b}}\\
-\seq{\inbnd m}\\
-\seq{\inbnd\enc{\enc{m}{b},a'}{b},\outbnd\enc{\enc{m}{a'},b}{a'}}\\
-\seq{\inbnd\enc{\enc{\enc{m}{b}, a}{b},a''}{b},
-\outbnd\enc{\enc{\enc{m}{b},a}{a''},b}{a''}}
-\end{array}$$
-The non-origination and unique origination assumptions are as they are
-in the initial scenario preskeleton.  An interesting exercise left for
-the reader is to produce a bundle that is realized by the shape.
-
-\section{Exercise}
-
-Consider the following roles.
-$$\begin{array}{r@{{}={}}l}
-\init(a,b\colon\srt{A})&\role(\seq{\outbnd(a,b),\inbnd(b,a)},
-\emptyset,\emptyset)\\
-\resp(a,b\colon\srt{A})&\role(\seq{\inbnd(a,b),\outbnd(b,a)},
-\emptyset,\emptyset)
-\end{array}$$
-Let $X=x,y\colon\srt{A}$ and
-$\begin{array}[t]{@{}r@{}l}
-k=\skel_X(
-&\seq{\init(a,b),\resp(a,b),\resp(a,b)},\\
-&\{\init(a,b),\resp(a,b)\},\\
-&\seq{\begin{array}[t]{@{}l}
-\seq{\outbnd(x,y),\inbnd(y,x)},\\
-\seq{\inbnd(x,y),\outbnd(y,x)},\\
-\seq{\inbnd(x,y),\outbnd(y,x)}},
-\end{array}\\
-&\mbox{Node ordering in Figure~\ref{fig:exercise}},\\
-&\emptyset,\\
-&\emptyset)
-\end{array}$
-
-\begin{figure}
-$$\xymatrix{
-\txt{\strut init}&\txt{\strut resp}&\txt{\strut resp}\\
-\bullet\ar@{=>}[d]\ar@/^/[rr]\ar[r]&\bullet\ar@{=>}[d]&\bullet\ar@{=>}[d]\\
-\bullet&\bullet\ar[l]&\bullet\ar@/^/[ll]}$$
-\caption{Exercise Skeleton}\label{fig:exercise}
-\end{figure}
-
-What is $\sembrack{k}$?
-
-One member is shown in Figure~\ref{fig:bundle}.
-
-\begin{figure}
-$$\begin{array}{ll}
-\mbox{init}&\seq{\outbnd(x,y),\inbnd(y,x)}\\
-\mbox{resp}&\seq{\inbnd(x,y),\outbnd(y,x)}\\
-\mbox{resp}&\seq{\inbnd(x,y),\outbnd(y,x)}\\
-\mbox{pair}&\seq{\inbnd(y,x),\inbnd(y,x),\outbnd((y,x),(y,x))}\\
-\mbox{sep}&\seq{\inbnd((y,x),(y,x)),\outbnd(y,x)}
-\end{array}$$
-
-$$\xymatrix{
-\txt{\strut init}&\txt{\strut resp}&\txt{\strut resp}&\txt{\strut pair}&\txt{\strut sep}\\
-\bullet\ar@{=>}[dddd]\ar@/^/[rr]\ar[r]&\bullet\ar@{=>}[d]&\bullet\ar@{=>}[d]&&\\
-&\bullet\ar@/_/[rrd]&\bullet\ar[r]&\bullet\ar@{=>}[d]&\\
-&&&\bullet\ar@{=>}[d]&\\
-&&&\bullet\ar[r]&\bullet\ar@{=>}[d]\\
-\bullet&&&&\bullet\ar[llll]}$$
-\caption{A Bundle Realized by the Example Skeleton}\label{fig:bundle}
-\end{figure}
-
-\section{External Syntax and Instances}\label{sec:instances}
-
-The external syntax used by {\cpsa} is a little different than what
-has been described here.  In the external syntax, the trace and the
-role associated with a strand is specified by an
-\index{instance}\emph{instance}.  An instance is of the form
-$\inst(r,h,\sigma)$, where~$r$ is a role, $h$ specifies the length of
-a trace instantiated from the role, and~$\sigma$ specifies how to
-instantiate the variables in the role to obtain the trace.  Thus when
-$r=\role_Y(C,N,U)$, the trace associated with $\inst(r,h,\sigma)$ is
-$\sigma\circ\prefix{C}{h}$.  An instance is well-formed if $1\leq
-h\leq|C|$, and $\sdom(\sigma)$ is the set of variables that occur
-in~$\prefix{C}{h}$.
-
-In the external syntax, the role map and sequence of traces are
-replaced by a sequence of instances.  So for preskeleton
-$\skel_X(\rl,P,\Theta_X,\prec,N,U)$, the external syntax is
-$\skel_X(P,I,\prec,N,U)$, where for each $s\in\sdom(\Theta_x)$,
-$I(s)=\inst(r,h,\sigma)$, $r=\rl(s)$, and the trace of
-$\inst(r,h,\sigma)$ is $\Theta_X(s)$.
-
-\chapter{Algorithms as Reduction Systems}\label{chp:algorithms}
-
-Algorithms in this paper are specified as abstract reduction
-systems~\cite[Chapter~2]{BaaderNipkow98}.  A reduction system is a
-pair $(A,\to)$, where reduction~$\to$ is a binary relation
-$\mathord{\to}\subseteq A\times A$.  Element $x\in A$ is a
-\index{normal form}\emph{normal form} if there is no~$y$ such that
-$x\to y$.  The transitive closure of~$\to$ is~$\to^+$.  The reflexive
-transitive closure of~$\to$ is~$\to^\ast$.  A reduction is confluent
-if $x\to^\ast y_0$ and $x\to^\ast y_1$ implies there is a~$z$ such
-that $y_0\to^\ast z$ and $y_1\to^\ast z$.  A reduction is terminating
-if there are no infinite descending chains.  A reduction is convergent
-if it is confluent and terminating.
-
-Let $\alg{K}$ be the set of preskeletons.  Algorithms are specified as
-reduction systems of the form $(\alg{K},\to)$, which are then used to
-specify a related setwise reduction system of the form
-$(\pow{\alg{K}},\mathord\twoheadrightarrow)$.  Setwise reduction
-systems are the ones with the interesting normal forms and confluence
-properties.  In a setwise reduction system, reduction rewrites one
-element of a set to a set of elements.
-
-\begin{defn}[Setwise Reduction System]
-The \emph{setwise reduction system}\index{setwise reduction system} of
-binary relation $\rightsquigarrow\subseteq\alg{K}\times\pow{\alg{K}}$
-is a reduction system $(\pow{\alg{K}},\twoheadrightarrow)$, where for
-each $K_0\in\pow{\alg{K}}$, $K_0\twoheadrightarrow K_1$ if for some
-$k_0\in K_0$, $k_0\rightsquigarrow K_2$, $K_1=K_2\cup
-(K_0\setminus\{k_0\})$, and $K_1\neq K_0$.
-\end{defn}
-
-The {\cpsa} algorithm will be specified as a setwise term reduction
-system, where the initial problem is given a singleton
-in~$\pow{\alg{K}}$, and the answers computed by an implementation of
-the algorithm are a normal form of the setwise reduction
-relation~$\twoheadrightarrow_k$ defined in Chapter~\ref{chp:skeleton
-  reduction}.
-
-In what follows the relation $k\rightsquigarrow K$ is defined in terms
-of $\to\subseteq\alg{K}\times\alg{K}$ by specifying
-$\{k\}\twoheadrightarrow K$ using~$\to$, so the $\rightsquigarrow$
-relation is not explicitly defined.
-
-We regard sets of preskeletons as factored by isomorphism, where each
-set has at most one representative of the equivalence class of
-isomorphic preskeletons.  The definition of isomorphic preskeletons
-is given on Page~\pageref{def:isomorphic preskeletons}.
-
-The {\cpsa} Design~\cite{cpsadesign09} describes an extension of a
-message algebra signature that models the data structures used in the
-{\cpsa} program.  The terms over the extended signature include ones
-that model preskeletons.  Sets of terms of sort preskeleton are the
-domain of our setwise reduction systems.
-
-\chapter{Primitive Preskeleton Operators}\label{chp:prim preskel ops}
-
-The are four primitive operators\index{operators} on preskeletons used
-by {\cpsa} to solve authentication tests.  Each operator is a partial
-map from preskeletons to preskeletons.
-
-\begin{defn}[Substitution Operator]\label{def:substitution operator}
-For order-sorted substitution~$\sigma\colon X\to\alg{A}_Y$,
-the operator~$\ops{S}_\sigma$ is:
-$$\begin{array}{l}
-\ops{S}_\sigma(\skel_X(\rl,P,\Theta_X,\prec,N,U)) = {}\\
-\quad\skel_Y(\rl,P,
-s\mapsto \comp\sigma{\Theta_X(s)},\prec,\sigma(N), \sigma(U))
-\end{array}$$
-\end{defn}
-
-For $k'=\ops{S}_\sigma(k)$, there is a homomorphism from~$k$ to~$k'$
-only if for all $t\in U_k$,
-$\orig_k(t)\subseteq\orig_{k'}(\sigma(t))$.  The structure preserving
-maps associated with the homomorphism are~$\idphi$ and~$\sigma$.
-
-\begin{defn}[Compression Operator]\label{def:compression operator}
-For distinct strands~$s$ and~$s'$, operator~$\ops{C}_{s,s'}$
-compresses strand~$s$ into~$s'$.
-$$\begin{array}{l}
-\ops{C}_{s,s'}(\skel_X(\rl,P,\Theta_X,\prec,N,U)) = {}\\
-\quad \skel_X(\comp\rl{\phi'_s},P,
-\comp{\Theta_X}{\phi'_s},\prec',N,U)
-\end{array}$$
-where
-$$\begin{array}{r@{}c@{}l}
-\phi'_s(j)&{}={}&\left\{
-\begin{array}{ll}
-j+1&\mbox{if $j\geq s$}\\
-j&\mbox{otherwise,}
-\end{array}\right.
-\end{array}$$
-relation $\prec'$ is the transitive closure of $\phi_{s,s'}(\prec)$, and
-$$\begin{array}{r@{}c@{}l}
-\phi_{s,s'}(j)&{}={}&\left\{
-\begin{array}{ll}
-\phi_s(s')&\mbox{if $j=s$}\\
-\phi_s(j)&\mbox{otherwise}
-\end{array}\right.\\
-\phi_s(j)&{}={}&\left\{
-\begin{array}{ll}
-j-1&\mbox{if $j>s$}\\
-j&\mbox{otherwise.}
-\end{array}\right.
-\end{array}$$
-\end{defn}
-
-The compression operator is only used when $\Theta_X(s)$ is a prefix
-of $\Theta_X(s')$, and when there is a homomorphism from~$k$ to
-$\ops{C}_{s,s'}(k)$.  The structure preserving maps associated with
-the homomorphism are~$\phi_{s,s'}$ and~$\idsigma$.  Note that the
-compression operator is defined only when relation~$\prec'$ is
-asymmetric, and that $\comp{\phi_{s,s'}}{\phi'_s}=\idphi$.
-
-\begin{defn}[Ordering Enrichment Operator]\label{def:order enrichment operator}
-Operator~$\ops{O}$ applied to~$k$ enriches~$\kprec{k}$ by adding all
-elements implied by unique origination.  That is $\ops{O}(k)=
-\skel_X(\rl,P,\Theta_X,\prec',N,U))$, where
-$k=\skel_X(\rl,P,\Theta_X,\prec,N,U)$ and $\prec'=
-(\prec\cup\{(n_0,n_1)\mid n_0\in\orig(k,t)\land
-n_1\in\gain(k,t)\})^\ast$.
-\end{defn}
-
-The ordering enrichment operator is total and idempotent.  The
-structure preserving maps associated with the operator's homomorphism
-are~$\idphi$ and~$\idsigma$, i.e.\ the homomorphism is an embedding.
-
-\begin{defn}[Augmentation Operator]\label{def:augmentation operator}
-For node~$n$, role~$r$, and trace~$C$, operator~$\ops{A}_{n,r,C}$ is:
-$$\begin{array}{l}
-\ops{A}_{n,r,C}(\skel_X(\rl,P,\Theta_X,\prec,N,U)) = {}\\
-\quad\skel_{X'}(\rl\append r,P,
-\Theta_X(s)\append C,\prec',N',U')
-\end{array}$$
-where $X'$ is $X$ extended to include the variables in~$C$,
-$\prec'$ is the minimal extension of $\prec$ such that
-$(|\Theta_X|+1,|C|)\prec' n$, $N'$ is $N$ extended with
-non-origination assumptions inherited from~$r$ by~$C$, and likewise
-for~$U'$.
-\end{defn}
-
-The structure preserving maps associated with the augmentation
-operator's homomorphism are~$\idphi$ and~$\idsigma$, i.e.\ the
-homomorphism is an embedding.
-
-\chapter{Reductions on Preskeletons}\label{chp:preskeleton reduction}
-
-This chapter describes the algorithm used to transform a preskeleton
-into a skeleton as a setwise term reduction system
-$(\alg{K},\twoheadrightarrow)$.  Recall that the relation
-$k\rightsquigarrow K$ in Chapter~\ref{chp:algorithms} is defined in
-terms of $\to\subseteq\alg{K}\times\alg{K}$ by specifying
-$\{k\}\twoheadrightarrow K$ using~$\to$.  Additionally, when
-$k=\skel(\rl,P,\Theta,\prec,N,U)$, $U_k$ is used to name~$U$, and so
-forth for other components of~$\skel$.
-
-If a preskeleton $k$ is not a skeleton, then it is either because some
-$t\in U_k$ actually originates at more than one node, or because for
-some $t\in U_k$, there is a node $n_1\in\gain_k(t)$, and a node
-$n_0\in\orig_k(t)$ such that $n_0\nprec_k n_1$.  A preskeleton in
-which an atom assumed to be uniquely originating originates more than
-once is simply expunged.  The second obstruction is resolved by
-enriching node orderings.  A \index{hulled
-  preskeleton}\index{preskeleton!hulled}\emph{hulled preskeleton} is a
-preskeleton in which every uniquely originating atom originates at
-most once, but it may lack some node orderings needed to be a
-skeleton.
-
-Skeletons may contain ``effectively equivalent'' strands.  After
-converting preskeletons to skeletons, a preskeleton reduction system
-may remove effectively equivalent strands using a process called
-\index{thinning}thinning.  A skeleton without any effectively
-equivalent strands is called a \index{thinned
-  skeleton}\index{skeleton!thinned}\emph{thinned skeleton}.
-
-\begin{defn}[Hulling Reduction]\label{def:hulling}
-A non-hulled preskeleton~$k$ is expunged.  The setwise hulling
-reduction rule is $\{k\}\setreduction{\ops{H}}\{\}$ when~$k$ is not
-hulled.
-\end{defn}
-
-\begin{defn}[Order Enrichment]
-Suppose hulled preskeleton~$k_0$ is not a skeleton.  Hulled
-preskeleton~$k_0$ reduces to skeleton~$k_1$ by order enrichment, written
-$k_0\reduction{\ops{O}}k_1$, iff~$k_1$ is the result of adding node
-orderings implied by origination.  That is,
-$\kprec{k_1}= (\kprec{k_0}\cup\{(n_0,n_1)\mid n_0\in\orig(k_0,t)\land
-n_1\in\gain(k_0,t)\})^\ast$.
-There is a homomorphism from~$k_0$ to~$k_1$ that is an embedding.  For
-the setwise order enrichment reduction,
-$\{k_0\}\setreduction{\ops{O}}\{k_1\mid k_0\reduction{\ops{O}}k_1\}$
-when $k_0$ is a hulled preskeleton that is not a skeleton.
-\end{defn}
-
-The thinning operator~$\ops{T}_s$ removes an \index{effectively
-  equivalent strands}effectively equivalent strand.
-
-\begin{defn}[Thinning]\label{def:thinning}
-Two strands $s$ and $s'$ in a skeleton $k$ are \emph{effectively
-  equivalent} if $k$ with $s$ removed and $k$ with $s'$ removed are
-isomorphic.  (Page~\pageref{def:isomorphic preskeletons} defines
-isomorphic skeletons.)  Skeleton $k_0$ reduces to skeleton $k_1$ by
-thinning, written $k_0\reduction{\ops{T}_s}k_1$, if and only if there
-exists a strand $s'$ that is effectively equivalent to $s$ in $k_0$
-and $k_1$ is isomorphic to both $k_0$ with $s$ removed and $k_0$ with
-$s'$ removed.  In detail, $k_0\reduction{\ops{T}_s}k_1$ if and only if
-there exists a strand $s'$ such that
-\begin{enumerate}
-\item strands $s$ and $s'$ are not in the image of~$k_0$'s
-  strand map from the point-of-view skeleton;
-\item $|\Theta_{k_0}(s)|=|\Theta_{k_0}(s')|$;
-\item there is a matcher~$\sigma$ such that
-  $\comp{\sigma}{\Theta_{k_0}(s)}\equiv \Theta_{k_0}(s')$;
-\item for all variables in $k_0$ with~$s$ removed,
-  matcher~$\sigma$ is the identity;
-\item matcher~$\sigma$ is a bijection, also called a renaming;
-\item $k_0\reduction{\ops{S}_\sigma}k\reduction{\ops{C}_{s,s'}}k_1$;
-\item $k_0\reduction{\ops{S}_\sigma}k\reduction{\ops{C}_{s',s}}k_2$;
-\item $k_1$ is isomorphic to $k_2$.
-\end{enumerate}
-
-For the setwise thinning reduction,
-$\{k_0\}\setreduction{\ops{T}_s}\{k_1\mid
-k_0\reduction{\ops{T}_s}k_1\}$, when there is a $k_1$ such that
-$k_0\reduction{\ops{T}_s}k_1$.
-\end{defn}
-
-Thinning in {\cpsa} is also implemented for the case of sets of
-multiple strands rather than pairs of individual strands.  The
-correctness of thinning has yet to be demonstrated.
-
-\section{Reduction Systems}
-
-Notice that a setwise hulling reduction may produce the empty set, but
-a setwise order enrichment and thinning reduction never does.
-
-There are two preskeleton reduction systems, one with thinning, and one
-without.  For the one without, let reduction $\twoheadrightarrow=
-\bigcup_{s,s'}\setreduction{\ops{H}}\cup\setreduction{\ops{O}}$.
-
-\begin{defn}[Preskeleton Reduction System]
-Preskeleton~$k_0$ reduces to skeleton~$k_1$,
-written~$k_0\reduction{\fn{skel}}k_1$\index{skel@\fn{skel}}, if
-$\{k_0\}\twoheadrightarrow^\ast K$, $k_1\in K$, and~$K$ is a normal
-form of~$\twoheadrightarrow$.
-\end{defn}
-
-For each skeleton~$k$, $k\reduction{\fn{skel}}k$.
-
-When using thinning, let reduction $\twoheadrightarrow=
-\bigcup_{s,s'}\setreduction{\ops{H}}\cup\setreduction{\ops{O}}\cup
-\bigcup_s\setreduction{\ops{T}_s}$.
-
-\begin{defn}[Preskeleton Reduction System with Thinning]
-Preskeleton~$k_0$ reduces to thinned skeleton~$k_1$,
-written~$k_0\reduction{\fn{tskel}}k_1$\index{tskel@\fn{tskel}}, if
-$\{k_0\}\twoheadrightarrow^\ast K$, $k_1\in K$, and~$K$ is a normal
-form of~$\twoheadrightarrow$.
-\end{defn}
-
-For each thinned skeleton~$k$, $k\reduction{\fn{tskel}}k$.
-
-\chapter{Penetrator Derivable}\label{chp:penetrator derivable}
-
-For each algebra, the powers of the adversary are defined by a set of
-roles.  For the Basic Crypto Signature in Figure~\ref{fig:bcs}, the
-traces of the penetrator roles are in Figure~\ref{fig:pen traces}.
-Penetrator roles make no origination assumptions.
-
-\begin{figure}
-$$\begin{array}{l}
-\fn{base}(t)=\seq{\outbnd t},\mbox{ where $t$ is an atom}\\
-\fn{tag}(t)=\seq{\outbnd t},\mbox{ where $t$ is a tag}\\
-\fn{cat}(t_0,t_1)=\seq{\inbnd t_0,\inbnd t_1, \outbnd(t_0,
-  t_1)}\\
-\fn{sep}(t_0,t_1)=\seq{\inbnd(t_0, t_1),\outbnd
-    t_0,\outbnd t_1}\\
-\fn{enc}(t_0,t_1)=\seq{\inbnd t_0,\inbnd t_1,
-\outbnd\enc{t_0}{t_1}}\\
-\fn{dec}(t_0,t_1)=\seq{\inbnd\enc{t_0}{t_1},
-\inbnd t_2,\outbnd t_0},\mbox{ where $t_2=\fn{inv}(t_1)$}\\
-\fn{hash}(t)=\seq{\inbnd t,\outbnd\hash t}
-\end{array}$$
-\caption{Penetrator Traces}\label{fig:pen traces}
-\end{figure}
-
-The context in which penetrator strands appear determine the messages
-the adversary can derive.  The context includes previously sent
-messages and atoms it is forbidden to originate.  An atom that is
-assumed to be non-originating must be avoided as is a uniquely
-originating atom that is assumed to originate on a regular strand.
-
-The ternary relation \der{t}{T_p}{T_a} states that message~$t$ is
-penetrator derivable from previously sent messages~$T_p$ while
-avoiding atoms~$T_a$.  The relation is defined by a set of inference
-rules.  Most of the rules are justified by a penetrator role that when
-instantiated, derives a message in the conclusion of the rule.
-
-The first rule states that no additional penetrator behavior is required
-to derive~$t$ if it has been previously sent.
-$$\infer{t\in{T_p}}{\der{t}{T_p}{T_a}}$$
-
-A uniquely originating atom need not be avoided if it has been sent.
-\begin{equation}\label{eqn:avoid}
-\infer{\der{t}{T_p}{T_a}}%
-{\der{t}{\{t_0\}\cup T_p}{\{t_0\}\cup T_a}}
-\end{equation}
-
-There are two decomposition steps available to the penetrator.
-\begin{equation}\label{eqn:sep}
-\infer{\der{t}{\{t_0,t_1\}\cup T_p}{T_a}}%
-{\der{t}{\{(t_0,t_1)\}\cup T_p}{T_a}}\quad
-[\mbox{by $\fn{sep}(t_0,t_1)$}]
-\end{equation}
-\begin{equation}\label{eqn:dec}
-\infer{\der{\fn{inv}(t_1)}{T_p}{T_a}\qquad
-\der{t}{\{t_0,\enc{t_0}{t_1}\}\cup T_p}{T_a}}%
-{\der{t}{\{\enc{t_0}{t_1}\}\cup T_p}{T_a}}\quad
-[\mbox{by $\fn{dec}(t_0,t_1)$}]
-\end{equation}
-
-There are three constructive steps.
-$$\infer{\der{t_0}{T_p}{T_a}\qquad\der{t_1}{T_p}{T_a}}%
-{\der{(t_0,t_1)}{T_p}{T_a}}\quad
-[\mbox{by $\fn{cat}(t_0,t_1)$}]$$
-$$\infer{\der{t_0}{T_p}{T_a}\qquad\der{t_1}{T_p}{T_a}}%
-{\der{\enc{t_0}{t_1}}{T_p}{T_a}}\quad
-[\mbox{by $\fn{enc}(t_0,t_1)$}]$$
-$$\infer{\der{t}{T_p}{T_a}}%
-{\der{\hash{t}}{T_p}{T_a}}\quad
-[\mbox{by $\fn{hash}(t)$}]$$
-
-There are three rules for indivisible messages.
-$$\der{C_i}{T_p}{T_a}\quad
-[\mbox{by $\fn{tag}(C_i)$}]$$
-$$\infer{t\notin T_a\qquad\mbox{$t$ an atom}}%
-{\der{t}{T_p}{T_a}}\quad
-[\mbox{by $\fn{base}(t)$}]$$
-A non-base sorted variable is derivable in a bundle that instantiates
-it with any message other than an element of $X_\top$.
-$$\infer{t\in X_\top}{\der{t}{T_p}{T_a}}$$
-
-\begin{defn}[Outbound predecessors]
-The \index{outbound predecessors}\emph{outbound predecessors} of
-skeleton~$k$ at~$n$ is $\outpred(k,n)=\{\msg_k(n_0)\mid n_0 \kprec{k}
-n, n_0\mbox{~is transmitting}\}$.
-\end{defn}
-
-\begin{defn}[Avoidance Set]\label{def:avoid}
-The \index{avoidance set}\emph{avoidance set} of skeleton~$k$ is
-$\avoid(k)=N_k\cup\{t\mid t\in U_k\land|\orig_k(t)|=1\}$.
-\end{defn}
-
-An atom in $\avoid(k)$ is not available to the penetrator, except
-if it is exposed by a messages transmission.  Clearly, only uniquely
-originating atoms can be exposed.
-
-\begin{defn}[Derivable Before]\label{def:der}
-A message~$t$ is \index{derivable before}\emph{derivable before}
-reception node~$n$ in skeleton~$k$, written $\fn{der}(k,n,t)$, if
-$\der{t}{T_p}{T_a}$ where $T_p=\outpred(k,n)$ and $T_a=\avoid(k)$.
-\end{defn}
-
-\begin{defn}[Realized Node]
-A reception node~$n$ is \emph{realized} in skeleton~$k$ if
-$\msg_k(n)$ is derivable before~$n$ in~$k$.
-\end{defn}
-
-Notice that one can read off penetrator behavior from the proof tree
-used to demonstrate that $\msg_k(n)$ is derivable before~$n$
-in~$k$.  For example, if a decryption step is required by the proof,
-an instance of the penetrator's decryption role is indicated.  In a
-bundle, for a non-base sorted variable, there is a substitution that
-maps the variable to a message that is not a non-base sorted variable.
-The substitution determines the penetrator behavior associated with
-the variable.
-
-\begin{conj}[Realized Skeleton]
-A skeleton is realized if and only if all of its reception nodes are
-realized.
-\end{conj}
-
-\begin{proof}[Partial Proof]
-Given a skeleton~$k$ in which all of its reception nodes are realized,
-the combination of the regular behavior in the skeleton, the
-penetrator behavior specified by the proof trees used to demonstrate
-each node is realized, and a substitution for non-base sorted
-variables determines a bundle.  The skeleton of the bundle may have
-more non-originating atoms than is in $N_k$, however since the
-extra non-originating atoms are derivable by the bundle that
-realizes~$k$, the proof trees for those atoms specify any additional
-penetrator behavior required.
-
-The ``only if'' part of this proof has yet to be completed.
-\end{proof}
-
-\section{Implementation}\label{sec:derivable implementation}
-
-The derivable before a node predicate is implemented using auxiliary
-functions.
-
-\begin{defn}[Buildable]
-Message~$t$ is \index{buildable}\emph{buildable} from previously sent
-messages~$T_p$ while avoiding~$T_a$, written $\fn{bld}(t,T_p,T_a)$, if
-\der{t}{T_p}{T_a} without the use of Inference Rules \ref{eqn:avoid},
-\ref{eqn:sep}, and~\ref{eqn:dec}.
-\end{defn}
-
-Consider the following reduction system based on Inference Rules
-\ref{eqn:avoid}, \ref{eqn:sep}, and~\ref{eqn:dec}.
-$$\begin{array}{r@{}c@{}ll}
-\dctx{\{t\}\cup T_p}{T_a}&{}\to{}&\dctx{T_p}{T_a}\setminus\{t\}
-&\mbox{if $t$ is an atom or in $X_{\top}$}\\
-\dctx{\{(t_0,t_1)\}\cup T_p}{T_a}&{}\to{}
-&\dctx{\{t_0,t_1,(t_0,t_1)\}\cup T_p}{T_a}
-&\mbox{if $t_0,t_1\notin T_p$}\\
-\dctx{\{\enc{t_0}{t_1}\}\cup
-T_p}{T_a}&{}\to{}&\dctx{\{t_0,\enc{t_0}{t_1}\}\cup T_p}{T_a}
-&\mbox{if $t_0\notin T_p$ and}\\
-&&&\fn{bld}(\fn{inv}(t_1),T_p,T_a)
-\end{array}$$
-
-\begin{defn}[Decompose]
-Previously sent messages~$T_p$ and avoidance set~$T_a$
-\emph{decompose} to $T'_p,T'_a$, written
-$\fn{decompose}(T_p,T_a)=(T'_p,T'_a)$, if
-$\dctx{T_p}{T_a}\to^\ast\dctx{T'_p}{T'_a}$
-and $(T'_p,T'_a)$ is a normal form of reduction~$\to$.
-\end{defn}
-
-The penetrator derivable predicate $\der{t}{T_p}{T_a}$ is implemented as
-\begin{center}
-\begin{tabular}{l}
-$\der{t}{T_p}{T_a}={}$\\
-\quad\textbf{let} $T'_p, T'_a=\fn{decompose}(T_p,T_a)$ \textbf{in}\\
-\quad$\fn{bld}(t,T'_p,T'_a)$
-\end{tabular}
-\end{center}
-
-The decomposition at a node function is
-\begin{center}
-\begin{tabular}{l}
-$\fn{dcmp}(k,n)={}$\\
-\quad$\fn{decompose}(\outpred(k,n),\avoid(k))$
-\end{tabular}
-\end{center}
-
-The derivable before a node predicate is implemented as
-\begin{center}
-\begin{tabular}{l}
-$\fn{der}(k,n,t)={}$\\
-\quad\textbf{let} $T_p, T_a=\fn{dcmp}(k,n)$ \textbf{in}\\
-\quad$\fn{bld}(t,T_p,T_a)$
-\end{tabular}
-\end{center}
-
-\chapter{Carried Only Within}\label{chp:cow}
-
-A set of encryptions~$T_e$ protects critical message~$t$ in
-message~$t'$ if~$t$ is carried by~$t'$ only within a member of~$T_e$.
-The definition of the carried only within ({\cow}) relation to follow makes
-this concept precise.  The concept is used when solving authentication
-tests (Chapter~\ref{chp:auth tests}).
-
-\begin{defn}[Ancestors]
-Let $t'=t\termat p$.  The \index{ancestors}\emph{ancestors} of~$t'$
-in~$t$ at~$p$ is the set $\fn{anc}(t,p)=\{t\termat p'\mid \mbox{$p'$ a
-  proper prefix of~$p$}\}$.
-\end{defn}
-
-\begin{defn}[Carried Only Within]\label{def:cow}
-Message~$t$ is \index{carried only within}\emph{carried only within}
-set~$T_e$ in~$t'$ if for all \index{carried positions}carried
-positions~$p$ of~$t$ in~$t'$, there exists an
-ancestor~$t_a\in\fn{anc}(t',p)$ and $t_e\in T_e$ such that~$t_a\equiv
-t_e$.
-\end{defn}
-
-The function defines $\fn{carpos}(t,t')$ is defined on
-Page~\pageref{def:carried positions}, the set of positions at
-which~$t'$ carries~$t$.  The interface to each algebra exports
-\index{unify}$\fn{unify}_0$, where
-$$\fn{unify}_0(t,t',\sigma)=\{\sigma'\circ\sigma\mid
-\sigma'\in\fn{unify}(\sigma(t),\sigma(t'))\}.$$
-
-The details of a reduction on skeletons called a augmentation will be
-described in Section~\ref{sec:augmentation}.  In simplified form, for
-an augmentation, given~$t$,~$T_e$, and~$t'$, one must find all most
-general unifiers~$\sigma$ such that~$\sigma(t)$ is carried only within
-set~$\sigma(T_e)$ in~$\sigma(t')$.
-
-\begin{figure}
-\begin{center}
-\begin{tabular}{l}
-$\fn{cows}(t,T,t') ={}$\\
-\quad $\fn{cows}_0(t,T,t',\idsigma)$
-\quad --- $\idsigma$ is the identity
-subst \\
-\\
-$\fn{cows}_0(t,T,t',\sigma) ={}$\\
-\quad \textbf{if} $\sigma(t)$ is {\cow} $\sigma(T)$ at
-$\sigma(t')$ \textbf{then}\\
-\qquad $\{\sigma\}$\\
-\quad \textbf{else}\\
-\qquad\textbf{let}
-$S=\fn{fold}(t,T,t',\sigma)$
-\textbf{in}\\
-\qquad$\bigcup_{\sigma'\in S}
-\fn{cows}_0(t, T, t',\sigma')$\\
-\\
-$\fn{fold}(t,T,t',\sigma)={}$\\
-$\quad\{\sigma'\circ\sigma\mid\sigma'\in
-\fn{fold}_0(\sigma(T),\sigma(t'),\{\idsigma\},
-\fn{carpos}(\sigma(t),\sigma(t')))$\\
-\\
-$\fn{fold}_0(T,t',S,\{\})=S$\\
-$\fn{fold}_0(T,t',S,\seq{p}\append P)={}$\\
-\quad $\fn{fold}_0(T,t',\fn{solve}(\fn{anc}(t',p),T,S),P)$\\
-\\
-$\fn{solve}(T,T',S)={}$\\
-\quad$\{\sigma'\mid t\in T, t'\in T',
-\sigma\in S, \sigma'\in\fn{unify}_0(t,t',\sigma)\}$
-\end{tabular}
-\end{center}
-\caption{The \fn{cows} Function}\label{fig:cows}\index{cows@\fn{cows}}
-\end{figure}
-
-A carried only within solution cannot be directly computed using
-Definition~\ref{def:cow}.  Given terms~$t_a$ and~$t_e$, the
-$\fn{unify}_0$ function finds substitutions~$\sigma$ such
-$\sigma(t_a)\equiv \sigma(t_e)$, however, the carried positions
-$\fn{carpos}(\sigma(t),\sigma(t'))$, are used before the
-$\fn{unify}_0$ function computes the substitution~$\sigma$.
-Figure~\ref{fig:cows} displays the iterative procedure that breaks the
-cyclic dependencies.  Each step of the iteration improves an
-approximation of a solution to the problem.  The correctness of this
-function is shown in~\cite{algimpl11}, although for a version of the
-algorithm with the alternate definition for the function~$\fn{fold}$ in
-Figure~\ref{fig:fold}.
-
-\begin{figure}
-\begin{center}
-\begin{tabular}{l}
-$\fn{fold}(t,T,t',\sigma)={}$\\
-$\quad\fn{fold}_0(t,T,t',\sigma,\{\idsigma\},\fn{carpos}(\sigma(t), \sigma(t')))$\\
-\\
-$\fn{fold}_0(t,T,t',\sigma,S,\{\})=\{\sigma' \circ \sigma | \sigma' \in S\}$\\
-$\fn{fold}_0(t,T,t',\sigma,S,\seq{p} \append P)={}$\\
-\quad
-$\fn{fold}_0(t,T,t',\sigma,\fn{solve}(\fn{anc}(\sigma(t'),p),\sigma(T),S),P)$\\
-\end{tabular}
-\end{center}
-\caption{The Alternate \fn{fold} Function}\label{fig:fold}
-\end{figure}
-
-\chapter{Solving Authentication Tests}\label{chp:auth tests}
-
-\begin{defn}[Protectors]
-Let \fn{deriv} be a boolean valued function that determines if a
-message is derivable.  The encryptions that
-\index{protectors}protect~$t_c$ in~$t$ is
-$\fn{protectors}(\fn{deriv},t_c, t) = \fn{prot}(t)$ where
-$$\fn{prot}(t) =\left\{
-\begin{array}{ll}
-\mbox{undefined}&\mbox{if $t\equiv t_c$, else}\\
-\{\}&\mbox{if $t=\enc{t_0}{t_1}$ and $t_c$ is not carried by~$t_0$, else}\\
-\{\enc{t_0}{t_1}\}&
-\mbox{if $t=\enc{t_0}{t_1}$ and $\lnot\fn{deriv}(\fn{inv}(t_1))$, else}\\
-\fn{prot}(t_0)&\mbox{if $t=\enc{t_0}{t_1}$, else}\\
-\bigcup_{i<n}\fn{prot}(t_i)&\mbox{if $t=f(t_0,\ldots,t_{n-1})$ and~$t$
-  is not an atom, else}\\
-\{\}&\mbox{otherwise.}
-\end{array}\right.$$
-\end{defn}
-
-\begin{defn}[Escape Set]
-The \index{escape set}\emph{escape set} for message~$t_c$ at~$n$ in
-skeleton~$k$ is the set of encryptions $\fn{esc}(k,n,t_c)$ where
-$$\fn{esc}(k,n,t_c)=\{t_e\mid t_e\in\fn{protectors}(\lambda
-t\mathpunct.\fn{der}(k,n,t),t_c,t_o), t_o\in\outpred(k,n)\}$$
-and~$\fn{der}(k,n,t)$ is true when $t$ is derivable before~$n$ in~$k$
-(See Definition~\ref{def:der}).
-\end{defn}
-
-The $\fn{der}$ function is implemented as
-$\fn{der}(k,n,t)=\fn{bld}(t,T_p,T_a)$ where
-$(T_p,T_a)=\fn{dcmp}(k,n)$, so that~$T_p$ and~$T_a$ need not be
-recomputed.
-
-\begin{defn}[Critical Position]\label{def:critical position}
-Position~$p$ is a \index{critical position}\emph{critical position} of
-$t=\msg_k(n)$ if
-\begin{enumerate}
-\item $p$ is a carried position in~$t$,
-\item either $t\termat p\in U_k$, $t\termat p=\hash t_1$, or $t\termat
-  p=\enc{t_0}{t_1}$ and~$t_1$ is not derivable before~$n$ in~$k$,
-  \label{item:nonce or encryption}
-\item $\fn{esc}(k,n,t\termat p)$ is defined, and
-\item $\fn{anc}(t,p)\cap \fn{esc}(k,n,t\termat p)=\emptyset$.
-\end{enumerate}
-\end{defn}
-
-The message at a critical position is called an \emph{authentication
-  test}.  It is a \index{nonce test}\emph{nonce test} if the message
-is an atom, otherwise it is a \index{encryption test}\emph{encryption
-  test}.  (A hash\index{hash} is treated as a kind of encryption in
-which the term that is hashed is the encryption key.)  Observe that
-every critical message at a node in a skeleton is not derivable at the
-node.
-
-\begin{conj}
-A reception node is unrealized iff it has a critical position.
-\end{conj}
-
-\begin{defn}[Target Messages]
-Let $T_e$ be a set of messages, and~$t_c$ be a message.  The set of
-\index{target messages}\emph{target messages} is
-$$\fn{targ}(t_c,T_e)=\{t_c\}\cup\{t_t\mid t_e\in T_e,p\in\fn{carpos}(t_c, t_e),
-t_t\in\fn{anc}(t_e,p)\}\setminus T_e.$$
-\end{defn}
-
-\begin{defn}[Critical Position Solved]\label{def:critical position solved}
-Suppose~$p$ is a critical position at~$n_0$ in~$k_0$ and
-$k_0\homomorphism{\phi,\sigma}k_1$.  Let~$t_0=\msg_k(n)\termat p$,
-$t_1=\sigma(t_0)$, $T_0=\fn{esc}(k_0,n_0,t_0)$, $T_1=\sigma(T_0)$,
-$n_1=\phi(n_0)$, and~$t=\msg_{k_1}(n_1)$.  Critical position~$p$ is
-\index{solved critical position}\emph{solved} in~$k_1$ after~$k_0$
-at~$n_0$ if:
-\begin{enumerate}
-\item $\fn{anc}(t,p)\cap T_1\neq\emptyset$, or
-\item for some~$t_p\in\outpred(k_1,n_1)$, $t_1$ is not carried
-  only within~$T_1$ in~$t_p$, or
-\item
-  $\fn{targ}(t_1,\fn{esc}(k_1,n_1,t_1))\setminus\sigma(\fn{targ}(t_0,T_0))\neq\emptyset$
-  and there are variables in $k$'s protocol that are not atoms, or
-\item the decryption key of a member of~$T_1$ is derivable
-  before~$n_1$ in~$k_1$, or
-\item $t_1$ is an encryption and its encryption key is derivable
-  before~$n_1$ in~$k_1$.
-\end{enumerate}
-\end{defn}
-
-\section{Test Solving Steps}
-
-A step used to solve a test is a contraction
-(Definition~\ref{def:contraction}), a regular augmentation
-(Definition~\ref{def:regular augmentation}), a displacement
-(Definition~\ref{def:displacement}), or a listener augmentation
-(Definition~\ref{def:listener augmentation}).
-
-\begin{defn}[Contraction]\label{def:contraction}
-Let~$p$ be a critical position
-at~$n$ in~$k$, $t=\msg_k(n)$, and $T_e= \fn{esc}(k,n,t\termat p)$.
-Suppose there is a substitution~$\sigma$ such that for
-some~$t_a\in\fn{anc}(t,p)$, $t_e\in T_e$, $\sigma(t_a)=\sigma(t_e)$.
-Skeleton~$k_1$ is a \index{contraction}\emph{contraction} if
-$k\reduction{\ops{S}_\sigma}k_0\reduction{\fn{tskel}}k_1$.
-\end{defn}
-
-{\cpsa} computes a set of substitutions for each critical position, and
-then removes some substitutions to form a complete set of most
-general unifiers.  Only most general unifiers are used for
-contractions.
-
-\begin{defn}[Regular Augmentation]\label{def:regular augmentation}
-Suppose substitution~$\sigma$, non-listener role~$r$, and trace~$C$
-are selected as described in Section~\ref{sec:augmentation}.
-Skeleton~$k_2$ is a \index{regular augmentation}\emph{regular
-  augmentation} if
-$k\reduction{\ops{S}_\sigma}k_0\reduction{\ops{A}_{n,r,C}}k_1
-\reduction{\fn{tskel}}k_2$.
-\end{defn}
-
-\begin{defn}[Displacement]\label{def:displacement}
-Let substitution~$\sigma$, non-listener role~$r$, and trace~$C$ be
-selected as described in Section~\ref{sec:augmentation}, and there be
-a preskeleton~$k_1$ such that
-$k\reduction{\ops{S}_\sigma}k_0\reduction{\ops{A}_{n,r,C}}k_1$.
-Suppose there are strands~$s$ and~$s'$, where one of them is the newly
-created strand, and a most general unifier~$\sigma'$ such that
-$\sigma'(\Theta_{k_1}(s)(j))\equiv \sigma'(\Theta_{k_1}(s')(j))$ for
-$0\leq j<|\Theta_{k_1}(s)|$.  Skeleton~$k_4$ is a
-\index{displacement}\emph{displacement} if
-$k_1\reduction{\ops{S}_{\sigma'}}k_2\reduction{\ops{C}_{s,s'}}k_3
-\reduction{\fn{tskel}}k_4$.
-\end{defn}
-
-\begin{defn}[Listener Augmentation]\label{def:listener augmentation}
-Let~$p$ be a critical position at~$n$ in~$k$, $t_c=\msg_k(n)\termat
-p$, and $T_e= \fn{esc}(k,n,t_c)$.  For each $\enc{t_0}{t_1}\in T_e$,
-skeleton~$k_1$ is a \index{listener augmentation}\emph{listener
-  augmentation} if
-$k\reduction{\ops{A}_{n,\lsn,C}}k_0\reduction{\fn{tskel}}k_1$ and~$C$
-listens for $\fn{inv}(t_1)$,
-i.e.\ $C=\seq{\inbnd\fn{inv}(t_1),\outbnd\fn{inv}(t_1)}$.  If
-$t_c=\enc{t_0}{t_1}$, then skeleton~$k_1$ is a \emph{listener
-  augmentation} if
-$k\reduction{\ops{A}_{n,\lsn,C}}k_0\reduction{\fn{tskel}}k_1$ and
-$C=\seq{\inbnd t_1,\outbnd t_1}$.
-\end{defn}
-
-For regular augmentation and displacement, {\cpsa} removes solutions
-that lead to skeletons that are less general than other solutions,
-that is, when there is a homomorphism from a solution to the omitted
-solution.
-
-\begin{defn}[Cohort Member]\label{def:cohort member}
-For unrealized node~$n$ in a skeleton~$k_0$, and a position~$p$
-at~$n$, $k_0\reduction{n,p}k_1$ asserts that $k_1$ is a member of the
-\index{cohort}cohort of~$k_0$, where~$k_1$ is derived using
-contraction, regular augmentation, displacement, or listener
-augmentation, and~$p$ is solved in~$k_1$ after~$k_0$ at~$n$.  For the
-setwise cohort member reduction, $\{k_0\}\setreduction{n,p}\{k_1\mid
-k_0\reduction{n,p}k_1\}$, when~$n$ is unrealized in~$k_0$, and~$p$ is
-a critical position at~$n$.
-\end{defn}
-
-\begin{conj}[Critical Message Solved]
-If $k_0\reduction{n_0,p_0}k_1 \reduction{n_1,p_1}\ldots
-\reduction{n_{\ell-1},p_{\ell-1}}k_\ell$ is a sequence of cohort member
-reductions, then for positive~$\ell$,~$p_0$ is solved in~$k_\ell$
-after~$k_0$ at~$n_0$.
-\end{conj}
-
-\section{Augmentation}\label{sec:augmentation}
-
-Let~$t_c$ be the critical message that demonstrates~$n$ is a test node
-in skeleton~$k$.  For each triple~$(\sigma,r,C)$ that satisfies some
-properties, there is a potential regular augmentation
-with~$\comp{\reduction{\fn{tskel}}}%
-{\comp{\reduction{\ops{A}_{n,r,C}}}{\reduction{\ops{S}_\sigma}}}$.
-When successful, the message~$t$ in the last event of the added strand
-is outbound, carries~$\sigma(t_c)$, but~$\sigma(t_c)$ is not carried
-only within escape set~$\sigma(T_e)$ in~$t$, where
-$T_e=\fn{esc}(k,n,t_c)$, the escape set.  Moreover, for every other
-message~$t$ in the strand,~$\sigma(t_c)$ is carried only within escape
-set~$\sigma(T_e)$ in~$t$.  The last event in the strand is called a
-\index{transforming event}\emph{transforming event}, as this event no
-longer protects the critical message, but events that precede it do.
-
-{\cpsa} computes the parameters for a set of augmentation steps as
-follows.  Suppose skeleton~$k=\skel_X(\_,P,\_,\_,\_,\_)$.  First,
-compute the target messages, $T_t=\fn{targ}(t_c, T_e)$.  Next, for
-each non-listener role $\role(C_r,N_r,U_r)\in P$ and each index~$h$ where
-$C_r(h)=\outbnd t$, a transmission, do the following.
-
-\begin{description}
-\item[Create fresh variables:] Let~$\sigma_r$ be a sort preserving
-  variable renaming, where the domain is the variables that occur in
-  $\prefix{C_r}h$, and every variable in the range does not occur
-  in~$X$ or in~$P$.
-
-\item[Insert critical message:] For each message~$t'$ carried by~$t$,
-  and each~$t_t\in \fn{targ}(t_c, T_e)$, consider most general
-  unifiers~$\sigma'$ where, $\sigma'(t')=\sigma'(t_t)$ and
-  $\sigma_r\unlhd\sigma'$.  (In other words,
-  $\sigma'=\sigma_0\circ\sigma_r$ for some $\sigma_0$.)
-
-\item[Ensure previous events do not transform:] For each $\sigma'$,
-  find most general unifiers~$\sigma$ such that for $0\leq i<h$,
-  $\sigma(t_c)$ is carried only within $\sigma(T_e)$ at $\sigma(C(i))$
-  and $\sigma'\unlhd\sigma$.  The function \fn{cowt}, presented in
-  Figure~\ref{fig:cowt}, performs the explorations, producing the
-  substitutions $S'=\fn{cowt}(t_c,T_e,\prefix{C_r}{h},S)$.  Function
-  $\fn{fold}$ is defined in Figure~\ref{fig:cows}.  Let $S_{r,h}$ be
-  the set~$S'$ with non-most general unifiers removed.
-\item[Ensure last event transforms:] For each $\sigma\in S_{r,h}$, if
-  $\sigma(t_c)$ is not carried only with $\sigma(T_e)$ at
-  $\sigma(C(h))$, try augmenting with parameters $n$, $r$,
-  $\sigma\circ\prefix{C}{h}$, and~$\sigma$.
-\end{description}
-
-\begin{figure}
-\begin{center}
-\begin{tabular}{l}
-$\fn{cowt}(t,T,C,S) ={}$\\
-$\quad\bigcup_{\sigma\in S}\fn{cowt}_0(t,T,C,\sigma)$\\
-\\
-$\fn{cowt}_0(t,T,C,\sigma) ={}$\\
-\quad \textbf{if} $\all{t}\pm t\in C\to\sigma(t)$ is {\cow} $\sigma(T)$ at
-$\sigma(t')$ \textbf{then}\\
-\qquad $\{\sigma\}$\\
-\quad \textbf{else}\\
-\qquad$\fn{cowt}(t,T,C,\fn{foldn}(t, T, C, \{\sigma\}))$\\
-\\
-$\fn{foldn}(t,T,\seq{},S)=S$\\
-$\fn{foldn}(t,T,\seq{\pm t'}\append C,S)={}$\\
-$\quad\fn{foldn}(t,T,C,\bigcup_{\sigma\in S}\fn{fold}(t,T,t',\sigma))$
-\end{tabular}
-\end{center}
-\caption{The $\fn{cowt}$ Function}\label{fig:cowt}
-\end{figure}
-
-\begin{note}
-For target terms to be the reasonable set for insertion of the
-critical message, one must require that variables of sort message are
-acquired.  This fact needs to be explained and noted as another reason
-for the acquired variable constraint.
-\end{note}
-
-\chapter{Collapsing and Preconditioning}\label{chp:collapsing}
-
-The input preskeleton is preconditioned before it is subjected to
-authentication test solving.  The preskeleton is converted to a
-skeleton and then collapsing is applied so as to ensure all shapes are
-found.  Collapsing handles the case in which strands merged in the
-input lead to shapes.
-
-\begin{defn}[Collapsing]
-Let $k_0$ and $k_1$ be two skeletons such that there are two
-strands,~$s$ and~$s'$, and a most general unifier~$\sigma$ such that
-$\sigma(\Theta_{k_0}(s)(j))\equiv \sigma(\Theta_{k_0}(s')(j))$ for all
-$0\leq j<|\Theta_{k_0}(s)|$.  Then~$k_0$ \emph{collapses} to~$k_1$,
-written $k_0\reduction{\fn{clp}}k_1$, if
-$k_0\reduction{\ops{S}_\sigma}k\reduction{\ops{C}_{s,s'}}k'
-\reduction{\fn{skel}}k_1$.
-\end{defn}
-
-\begin{defn}[Preconditioning]
-For point-of-view preskeleton~$k_0$,~$k_0$ is preconditioned to~$k_1$,
-written $k_0\reduction{\fn{pre}}k_1$, if
-$k_0\reduction{\fn{skel}}k\mathbin{(\reduction{\fn{clp}})^\ast}k_1$.
-\end{defn}
-
-\chapter{Generalization}\label{chp:generalization}
-
-The cohort reduction system produces a set of realized skeletons.
-Generalization attempts to convert that set into a set of skeletons.
-Not all possible cases are implemented due to performance issues, so
-it is not uncommon to find a realized skeleton in the output of a run
-of {\cpsa} that is not a shape.
-
-\begin{conj}[Shape Completeness]
-Without generalization, {\cpsa} produces a complete set of shapes
-among the realized skeletons in its output.
-\end{conj}
-
-\begin{defn}[Generalize]
-A skeleton~$k_0$ \emph{generalizes}
-skeleton~$k_1$, written $k_1\reduction{<}_k k_0$, if
-both~$k_0$ and~$k_1$ are realized,~$k_0$ and~$k_1$ are not isomorphic,
-there is a homomorphism from a point-of-view skeleton~$k$ to~$k_0$, and
-a strandwise injective homomorphism $k_0\mapsto k_1$.
-\end{defn}
-
-If skeletons are allowed to be isomorphic, we
-write~$k_1\reduction{\leq}_k k_0$, and note that $\reduction{\leq}_k$
-defines a partial ordering.  Therefore, there are maximal elements in
-the partial ordering.  A shape associated with a preskeleton
-is a maximally generalized realized skeleton derived from the
-preskeleton.
-
-\begin{defn}[Shape]
-Let~$k_0$ be a preskeleton such that $k_0\reduction{\fn{pre}}k$ for
-some skeleton~$k$, and let~$k_1$ be a realized skeleton such that
-$k\mapsto k_1$.  Skeleton~$k_2$ is a \index{shape}\emph{shape}
-of~$k_0$ if $k_1\reduction{\leq}_k k_2$, and~$k_2$ is maximal among
-skeletons that generalize~$k_1$.
-\end{defn}
-
-There are four generalization reductions used to transform a realized
-skeleton into its shapes: deletion, weakening, forgetting, and
-separation.
-
-\begin{defn}[Deletion]
-Skeleton~$k_0$ \index{deletion}\emph{generalizes by deletion}
-skeleton~$k_1$, written $k_1\reduction{\ops{D}_n}_k k_0$, if
-$k_1\reduction{<}_k k_0$, $k_2\reduction{\fn{skel}}k_0$, and~$k_2$ is
-the result of deleting node~$n$ in~$k_1$ and all of the nodes that
-follow it in its strand.
-\end{defn}
-
-\begin{defn}[Weakening]
-Skeleton~$k_0$ \index{weakening}\emph{generalizes by weakening}
-skeleton~$k_1$, written $k_1\reduction{\ops{W}_{n,n'}}_k k_0$, if
-$k_1\reduction{<}_k k_0$, $k_2\reduction{\fn{skel}}k_0$, and~$k_2$
-is~$k_1$ except $\kprec{k_2}=(\kprec{k_1}\setminus\{(n,n')\})^\ast$.
-\end{defn}
-
-\begin{defn}[Forgetting]
-Skeleton~$k_0$ \index{forgetting}\emph{generalizes by origination
-  assumption forgetting} skeleton~$k_1$, written
-$k_1\reduction{\ops{F}_t}_k k_0$, if $k_1\reduction{<}_k k_0$,
-$k_2\reduction{\fn{skel}}k_0$, and~$k_2$ is~$k_1$ except
-$U_{k_2}=U_{k_1}\setminus\{t\}$ and $N_{k_2}=N_{k_1}\setminus\{t\}$.
-\end{defn}
-
-Sometimes a more general skeleton can be found by replacing some
-occurrences of one variable by a fresh variable.  For variable
-separation, the location of an occurrence of a variable is defined
-using a skeleton's instance.  Recall that in the external syntax,
-strand~$s$ in skeleton~$k$ is described by an instance of the form
-$\inst(r,h,\sigma)$.  (Instances are introduced in
-Section~\ref{sec:instances}.)
-
-\begin{defn}[Location]
-Variable~$x$ is at \emph{location} $(s,y,p)$ in~$k$ if
-the instance at $\Theta_k(s)$ is $\inst(r,h,\sigma)$ and
-$x=\sigma(y)\termat p$.
-\end{defn}
-
-\begin{defn}[Variable Separation]
-Skeleton~$k_0$ \index{variable separation}\emph{generalizes by
-  variable separation} skeleton~$k_1$, written
-$k_1\reduction{\ops{V}_t}_k k_0$, if $k_1\reduction{<}_k k_0$,
-$k_2\reduction{\fn{skel}}k_0$, and~$k_2$ is~$k_1$ except~$t$ is a
-variable that occurs in multiple locations in~$k_1$, and~$k_2$ is the
-result of replacing~$t$ with a variable~$t_0$ of the same sort at a
-proper subset of~$t$'s locations, where~$t_0$ occurs nowhere in~$k_1$.
-\end{defn}
-
-When separating a non-originating term, both the term and its clone
-are non-originating.  When separating a uniquely originating term,
-either the term or its clone is uniquely originating.
-
-\begin{note}
-What happens when separating~$t$ in~$k$ into~$t$ and~$t_0$, and
-$\cn{ltk}(t,t)\in N_k$?  Should a skeleton~$k_0$ with
-$\cn{ltk}(t,t_0)\in N_{k_0}$ be a candidate separation?
-Currently, only skeletons~$k_1$ with $\cn{ltk}(t,t)\in N_{k_1}$
-and $\cn{ltk}(t_0,t_0)\in N_{k_1}$ are considered.
-\end{note}
-
-\begin{defn}[Generalization]
-The reduction~$\reduction{\fn{gen}}_k
-=\bigcup_n\reduction{\ops{D}_n}_k\cup
-\bigcup_{n,n'}\reduction{\ops{W}_{n,n'}}_k\cup
-\bigcup_t\reduction{\ops{F}_t}_k\cup \bigcup_t\reduction{\ops{V}_t}_k$
-is the \emph{generalization} relation.  For the setwise generalization
-reduction, $\{k_0\}\setreduction{\fn{gen}}_k\{k_1\}$ when
-$k_0\reduction{\fn{gen}}_k k_1$.
-\end{defn}
-
-The fact that each generalization reduction replaces a singleton with
-just a singleton requires explanation.  It's simply a matter of
-performance.  If all possibilities are considered, {\cpsa} run time
-would become dominated by generalization.  Since generalization
-failures do not interfere with producing a complete description of the
-input, an approximation of the set of shapes is okay.
-
-\begin{conj}[Generalization]
-The relation~$\setreduction{\fn{gen}}_k$ is terminating.
-\end{conj}
-
-\section*{Discussion}
-In~\cite{DoghmiGuttmanThayer07}, the shapes of a point-of-view
-skeleton are said to be minimal, in the partial ordering induced by
-injective homomorphism, among all realized homomorphic images of the
-point-of-view skeleton.  Minimal corresponds to maximally generalized.
-The need for origination assumption forgetting was not known
-when~\cite{DoghmiGuttmanThayer07} was written.  Generalization by
-variable separation uses non-carried positions, and in particular,
-positions that traverse an atom edge.  Algebras in previous strand
-space papers have no concept of a position that traverses an atom
-edge, and therefore cannot be used to specify generalization by
-variable separation.
-
-Variable separation can be expensive when there are many possible ways
-to separate variables.  The implementation simply truncates the search
-when it grows too large.
-
-\chapter{Skeleton Reduction System}\label{chp:skeleton reduction}
-
-Let reduction
-$\twoheadrightarrow_k=(\setreduction{\fn{co}}\cup
-\setreduction{\fn{gen}}_k)^+$.  This reduction system specifies the
-{\cpsa} program.
-
-\begin{conj}
-The reduction~$\twoheadrightarrow_k$ is confluent.
-\end{conj}
-
-\begin{conj}[Soundness]\label{cnj:soundness}
-Let~$k_0$ be a preskeleton and~$k$ be an unrealized skeleton such that
-$k_0\reduction{\fn{pre}}k$.  Skeleton~$k_1$ is a shape of~$k_0$ if
-$\{k\}\twoheadrightarrow_k K$, $k_1\in K$, and~$K$ is a normal form.
-\end{conj}
-
-The set of bundles denoted by preskeleton~$k$, $\sembrack{k}$ is
-defined on Page~\pageref{def:preskeleton denotation}.
-
-\begin{conj}[Completeness]\label{cnj:completeness}
-Let~$k_0$ be a preskeleton and~$k$ be an unrealized skeleton such that
-$k_0\reduction{\fn{pre}}k$.  For all~$K$ such that $\{k\}\twoheadrightarrow_k
-K$, $\sembrack{k_0}=\bigcup_{k_1\in K}\sembrack{k_1}$.
-\end{conj}
-
-\chapter*{Acknowledgement}
-
-Carolyn Talcott and Leonard Monk provided valuable feedback on drafts
-of this document.
-
-\appendix
-
-\chapter{Penetrator Non-Origination Assumptions}\relax
-\label{chp:penetrator non-origination}
-
-Penetrator non-origination assumptions have been added as an extension
-to the basic strand space theory.  An atom is \index{penetrator
-  non-originating}\index{non-originating!penetrator}\emph{penetrator
-  non-originating} in a bundle if it originates on no penetrator
-strand, but each of its variables occurs in some strand's trace.
-
-Penetrator non-origination assumptions can be used to model
-passwords.  Several regular participants might know a password and
-originate it in a run of a protocol, but an idealized password is one
-the penetrator cannot guess.
-
-A penetrator non-originating atom is similar to a non-originating
-atom, except in that it can be carried.  There are two definitions
-that require change.  Penetrator non-originating atoms must be added
-to the avoidance set of Definition~\ref{def:avoid}.  When the message
-at a critical position is an atom (see Definition~\ref{def:critical
-  position}, Item~\ref{item:nonce or encryption}), instead of being
-uniquely originating, and can also be penetrator non-originating.
-
-\chapter{Programs Specified by a Role}\label{chp:traces}
-
-Given the definitions in Chapter~\ref{chp:strand spaces and bundles},
-a role can be viewed as an abstraction of a program, and a strand as
-an abstraction of a run of a program.  But what program is specified
-by a role?
-
-Consider a role that contains the event $\inbnd\enc{t_0}{t_1}$.  If
-the program has the decryption key~$\fn{inv}(t_1)$ before the message
-is received, the program could decrypt the message and extract~$t_0$.
-Alternatively, if the program has $\enc{t_0}{t_1}$, or has~$t_0$ and
-the encryption key~$t_1$, it might check to see if the received
-message is the same as the expected message, and abort the run if not.
-
-Here is an example of when the second behavior is desired.  In
-{\cpsa}, before hashing was part of the algebra, an encryption was
-used to represent hashing.  The hash of~$t$, $\#t$, expanded to
-$\enc{\mbox{``hash''},t}{h}$, where~$h$ was an asymmetric key known to
-all, but no one knew~$h^{-1}$.  The tag ``hash'' was added to the
-encryption so as to ensure a hash was never confused with other uses of
-encryption.
-
-A role does not specify a valid program if the only possible way of
-interpreting the event~$\inbnd\#t$ is by using~$h^{-1}$ to decrypt
-$\enc{\mbox{``hash''},t}{h}$.  The remainder of this section describes
-how this class of specification errors is detected for the Basic Crypto
-Algebra.
-
-The behaviors associated with a trace depend on the set of messages
-available initially.  The behaviors are specified by a data flow
-relation, $\flow{T_0}{C}{T_1}$.  For trace~$C$, the relation
-$\flow{T_0}{C}{T_1}$ asserts that when messages~$T_0$ are available
-initially, there is a behavior of~$C$ that produces messages~$T_1$.
-
-A derivation tree used to demonstrate $\flow{T_0}{C}{T_1}$ shows the steps
-that enable the flow of data.  The tree can be linearized, and thus
-specifies a sequential program that implements the role.
-
-The data flow relation is defined with the aid of a data flow relation
-for a sequence of events, $\flow{T_0}{C}{T_1}$.
-
-$$\flow{T}{\seq{}}{T}\qquad
-\infer{\flow{T_0}{\seq{\pm t}}{T}\quad\flow{T}{C}{T_1}}%
-{\flow{T_0}{\seq{\pm t}\append C}{T_1}}$$
-
-The $\flow{T_0}{\seq{\pm t}}{T_1}$ relation is defined using the
-$\flow{T_0}{C}{T_1}$ relation.  An outbound message can be formed if
-it is available initially
-$$\infer{t\in T}{\flow{T}{\seq{+t}}{T}}$$
-or if it can be formed by construction.
-$$\infer{\flow{T}{\seq{+t_1,\ldots,+t_{n}}}{T}}%
-{\flow{T}{\seq{+f(t_1,\ldots,t_{n})}}{T}}\quad
-\left[\begin{array}{l}
-f(t_1,\ldots,t_{n})\\
-\mbox{not an atom}
-\end{array}\right]$$
-
-An inbound message makes atoms and acquired variables available.
-$$\flow{T}{\seq{-t}}{T\cup\{t\}}\quad [\mbox{$t$ an atom or a variable}]$$
-When the decryption key is available, the contents of the encryption
-are also available.  Furthermore, the encryption can be sent in future
-messages without access to its encryption key.
-$$\infer{\flow{T_0}{\seq{+\fn{inv}(t_1)}}{T_0}\quad
-  \flow{T_0}{\seq{-t_0}}{T_1}}{\relax
-  \flow{T_0}{\seq{-\enc{t_0}{t_1}}}{T_1\cup\{\enc{t_0}{t_1}\}}}$$ A received
-encryption that can be sent ensures the encryption agrees with
-currently available terms and makes nothing new available.
-$$\infer{\flow{T}{\seq{+\enc{t_0}{t_1}}}{T}}{\relax
-  \flow{T}{\seq{-\enc{t_0}{t_1}}}{T}}$$
-
-Consider an operation $f$ other than the encryption operation.  The
-order in which messages that occur in a message constructed using~$f$
-are made available may determine if the decryption key of an
-encryption is available.  All possible orderings must be explored.
-Let~$\pi_n$ be a permutation on the domain of a sequence of
-length~$n$.
-$$\infer{\flow{T_0}{\seq{-t_1,\ldots,-t_{n}}\circ\pi_n}{T_1}}%
-{\flow{T_0}{\seq{-f(t_1,\ldots,t_{n})}}{T_1}}
-\left[\begin{array}{l}
-f(t_1,\ldots,t_{n})\\
-\mbox{not an atom}
-\end{array}\right]$$
-
-The data flow relation is used to find initial sets of atoms that are
-compatible with some behavior of a trace that produces messages.
-
-\begin{defn}[Trace Parameters]
-The set of atoms~$T_0$ are \index{parameters}\emph{parameters} of
-trace~$C$ if $\flow{T_0}{C}{T_1}$ for some~$T_1$, and~$T_0$ is
-minimal, that is for all~$T'_0$ such that $\flow{T'_0}{C}{T_1}$,
-$T'_0\not\subset T_0$.
-\end{defn}
-
-The role $\seq{\outbnd\enc{a,n}{K_b},\inbnd\enc{n}{K_a}}$ has two sets
-of parameters, $\{a,n,K_b,K^{-1}_a\}$ and $\{a,n,K_b,K_a\}$.  See
-Figure~\ref{fig:ambigrole} for two examples of programs that implement
-the role, using distinct parameter sets.
-
-\begin{figure}
-\begin{center}
-\begin{tabular}{l@{\hspace{8mm}}l}
-$\cn{proc}(a,n,K_b,K^{-1}_a)$ & $\cn{proc}(a,n,K_b,K_a)$\\
-$\quad \cn{send}(\enc{a,n}{K_b});$ & $\quad \cn{send}(\enc{a,n}{K_b});$\\
-$\quad x_0\gets \cn{recv}();$ & $\quad x_0\gets \cn{recv}();$\\
-$\quad x_1\gets \cn{decrypt}(x_0,K^{-1}_a);$ & $\quad x_1\gets \enc{n}{K_a};$\\
-$\quad x_1 \neq n \to \cn{fail};$ & $\quad x_0 \neq x_1 \to \cn{fail};$ \hspace{8mm}\\
-$\cn{end}$ & $\cn{end}$
-\end{tabular}
-\end{center}
-\label{fig:ambigrole}
-\caption{Two programs that implement the role $\seq{\outbnd\enc{a,n}{K_b},\inbnd\enc{n}{K_a}}$.}
-\end{figure}
-
-The {\cpsa} distribution contains a program that computes the set of
-parameters of a role.  It was used to find an error in a role's use of
-hashing as described at the beginning of this section.  The role in
-question is the verifier role that is part of an attestation
-protocol~\cite{CokerEtAl11}.  In an earlier version of the role,
-every set of parameters included the decryption key of the encryption
-used as a hash.  The role was so complicated that inspection did not
-reveal the error.
-
-Note that this section is specific to the basic crypto algebra in the
-sense that all non-atomic operations are assumed to be constructable,
-and encryption has the specific de-construction recipe shown.  Although
-carried positions were not mentioned in this section, the inference system
-specifies the same concept.  In fact, in future work we hope to show that
-the inference system is all one needs to define, and that which positions
-are carried, which are protected, and which sorts are atoms can be defined
-in terms of the inferences available.
-
-\chapter{Shape Analysis Sentences}\label{chp:logic}
-
-For each point-of-view skeleton and its shapes found by {\cpsa}, there
-is a formula in a language of order-sorted first-order logic called
-a \index{shape analysis sentence}\emph{shape analysis sentence}.  The
-sentence has a special form,
-$\all{X}(\Psi\supset\bigvee_i\some{Y_i}(\Delta_i\wedge\Phi_i))$,
-where~$\Psi$, $\Delta_i$, and~$\Phi_i$ are conjunctions of atomic
-formulas and~$X$ and~$Y_i$ are variable sets.  This fragment of
-first-order logic is called coherent logic.  Formula~$\Psi$ describes
-the point-of-view skeleton~$k_0$.  For each homomorphism to a shape,
-$k_0\homomorphism{\delta_i}k_i$, formula~$\Delta_i$ describes the
-structure preserving maps~$\delta_i$, and the shape~$k_i$ is described
-by~$\Phi_i$.
-
-An interpretation of a shape analysis sentence is a skeleton.  If
-{\cpsa} finds all of the shapes and the homomorphisms associated with
-a point-of-view skeleton, the analysis' sentence is satisfied in all
-realized skeletons.  Let~$\Sigma$ be a shape analysis sentence
-and~$\Psi$ be a security goal.  If $\Sigma\supset\Psi$ is a theorem in
-order-sorted first-order logic, then~$\Psi$ is satisfied in all
-realized skeletons and its protocol achieves this goal.
-
-Shape analysis sentences are closely related to security goals
-in~\cite{guttman09}, and were motivated by that work.  This material
-was extracted from~\cite[Appendix~B]{ramsdell12}, the paper that
-introduced shape analysis sentences.
-
-\section{Security Goals}
-
-The signature for terms extends the one used for the underlying
-message algebra with one new sort \dom{node}, the sort of nodes.  Sort
-\dom{node} has no subsorting relations with any other sort symbol.
-
-Security goals make use of protocol specific and protocol independent
-predicates.  For each role $\role_Y(C,N,U)\in P$ and $i<|C|$, there is
-a protocol specific unary position predicate $P[r,i]:\dom{node}$.  For
-each role~$\role_Y(C,N,U)\in P$ and variable~$x:S$ that occurs in~$C$,
-there is a protocol specific binary parameter predicate
-$P[r,x]:\dom{node}\times{}S$.  The protocol independent unary
-predicates are $\mathsf{non}: B$ and $\mathsf{uniq}: B$ for each base
-sort~$B$.  The remaining protocol independent predicates are binary,
-and are $\mathsf{\uniqat}: B\times\dom{node}$,
-$\mathsf{\strprec}:\dom{node}\times\dom{node}$,
-$\mathsf{prec}:\dom{node}\times\dom{node}$, and equality.
-
-Soon we define~$\form(k)=(Y,\Phi)$, where~$\Phi$ is $k$'s skeleton
-formula, and~$Y$ is the formula's variable set, but first we define
-the relevant nodes of a skeleton~$N$.  Let $k=\skel_X(P,I,\prec,N,U)$
-and let~$\prec^-$ be the transitive reduction of~$\prec$.  Recall
-that~$\Theta_X$ is the strand space defined by~$I$, see
-Section~\ref{sec:instances}.  The \emph{relevant nodes} of~$k$ are
-$N=N_s\cup N_\prec\cup N_u$ where
-
-\[\renewcommand{\arraystretch}{1.5}
-\begin{array}{r@{{}={}}l}
-  N_s&\{(s,i)\mid s\in\sdom(\Theta_X)\land
-  i=|\Theta_X(s)|-1\}\\
-
-  N_\prec&\{(s,i)\mid
-  \renewcommand{\arraystretch}{1}
-  \begin{array}[t]{@{}l}
-    (s',i')\in\nodes(\Theta_X)\land s\neq s'\\
-    \quad\land((s,i)\prec^- (s',i')\lor(s',i')\prec^-(s,i))\}
-  \end{array}\\
-
-  N_u&\{(s,i)\mid t\in U,(s,i)\in\orig_k(t)\}
-\end{array}\]
-
-For~$\form(k)=(Y,\Phi)$, the variable set~$Y$ is~$X$ augmented with a
-fresh variable of sort~\dom{node} for each node in~$N$, and let $v(n)$ be
-the variable associated with node~$n$.
-
-The formula~$\Phi$ is a conjunction of atomic formulas composed as
-follows.
-\begin{itemize}
-\item For each $(s,i)\in N$, assert $P[r,i](v(s,i))$,
-  where $I(s)=\cn{i}(r,h,\sigma$).
-\item For each $s\in\sdom(I)$, let
-  $I(s)=\cn{i}(r,h,\sigma)$.  For each variable
-  $x\in\svars(\prefix{r^c}{h})$ and term $t=\sigma(x)$, assert
-  $P[r,x](v(s,h-1),t)$,
-  where $r^c=C$ when $r=\role(C,N,U)$.
-\item For each $(s,i),(s,i')\in N$ such that $i<i'$, assert
-  $\cn{\strprec}(v(s,i),v(s,i'))$.
-\item For each $(s,i)\prec^-(s',i')$ such that $s\neq s'$, assert
-  $\cn{prec}(v(s,i),v(s',i'))$.
-\item For each $t\in N$, assert $\cn{non}(t)$.
-\item For each $t\in U$ and node~$n$ such that
-  $n\in\orig_k(t)$, assert $\cn{\uniqat}(t,v(n))$.
-\item For each $t\in U$ without a point of origination in~$k$, assert
-  $\cn{uniq}(t)$.
-\end{itemize}
-
-Given a set of homomorphisms $\delta_i\colon k_0\mapsto k_i$, its shape
-analysis sentence is
-\begin{equation}\label{eqn:node-oriented shape sentence}
-\sent(\delta_i\colon k_0\mapsto k_i)=\all{X_0}(\Phi_0\supset
-\bigvee_i\some{X_i}(\Delta_i\wedge\Phi_i)),
-\end{equation}
-where $\form(k_0)=(X_0,\Phi_0)$.  The same procedure produces~$X_i$
-and~$\Phi_i$ for shape~$k_i$ with one proviso---the variables in
-$X_i$ that also occur in~$X_0$ must be renamed to avoid trouble while
-encoding the structure preserving maps~$\delta_i$.
-
-The structure preserving maps~$\delta_i=(\phi_i,\sigma_i)$ are encoded
-in~$\Delta_i$ by a conjunction of equalities.  Map~$\sigma_i$ is coded
-as equalities between a message algebra variable in the domain
-of~$\sigma_i$ and the term it maps to.  Map~$\phi_i$ is coded as
-equalities between node variables in~$\Phi_0$ and node variables
-in~$\Phi_i$.  Let~$v_0$ be the node variables freshly generated
-for~$k_0$, and~$v_i$ be the ones generated for~$k_i$.  The
-strand mapping part of~$\Delta_i$ is
-\[\bigwedge_{(s,j)\in\sdom(v_0)}v_0(s,j)=v_i(\phi_i(s),j).\]
-
-\begin{figure}
-$$\begin{array}{l}
-\all{a_0,b_0\colon\srt{A}, s_0\colon\srt{S}, d_0\colon\srt{D}, n_0\colon\srt{N}}(\\
-\quad\resp_1(n_0)\wedge\resp_{a}(n_0,a_0)\wedge
-\resp_{b}(n_0,b_0)\\
-\qquad{}\wedge
-\resp_{s}(n_0,s_0)\wedge
-\resp_{d}(n_0,d_0)\\
-\qquad{}\wedge\cn{non}(a_0^{-1})\wedge
-\cn{non}(b_0^{-1})\\
-\quad\supset\\
-\quad\some{a_1,b_1,b_2\colon\srt{A}, s_1\colon\srt{S},
-  d_1\colon\srt{D}, n_1,n_2,n_3\colon
- \srt{N}}(\\
-\qquad n_0=n_1\wedge a_0=a_1\wedge b_0=b_1\wedge s_0=s_1\wedge
-d_0=d_1\\
-\qquad\quad\wedge\resp_1(n_1)\wedge
-\resp_{a}(n_1,a_1)\wedge
-\resp_{b}(n_1,b_1)\\
-\qquad\quad\wedge
-\resp_{s}(n_1,s_1)\wedge
-\resp_{d}(n_1,d_1)\wedge\resp_0(n_2)\\
-\qquad\quad\wedge\init_0(n_3)\wedge\init_a(n_3,a_1)\wedge
-\init_b(n_3,b_2)\wedge
-\init_s(n_3,s_1)\\
-\qquad\quad\wedge\cn{\uniqat}(s_1,n_2)\wedge
-\cn{prec}(n_3,n_2)\wedge\cn{\strprec}(n_2,n_1)\\
-\qquad\quad\wedge\cn{non}(a_1^{-1})\wedge
-\cn{non}(b_1^{-1})))
-\end{array}$$
-\caption{Shape Analysis Sentence for Blanchet's
-  Protocol}\label{fig:blanchet's shape analysis sentence}
-\end{figure}
-
-The shape analysis sentence for the second analysis of Blanchet's
-Simple Example Protocol in Section~\ref{sec:blanchet's simple example
-  protocol} is displayed in Figure~\ref{fig:blanchet's shape analysis
-  sentence}.  The sort \dom{node} is abbreviated as~\srt{N}, and the
-parameter predicate $P[r,x](z,t)$ is written $r_x(z,t)$ with the
-protocol left implicit.
-
-\paragraph{Semantics of Skeleton Formulas.}
-
-Let $k=\skel_X(P,I,\prec,N,U)$.  The universe of
-discourse is $\alg{D}=(\nat\times\nat)\cup\alga_X$.  When
-formula~$\Phi$ is satisfied in skeleton~$k$ with variable
-assignment $\alpha\colon Y\to \alg{D}$, we write
-$k,\alpha\models\Phi$.  We write~$\bar\alpha$ when~$\alpha$ is
-extended to terms in the obvious way.  When sentence~$\Gamma$ is
-satisfied in skeleton~$k$, we write $k\models\Gamma$.
-
-\begin{itemize}
-\item $k,\alpha\models P[r,i](y)$ iff $\alpha(y)\in\nodes(\Theta_X)$,
-  $\alpha(y)=(s,i)$, and for some~$\sigma$,
-  \[\prefix{\Theta_X(s)}{i+1}=\sigma\circ\prefix{r^c}{i+1}.\]
-  Recall $r^c=C$ when $r=\role(C,N,U)$.
-
-\item $k,\alpha\models P[r,x](y,t)$ iff
-  $\alpha(y)\in\nodes(\Theta_X)$, $\bar\alpha(t)\in\alga_X$, and with
-  $\alpha(y)=(s, i)$ and for some~$\sigma$ with $\sigma(x)=\bar\alpha(t)$,
-  \[\prefix{\Theta_X(s)}{i+1}=\sigma\circ\prefix{r^c}{i+1}.\]
-\end{itemize}
-
-The interpretation of the protocol independent predicates is
-straightforward.
-\begin{itemize}
-\item $k,\alpha\models\cn{prec}(y,z)$ iff
-  $\alpha(y)\prec\alpha(z)$.
-\item $k,\alpha\models\cn{\strprec}(y,z)$ iff $\alpha(y)\prec\alpha(z)$,
-  $\alpha(y)=(s,i)$, and $\alpha(z)=(s,i')$.
-\item $k,\alpha\models\cn{non}(t)$ iff $\bar\alpha(t)\in\nu$.
-\item $k,\alpha\models\cn{uniq}(t)$ iff $\bar\alpha(t)\in\upsilon$.
-\item $k,\alpha\models\cn{\uniqat}(t,y)$ iff $\bar\alpha(t)\in\upsilon$ and
-  $\alpha(y)\in\orig_k(\bar\alpha(t))$.
-\item $k,\alpha\models y=z$ iff $\bar\alpha(y)=\bar\alpha(z)$.
-\end{itemize}
-
-Let~$\Sigma$ be a shape analysis sentence and~$\Psi$ be a security
-goal.  If $\Sigma\supset\Psi$ is a theorem in order-sorted first-order
-logic, then~$\Psi$ is satisfied in all realized skeletons and its
-protocol achieves this goal.
-
-Since $\prec$ is transitive, transitivity of \fn{prec} can be used to
-prove a protocol achieves a goal.  That is,
-\[\cn{prec}(x,y)
-\land\cn{prec}(y,z)\supset
-\cn{prec}(x,z).\]
-Furthermore, $\cn{\strprec}(x,y)\supset\cn{prec}(x,y)$.
-
-\bibliography{cpsa}
-\bibliographystyle{plain}
-
-\printindex
-
-\end{document}
diff --git a/doc/cpsauser.html b/doc/cpsauser.html
deleted file mode 100644
--- a/doc/cpsauser.html
+++ /dev/null
@@ -1,731 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <meta http-equiv="content-type"
-  content="application/xhtml+xml; charset=UTF-8" />
-  <title>CPSA 2.5 User Guide</title>
-  <meta name="generator" content="Amaya 9.54, see http://www.w3.org/Amaya/" />
-  <style type="text/css">
-    h1 { text-align: center }
-    body { background: white; color: black; max-width: 48em }
-  </style>
-</head>
-
-<body>
-<h1>CPSA 2.5 User Guide</h1>
-
-<p>The Cryptographic Protocol Shapes Analyzer (CPSA) attempts to enumerate all
-essentially different executions possible for a cryptographic protocol. We call
-them the <i>shapes</i> of the protocol. Naturally occurring protocols have only
-finitely many, indeed very few shapes. Authentication and secrecy properties
-are easy to determine from them, as are attacks and anomalies.</p>
-
-<p>For each input problem, the CPSA program is given some initial
-behavior, and it discovers what shapes are compatible with
-it. Normally, the initial behavior is from the point of view of one
-participant. The analysis reveals what the other participants must
-have done, given the participant's view. The search is based on a
-high-level algorithm that was claimed to be complete, i.e. every shape
-can in fact be found in a finite number of steps. Further theoretical
-work showed classes of executions that are not found by the algorithm,
-however it also showed that every omitted execution requires an
-unnatural interpretation of a protocol's roles.  Hence the algorithm
-is complete relative to natural role semantics.</p>
-
-<p>The analyzer is designed to work well with other tools. S-expressions are
-used for both input and output. The analyzer reads all the problems in its
-input, writes out the solution to each problem, and then exits. This release
-contains seven tools. The <a href="#cpsagraph"><code>cpsagraph</code></a> program
-provides a visualization of answers using Scalable Vector Graphics (<a
-href="http://www.w3.org/Graphics/SVG/">SVG</a>). The <a
-href="#cpsashapes"><code>cpsashapes</code></a> program removes intermediate results
-from analyzer runs making the shapes easy to identify.
-The <a
-href="#cpsafiff"><code>cpsadiff</code></a> program compares CPSA output
-  files S-expression by S-expression, and prints the first skeleton
-  that differs.
-The <a href="#cpsasas"><code>cpsasas</code></a> program logical
-  formula that can be used to ensure security goals are achieved.
-The <a
-href="#cpsaannotations"><code>cpsaannotations</code></a> program uses protocol
-annotations to annotate shapes and generate protocol soundness obligations. The
-<a href="#cpsaparameters"><code>cpsaparameters</code></a> program detects some
-specification errors by performing a data flow analysis on protocol roles. The
-<a href="#cpsapp"><code>cpsapp</code></a> program pretty prints its
-input using a CPSA specific algorithm.  It also translates
-S-Expressions into JavaScript Object Notation
-(<a href="http://json.org">JSON</a>) to ease processing in other
-languages.  The
-<a href="#cpsajson"><code>cpsajson</code></a> program translates JSON
-encoded CPSA into CPSA S-Expressions.</p>
-
-<p>The input syntax is essentially the same as the output syntax. A
-  Lisp aware editor will pretty print input, and the output is pretty
-  printed. We use Emacs' Scheme mode to prepare input. This document
-  describes the syntax, but provides little assistance for its
-  interpretation. See the <a href="cpsaprimer.pdf">CPSA Primer</a> and
-  <a href="cpsagoals.pdf">CPSA and Formal Security Goals</a> for more
-  information.</p>
-
-<p>The typical pattern of usage is to enter the set of problems to be analyzed
-into a file, in this example, <code>prob.scm</code>, analyze the problems, and if
-something interesting is produced, visualize the answers.</p>
-
-<blockquote>
-  <pre>$ cpsa +RTS -M512m -RTS -o prob.txt prob.scm
-$ cpsagraph -o prob.xhtml prob.txt
-$ firefox -remote "openFile(`pwd`/prob.xhtml)"</pre>
-</blockquote>
-
-<p>Often a summary of the analysis is more enlightening.</p>
-
-<blockquote>
-  <pre>$ cpsashapes -o prob_shapes.txt prob.txt
-$ cpsagraph -o prob_shapes.xhtml prob_shapes.txt
-$ firefox -remote "openFile(`pwd`/prob_shapes.xhtml)"</pre>
-</blockquote>
-
-<p id="make">The distribution comes with the
-file <a href="cpsa.mk"><code>cpsa.mk</code></a> for inclusion into your
-makefile. A sample makefile follows. If you cut-and-paste from a
-browser window, be sure to convert the leading spaces in the last line
-into a tab character.</p>
-
-<blockquote>
-  <pre>CPSAFLAGS = +RTS -M512m -RTS
-
-SRCS := $(wildcard *.scm) $(wildcard *.lsp)
-
-include cpsa.mk
-
-all:    $(SRCS:%.scm=%_shapes.xhtml) $(SRCS:%.scm=%.xhtml) \
-        $(SRCS:%.lsp=%_shapes.xhtml) $(SRCS:%.lsp=%.xhtml)
-
-clean:
-        -rm *.txt *.xhtml</pre>
-</blockquote>
-
-<p>The CPSA program
-  is <a href="http://www.gnu.org/software/emacs/">Emacs</a> friendly.
-  If you run the above <code>makefile</code> via &quot;<kbd>M-x
-  compile</kbd>&quot;, the results will be displayed in a buffer in
-  Compilation Mode.  The command &quot;<kbd>C-x `</kbd>&quot; will visit
-  the locus of the next error message or match (<code>next-error</code>)
-  in your CPSA input file.</p>
-
-<p>For platforms without GNU <code>make</code>, the Haskell program <a
-href="Make.hs"><code>Make.hs</code></a> can be loaded into a Haskell interpreter
-and perform a similar function. Users are expected to copy the makefile or the
-Haskell program into the directory containing a set of analysis problems, and
-then modify the file so it specifies the command line flags appropriate for the
-problems in the directory.</p>
-
-<h2>Syntax</h2>
-
-<p>The syntax is extensible. Association lists in which the key is always a
-symbol are allowed at various points in the grammar. Key-value pairs with
-unrecognized keys are ignored, and are available for use by other tools. On
-output, unrecognized key-value pairs are preserved when printing protocols, but
-elided when printing skeletons, with the exception of the <code>comment</code>
-key.</p>
-
-<p>The input is an option herald form followed by a sequence of
-protocol definitions and problem statements.
-A <a href="#usage">herald form</a> allows options normally specified
-on the command line to be specified within an input file.  A problem
-statement describes the initial behavior as a skeleton or a security
-goal.</p>
-
-<h3>Protocols</h3>
-
-<p>The grammar for a protocol follows.</p>
-
-<blockquote>
-  <pre>PROTOCOL   ::= (defprotocol ID ALG ROLE+ PROT-ALIST)
-ID         ::= SYMBOL
-ALG        ::= SYMBOL
-ROLE       ::= (defrole ID VARS TRACE ROLE-ALIST)
-VARS       ::= (vars DECL*)
-DECL       ::= (ID+ SORT)
-TRACE      ::= (trace EVENT+)
-EVENT      ::= (send TERM) | (recv TERM)
-ROLE-ALIST ::= (non-orig POS-TERM*) ROLE-ALIST
-            |  (pen-non-orig POS-TERM*) ROLE-ALIST
-            |  (uniq-orig TERM*) ROLE-ALIST
-            |  (priority POS-INT*) ROLE-ALIST | ...
-POS-TERM    ::= TERM | (INT TERM)
-POS-INT    ::= (INT INT)
-PROT-ALIST ::= ...</pre>
-</blockquote>
-
-<p>The protocol <code>ID</code> is a symbol that names the protocol, and the role
-<code>ID</code> is a symbol that names the role. The <code>ALG</code> symbol identifies
-the algebra used by the protocol. For the Basic Cryptographic Algebra, the
-symbol is <code>basic</code>.
-<!-- For the Diffie-Hellman Algebra, the symbol is
-<code>diffie-hellman</code>. -->
-The <code>var</code> form contains symbols that
-declare the sort of the variables used in this role. The set of sort
-symbols is algebra specific. The protocol association list has no
-predefined keys, while the role association list has three. The value
-associated with both of these keys must be atoms in the
-algebra. Each <code>non-orig</code> term must not be carried by any event
-in the role's trace, but each of its variables must occur in some
-term.  A role non-origination assumption of the form <code>(3 a)</code>
-asserts that atom <code>a</code> will not be mapped into an instance
-unless its height is greater than three.  For each <code>pen-non-orig</code>
-term, each of its variables must occur in some term, but unlike a
-non-origination assumption, the term may be carried.
-Each <code>uniq-orig</code> term must originate in the role's trace. Every
-non-atomic variable must be acquired by the role's trace.</p>
-
-<p>The structure of sorts and terms in the Basic Cryptographic Algebra
-follows.</p>
-
-<blockquote>
-  <pre>SORT ::= text | data | name | skey | akey | mesg
-TERM ::= ID | STRING | (cat TERM+) | (enc TERM+ TERM) | (hash TERM+)
-      |  (pubk ID) | (privk ID) | (invk ID) | (ltk ID ID)
-      |  (pubk STRING ID) | (privk STRING ID)</pre>
-</blockquote>
-
-<p>The form (<code>cat</code> a b c d e) is expands to (<code>cat</code> a (<code>cat</code>
-b (<code>cat</code> c (<code>cat</code> d e)))).</p>
-
-<p>A term in the Basic Crypto Algebra is an atom if it is variable of a sort
-other than <code>mesg</code>, or it if formed from one of the following operations:
-<code>pubk</code>, <code>privk</code>, <code>invk</code>, and <code>ltk</code>.</p>
-
-<h3>Skeletons</h3>
-
-<blockquote>
-  <pre>SKELETON   ::= (defskeleton ID VARS STRAND+ SKEL-ALIST)
-STRAND     ::= (defstrand ID INT MAPLET*) | (deflistener TERM)
-MAPLET     ::= (TERM TERM)
-SKEL-ALIST ::= (non-orig TERM*) SKEL-ALIST
-            |  (pen-non-orig TERM*) SKEL-ALIST
-            |  (uniq-orig TERM*) SKEL-ALIST
-            |  (precedes NODE-PAIR*) SKEL-ALIST
-            |  (priority NODE-INT*) SKEL-ALIST | ...
-NODE-PAIR  ::= (NODE NODE)
-NODE       ::= (INT INT)</pre>
-</blockquote>
-
-<p>The <code>ID</code> in the skeleton form names a protocol. It refers to the last
-protocol definition of that name which precedes the skeleton form. The
-<code>ID</code> in the strand form names a role. The integer in the strand form
-gives the height of the strand. The sequence of pairs of terms in the strand
-form specify an environment used to construct the messages in a strand from its
-role's trace. The first term is interpreted using the role's variables and the
-second term uses the skeleton's variables. The environment used to produce the
-strand's trace is derived by matching the second term using the first term as a
-pattern.</p>
-
-<p>The first integer in a node identifies a strand, and the second one
-specifies the position of the node in the strand. Zero-based indexing is used.
-Zero identifies the first strand, and the first node in a strand has position
-zero.</p>
-
-<p>A variable may occur in more then one role within a protocol. The
-reader performs a renaming so as to ensure these occurrences do not
-overlap.  Furthermore, the maplets used to specify a strand need not
-specify how to map every role variable. The reader inserts missing
-mappings, and renames every skeleton variable that also occurs in a
-role of its protocol. The sort of every skeleton variable that occurs
-in the <code>non-orig</code>, <code>pen-non-orig</code>, or <code>uniq-orig</code>
-list or in a maplet must be declared.</p>
-
-<p>On output, key-value pairs are added to all skeleton's association list.
-Every skeleton in the output is labeled with a unique identifier with
-<code>(label INT)</code> A skeleton has <code>(parent INT)</code> if it is a member of
-the cohort of the identified parent. A skeleton has <code>(seen INT+)</code> when
-members of its cohort are isomorphic to previously seen skeletons. A skeleton
-lists its unrealized nodes with <code>(unrealized NODE*)</code>. The traces
-associated with each strand is given by the <code>(traces ...)</code> form.
-Finally, the operation used to derive this skeleton from its parent is recorded
-with <code>(operation TEST KIND TERM NODE TERM*)</code>, where <code>TEST</code> is the
-authentication test <code>encryption-test</code> or <code>nonce</code>, <code>KIND</code>
-is <code>(added-strand ID INT)</code>, <code>(contracted MAPLET*)</code>, or
-<code>(added-listener TERM)</code>, <code>TERM</code> is the critical term,
-<code>NODE</code> in the test node, and the remaining terms specify the escape set.
-When the operation kind is augmenting, the instance's role name and height are
-provided. For kind listening, a term is provided. For kind contracting, the
-substitution is provided. When a substitution refers to a variable not in the
-skeleton, its name is unpredictable. For generalization, the operation is
-recorded as <code>(operation generalization METHOD)</code>, where <code>METHOD</code>
-is one of <code>deleted NODE</code>, <code>weakened NODE-PAIR</code>, <code>separated
-TERM</code> and <code>forgot TERM</code>. Generalization is used to find shapes from
-realized skeletons. For shape collapsing, the operation is recorded as
-<code>(operation collapsed INT INT)</code>, where the two <code>INT</code>s identify
-the strands merged. Shape collapsing is used to find related shapes.</p>
-
-<!--
-<p><em>Diffie-Hellman support is experimental.</em></p>
-
-<p>The Diffie-Hellman Algebra adds sorts and terms as follows.</p>
-
-<blockquote>
-  <pre>SORT ::= ... | base | expn | expr
-TERM ::= ... | (gen) | (exp TERM EXPR)
-EXPR ::= (mul EXPR EXPR) | (rec EXPR) | (one)</pre>
-</blockquote>
-
-<p>Sort <code>expn</code> is a subsort of <code>expr</code> and
-sorts <code>expr</code> and <code>base</code> are subsorts
-of <code>mesg</code>.</p>
-
-<p>The exponent of a Diffie-Hellman value is a free Abelian group.
-  Its basis elements are in sort <code>expn</code>.  The basis
-  elements are the atoms of the group.  For the Diffie-Hellman
-  algebra as a whole, the atoms the ones in the Basis Cryptographic
-  Algebra augmented with variables of sort <code>expn</code> and
-  terms of the form <code>(exp (gen) x)</code>,
-  where <code>x</code> is a variable of sort <code>expn</code>.</p>
-
-<p>The axioms for Diffie-Hellman values are the usual ones for an
-  Abelian group for terms of sort <code>expr</code>.  For terms of
-  sort <code>base</code>, <code>(exp h (one)) = h</code> and
-<code>(exp (exp h x) y) = (exp h (mul x y)</code>.</p>
-
--->
-
-<h3>First-order Logic and Security Goals</h3>
-
-<p>Another way to specify a problem statement is with a security
-  goal. A security goal a sentence in first-order logic.  It asserts
-  that if some properties hold for a skeleton, then some other
-  properties must hold for all shapes computed by CPSA starting with
-  the skeleton.  Security goals can be used to formally state
-  authentication and secrecy goals of a protocol.</p>
-
-<p>The <code>defgoal</code> form is used to pose an analysis problem
-  with a sentence instead of a skeleton.  CPSA extracts a point of view
-  skeleton from the antecedent of the formula and then analyzes it.
-  When it prints a shape, it checks to see if the shape satisfies the
-  conclusion of the security goal.  See
-  <a href="cpsagoals.pdf">CPSA and Formal Security Goals</a> for
-  details.</p>
-
-<p>To be precise, a security goal is an order-sorted first-order logic
-  sentence in a restricted form.  The set of sort symbols available
-  for use in a <code>DECL</code> is the ones provided by the message
-  algebra augmented with the symbol <code>node</code>.  The form of a
-  sentence is restricted by the syntax that follows.</p>
-
-<blockquote>
-  <pre>GOAL        ::= (defgoal ID SENTENCE+ GOAL-ALIST)
-SENTENCE    ::= (forall (DECL*) (implies ANTECEDENT CONCLUSION))
-CONCLUSION  ::= (false) | EXISTENTIAL | (or EXISTENTIAL*)
-EXISTENTIAL ::= (exists (DECL*) ANTECEDENT) | ANTECEDENT
-ANTECEDENT  ::= ATOMIC | (and ATOMIC*)
-ATOMIC      ::= (p ROLEID POS NVAR) | (p ROLEID PARAM NVAR TERM)
-             |  (str-prec NVAR NVAR) | (prec NVAR NVAR)
-             |  (non TERM) | (pnon TERM) | (uniq TERM)
-             |  (uniq-at TERM NVAR) | (= TERM TERM)
-ROLEID      ::= STRING
-POS         ::= INT
-NVAR        ::= ID
-PARAM       ::= STRING</pre>
-</blockquote>
-
-<p>The empty string names the listener role of a protocol.  The
-  role has the variable <code>x</code> of sort <code>mesg</code>
-  as its only role variable. There are two positions in the listener role.</p>
-
-<h3>Macros and Includes</h3>
-
-<p>After reading the input, <code>cpsa</code> expands macros before analyzing
-the results. A macro definition is a top-level form.</p>
-
-<blockquote>
-  <pre>(defmacro (NAME ARG*) BODY)</pre>
-</blockquote>
-
-<p>The <code>cpsa</code> program expands all calls to macros in
-non-macro defining S-expressions using the macros that have been
-defined previously. A macro definition can be used to expand a call if
-the first element of a list matches the name of the macro, and the
-length of the remaining elements in the list matches the length of the
-macro's argument list. When two macros definitions are applicable, the
-last definition takes precedence. The <code>cpsa</code> program omits
-macro definitions from its output.</p>
-
-<p>After expanding a list, elements of the list of the
-  form <code>(^</code> ...<code>)</code> are spliced into the output.
-  Thus <code>(a ^(b c) d)</code> becomes
-  <code>(a b c d)</code> after macro expansion.</p>
-
-<p>A source file can be included within another with the top-level
-include form,</p>
-
-<blockquote>
-  <pre>(include FILE)</pre>
-</blockquote>
-
-<p>where <code>FILE</code> is a string. The <code>cpsa</code> program
-includes files while it does macro expansion.</p>
-
-<h3 id="usage">Usage of CPSA</h3>
-
-<blockquote>
-  <pre>$ cpsa -h
-Usage: cpsa [OPTIONS] [FILE]
-  -o FILE    --output=FILE      output FILE
-  -l INT     --limit=INT        step count limit (default 2000)
-  -b INT     --bound=INT        strand count bound (default 8)
-  -m INT     --margin=INT       set output margin (default 72)
-  -e         --expand           expand macros only; don't analyze
-  -n         --noisochk         disable isomorphism checks
-  -c         --check-nonces     check nonces first
-  -t         --try-old-strands  try old strands first
-  -r         --reverse-nodes    try younger nodes first
-  -a STRING  --algebra=STRING   algebra (default basic)
-  -s         --show-algebras    show algebras
-  -h         --help             show help message
-  -v         --version          show version number</pre>
-</blockquote>
-
-<p>This program will abort if too many steps are taken. A skeleton is printed
-for each step taken by the program. The step count limit option is used to
-override the default step count limit. It will also abort when it detects a
-skeleton with too many strands. The strand count bound option is used to
-override the default strand count bound. Another way to limit resources used by
-the program is to limit the amount of memory it may use. The command-line
-option <code>+RTS -M512m -RTS</code> limits memory usage to 512m.</p>
-
-<p>The herald form can be used to specify options within a file.  The
-  grammar for a herald form follows, where <code>ALIST</code> is an
-  association list with symbols as keys.</p>
-
-<blockquote>
-  <pre>HERALD ::= (herald TITLE ALIST)
-TITLE  ::= SYMBOL | STRING</pre>
-</blockquote>
-
-<p>The title is used by <code>cpsagraph</code> when generating XHTML.
-  In the following example, the herald form specifies a strand bound
-  of 12 in a way that is equivalent to the command line
-  option <code>--bound=12</code>.</p>
-
-<blockquote>
-  <pre>(herald "Needham-Schroeder Public-Key Protocol" (bound 12))</pre>
-</blockquote>
-
-<p>The herald form is only interpreted by the <code>cpsa</code> program,
-  and is treated as a comment by all other programs.  In particular,
-  specifying a <code>margin</code> option effects <code>cpsa</code> only.</p>
-
-<p>For long running problems, SMP parallelism is available. For example, on a
-quad-core machine, we would probably use <code>+RTS -N4 -RTS</code>.</p>
-
-<p>In addition to the options provided on the command line or a herald
-  form, one can influence the order in which test nodes are sought.
-  When a role includes <code>(reverse-search)</code> in its association
-  list as a comment, the nodes in its instances will be searched in
-  reverse order.</p>
-
-<p>When run with isomorphism checks disabled (<code>--noisochk</code>), CPSA
-searches for realized skeletons, not shapes. It attempts to speed up analysis
-by not identifying duplicate skeletons or generalizing realized skeletons,
-however in many cases, run times increase. It is used when normal analysis
-takes too much time on the chance that avoiding the checks makes more progress.
-</p>
-
-<p>In no isomorphism checking mode output, every realized skeleton is labeled a
-shape even when it is not. This allows the extraction of every realized
-skeletons from the output using the <a
-href="#cpsashapes"><code>cpsashapes</code></a> program.</p>
-
-<p>An error message that begins with "No test for unrealized node" identifies a
-severe error that should be reported as a bug.</p>
-
-<h3 id="priority">Search order</h3>
-
-<p>In its analysis, CPSA will attempt to solve unrealized nodes until the
-skeleton is realized, and then generalize until a shape is obtained.  When
-there are multiple unrealized nodes, by default, CPSA will chose the topmost,
-rightmost unrealized node among those unrealized nodes with maximum priority.
-The default priority of a node is 5, and higher numbers represent a higher
-priority.  When a node has non-positive priority, it is left unsolved.</p>
-
-<p>In a role, in order to specify a priority for an event other than
-the default, add a comment of the
-form <code>(priority (<var>i</var> <var>p</var>))</code>,
-where <var>i</var> is the index of the event in the trace,
-and <var>p</var> is the priority.
-Priorities are inherited
-from roles, but may be overridden in a skeleton with a
-<code>priority</code> comment of the form
-<code>(priority (<var>n</var> <var>p</var>))</code>,
-where <var>n</var> is a node.</p>
-
-<h2 id="cpsagraph">Visualization</h2>
-
-<p>The <code>cpsagraph</code> program produces a graphical rendering of the output
-or input of an analyzer using SVG. It is viewable only with a
-standards-compliant web browser such as FireFox.</p>
-
-<p>When applied to the output of CPSA, the program groups together all the
-skeletons related to each problem statement in the input. The program assembles
-the related skeletons into a directed acyclic graph using the parent identifier
-and renders it as a tree using SVG. Each vertex in the tree is the label added
-to the skeleton by the CPSA program. Click the label in the tree to view the
-skeleton. Hover over a node in a skeleton drawing to see the term associated
-with it. Hover over a role to see the mapping from role variables to skeleton
-variables.</p>
-
-<p>A node ordering edge in a skeleton drawing indicates that the message
-transmission at the source of the edge happened before message reception at the
-destination edge. The edge is solid if the transmitting term is syntactically
-identical to the receiving term, otherwise the edge is dashed. Thus in an
-algebra with a commutative operation <code>*</code>, the graphing program sometimes
-draws a dashed line between <code>(send (* a b))</code> and <code>(recv (* b
-a))</code>.</p>
-
-<p>In the tree drawing, the label of a shape is blue. For dead
-skeletons, the label is red, unless it has been seen before, in which
-case it is orange. Otherwise the label is green for skeletons seen
-before. Seen skeleton labels are rendered in an italic font.</p>
-
-<p>By the default, <code>cpsagraph</code> generates a view of CPSA S-expressions as
-a compound document that contains SVG within XHTML. This view integrates
-graphics with the input text.</p>
-
-<p>In compact mode, <code>cpsagraph</code> generates an SVG document. The tree is
-displayed immediately to the left of skeleton drawings. When there is more than
-one tree, the left-hand-side of the drawing contains a vertical listing of the
-trees. Compact mode output should never be used as a replacement for studying
-the text version of the output. The text version contains strictly more
-information, and should be displayed next to its graphical rendition.</p>
-
-<p>In LaTeX mode, <code>cpsagraph</code> generates LaTeX source. XY-pic is used for
-drawings of skeletons. The margin specified in <a
-href="cpsa.mk"><code>cpsa.mk</code></a> produces good results. </p>
-
-<h3>Usage</h3>
-
-<blockquote>
-  <pre>$ cpsagraph -h
-Usage: cpsagraph [OPTIONS] [FILE]
-  -o FILE  --output=FILE   output FILE
-  -x       --expanded      use expanded format (default)
-  -z       --zoom          enable diagram scaling
-  -t       --treeless      use treeless expanded format
-  -c       --compact       use compact format
-  -l       --latex         use LaTeX format
-  -m INT   --margin=INT    set output margin (default 72)
-  -i       --infix         output uses infix notation
-  -p       --purge-traces  purge traces
-  -h       --help          show help message
-  -v       --version       show version number</pre>
-</blockquote>
-
-<h2 id="cpsadiff">Output Comparisons</h2>
-
-<p>The <code>cpsadiff</code> program compares CPSA output files
-S-expression by S-expression, and prints the first skeleton that
-differs.</p>
-
-<h3>Usage</h3>
-
-<blockquote>
-  <pre>$ cpsadiff -h
-Usage: cpsadiff [OPTIONS] OLD-FILE NEW-FILE
-  -o FILE  --output=FILE  output FILE
-  -m INT   --margin=INT   set output margin (default 72)
-  -h       --help         show help message
-  -v       --version      show version number</pre>
-</blockquote>
-
-<h2 id="cpsashapes">Shape Extraction</h2>
-
-<p>The <code>cpsashapes</code> program extracts the original problems and the
-shapes from the output of a CPSA run. The shapes are linked to their problem so
-the output can be graphed.</p>
-
-<h3>Usage</h3>
-
-<blockquote>
-  <pre>$ cpsashapes -h
-Usage: cpsashapes [OPTIONS] [FILE]
-  -o FILE  --output=FILE  output FILE
-  -m INT   --margin=INT   set output margin (default 72)
-  -h       --help         show help message
-  -v       --version      show version number</pre>
-</blockquote>
-
-<h2 id="cpsasas">Formula Extraction</h2>
-
-<p>The <code>cpsasas</code> program extracts a formula in the language
-  of order-sorted first-order logic for each problem and its shapes
-  from a CPSA run. The formula is called a shape analysis
-  sentence. The formula is satisfied in all realized skeletons when
-  CPSA finds all the shapes for the problem.</p>
-
-<h3>Usage</h3>
-
-<blockquote>
-  <pre>$ cpsasas -h
-Usage: cpsasas [OPTIONS] [FILE]
-  -o FILE    --output=FILE     output FILE
-  -m INT     --margin=INT      set output margin (default 72)
-  -a STRING  --algebra=STRING  algebra (default basic)
-  -s         --show-algebras   show algebras
-  -h         --help            show help message
-  -v         --version         show version number</pre>
-</blockquote>
-
-<h2 id="cpsaannotations">Annotations</h2>
-
-<p>The <code>cpsaannotations</code> program uses protocol annotations to annotate
-shapes and generate protocol soundness obligations.</p>
-
-<h3>Usage</h3>
-
-<blockquote>
-  <pre>$ cpsaannotations -h
-Usage: cpsashapes [OPTIONS] [FILE]
-  -o FILE    --output=FILE     output FILE
-  -m INT     --margin=INT      set output margin (default 72)
-  -a STRING  --algebra=STRING  algebra (default basic)
-  -s         --show-algebras   show algebras
-  -h         --help            show help message
-  -v         --version         show version number</pre>
-</blockquote>
-
-<h3>Syntax</h3>
-
-<p>To be analyzed, each role in a protocol must include an <code>annotations</code>
-form. The <code>TERM</code> is a role atom that when instantiated, is the name of a
-principal in the shape. What follows is sequences of pairs. The integer gives
-the position of the event in the trace that is annotated by the formula.
-Zero-based indexing is used.</p>
-
-<p>The language of formulas is order-sorted first-order logic extended
-with a modal says operator. Formula terms may include function symbols
-that are not part of a protocol's message signature.</p>
-
-<blockquote>
-  <pre>ANNOTATION ::= (annotations TERM (INT FORMULA)*)
-FORMULA    ::= (ID FTERM*) | (not FORMULA)
-            |  (and FORMULA*) | (or FORMULA*)
-            |  (implies FORMULA* FORMULA)
-            |  (iff FORMULA FORMULA)
-            |  (says TERM FORMULA)
-            |  (forall (DECL*) FORMULA)
-	    |  (exists (DECL*) FORMULA)
-FTERM      ::= TERM | (ID FTERM*)</pre>
-</blockquote>
-
-<p>Use <code>(and)</code> for truth and <code>(or)</code> for falsehood.</p>
-
-<h3>Output</h3>
-
-<p>On output, each shape contains an <code>annotations</code> form and a
-<code>obligations</code> form. The annotations form presents every non-trivial
-formula derived from the protocol. The obligations form presents every
-non-trivial soundness obligation.</p>
-
-<h2 id="cpsaparameters">Parameter Analysis</h2>
-
-<p>The parameters of a role are the atoms that are not acquired by the role's
-trace, but must be available before a complete execution of the trace is
-possible. This program computes sets of sets of parameters consistent with the
-role. If the expected parameter set is not a member, a specification error is
-indicated.</p>
-
-<h3>Usage</h3>
-
-<blockquote>
-  <pre>$ cpsaparameters -h
-Usage: cpsaparameters [OPTIONS] [FILE]
-  -o FILE    --output=FILE     output FILE
-  -m INT     --margin=INT      set output margin (default 72)
-  -a STRING  --algebra=STRING  algebra (default basic)
-  -s         --show-algebras   show algebras
-  -h         --help            show help message
-  -v         --version         show version number</pre>
-</blockquote>
-
-<h3>Output</h3>
-
-<p>On output, each role contains a <code>parameters</code> form with a list of sets
-of atoms.</p>
-
-<blockquote>
-  <pre>(defrole resp (vars (b a name) (n2 n1 text))
-  (trace
-    (recv (enc n1 a (pubk b)))
-    (send (enc n1 n2 (pubk a)))
-    (recv (enc n2 (pubk b))))
-  (parameters
-    (n2 n1 a (pubk b) (pubk a))
-    (n2 (privk b) (pubk a))))</pre>
-</blockquote>
-
-<p>In this example, the second parameter set is what is expected for a
-responder role in this version of the Needham-Schroeder protocol.</p>
-
-<p>Macro expansion is not performed by this program. Use the <code>-e</code> option
-with <code>cpsa</code> to preprocess input that contains macro definitions.</p>
-
-<h2 id="cpsapp">Pretty Printing</h2>
-
-<p>The <code>cpsapp</code> program program pretty prints its input
-using the CPSA specific algorithm.  It also translates S-Expressions
-into JavaScript Object Notation (<a href="http://json.org">JSON</a>)
-to ease processing in other languages.</p>
-
-<h3>Usage</h3>
-
-<blockquote>
-  <pre>$ cpsapp -h
-Usage: cpsapp [OPTIONS] [FILE]
-  -o FILE  --output=FILE  output FILE
-  -m INT   --margin=INT   set output margin (default 72)
-  -i       --infix        output uses infix notation
-  -j       --json         output uses JSON notation
-  -h       --help         show help message
-  -v       --version      show version number</pre>
-</blockquote>
-
-<h2 id="cpsajson">JSON to S-Expression Translation</h2>
-
-<p>The <code>cpsajson</code> program translates JSON encoded CPSA into
-CPSA S-Expressions.</p>
-
-<h3>Usage</h3>
-
-<blockquote>
-  <pre>$ cpsajson -h
-Usage: cpsajson [OPTIONS] [FILE]
-  -o FILE  --output=FILE  output FILE
-  -m INT   --margin=INT   set output margin (default 72)
-  -i       --infix        output uses infix notation
-  -h       --help         show help message
-  -v       --version      show version number</pre>
-</blockquote>
-
-<h2>S-expressions</h2>
-
-<p>The S-expressions used are restricted so that most dialects of Lisp
-can read them, and characters within symbols and strings never need
-quoting. Every list is proper. An atom is either a symbol, an integer,
-or a string. The characters that make up a symbol are the letters, the
-digits, and the special characters in
-"<code>+-*/&lt;=&gt;!?:$%_&amp;~^</code>". A symbol may not begin with a
-digit or a sign followed by a digit. The characters that make up a
-string are the printing characters omitting double quote and
-backslash. Double quotes delimit a string. A comment begins with a
-semicolon, or is an S-expression list at top-level that starts with
-the <code>comment</code> symbol. </p>
-
-<hr />
-
-<p>Copyright (c) 2009 The MITRE Corporation. Permission to copy without fee all
-or part of this material is granted provided that the copies are not made or
-distributed for direct commercial advantage, this copyright notice and the
-title of the publication and its date appear, and notice in given that copying
-is by permission of The MITRE Corporation.</p>
-</body>
-</html>
diff --git a/doc/examples/blanchet.scm b/doc/examples/blanchet.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/blanchet.scm
@@ -0,0 +1,84 @@
+(herald "Blanchet's Simple Example Protocol"
+  (comment "There is a flaw in this protocol by design"))
+
+(defprotocol blanchet basic
+  (defrole init
+    (vars (a b akey) (s skey) (d data))
+    (trace
+     (send (enc (enc s (invk a)) b))
+     (recv (enc d s)))
+    (uniq-orig s))
+  (defrole resp
+    (vars (a b akey) (s skey) (d data))
+    (trace
+     (recv (enc (enc s (invk a)) b))
+     (send (enc d s)))
+    (uniq-orig d))
+  (comment "Blanchet's protocol"))
+
+(defskeleton blanchet
+  (vars (a b akey) (s skey) (d data))
+  (defstrand init 2 (a a) (b b) (s s) (d d))
+  (non-orig (invk b))
+  (comment "Analyze from the initiator's perspective"))
+
+(defskeleton blanchet
+  (vars (a b akey) (s skey) (d data))
+  (defstrand resp 2 (a a) (b b) (s s) (d d))
+  (non-orig (invk a) (invk b))
+  (comment "Analyze from the responder's perspective"))
+
+(defskeleton blanchet
+  (vars (a b akey) (s skey) (d data))
+  (defstrand init 2 (a a) (b b) (s s) (d d))
+  (deflistener d)
+  (non-orig (invk b))
+  (comment "From the initiator's perspective, is the secret leaked?"))
+
+(defskeleton blanchet
+  (vars (a b akey) (s skey) (d data))
+  (defstrand resp 2 (a a) (b b) (s s) (d d))
+  (deflistener d)
+  (non-orig (invk a) (invk b))
+  (comment "From the responders's perspective, is the secret leaked?"))
+
+(defprotocol blanchet-corrected basic
+  (defrole init
+    (vars (a b akey) (s skey) (d data))
+    (trace
+     (send (enc (enc s b (invk a)) b))
+     (recv (enc d s)))
+    (uniq-orig s))
+  (defrole resp
+    (vars (a b akey) (s skey) (d data))
+    (trace
+     (recv (enc (enc s b (invk a)) b))
+     (send (enc d s)))
+    (uniq-orig d))
+  (comment "Corrected Blanchet's protocol"))
+
+(defskeleton blanchet-corrected
+  (vars (a b akey) (s skey) (d data))
+  (defstrand init 2 (a a) (b b) (s s) (d d))
+  (non-orig (invk b))
+  (comment "Analyze from the initiator's perspective"))
+
+(defskeleton blanchet-corrected
+  (vars (a b akey) (s skey) (d data))
+  (defstrand init 2 (a a) (b b) (s s) (d d))
+  (deflistener d)
+  (non-orig (invk b))
+  (comment "From the initiator's perspective, is the secret leaked?"))
+
+(defskeleton blanchet-corrected
+  (vars (a b akey) (s skey) (d data))
+  (defstrand resp 2 (a a) (b b) (s s) (d d))
+  (non-orig (invk a) (invk b))
+  (comment "Analyze from the responder's perspective"))
+
+(defskeleton blanchet-corrected
+  (vars (a b akey) (s skey) (d data))
+  (defstrand resp 2 (a a) (b b) (s s) (d d))
+  (deflistener d)
+  (non-orig (invk a) (invk b))
+  (comment "From the responders's perspective, is the secret leaked?"))
diff --git a/doc/examples/blanchet.xhtml b/doc/examples/blanchet.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/blanchet.xhtml
@@ -0,0 +1,2013 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Blanchet's Simple Example Protocol</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Blanchet&apos;s Simple Example Protocol&quot;
+  (comment &quot;There is a flaw in this protocol by design&quot;))
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from blanchet.scm&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t4">4</a> <a href="#t6">6</a> <a href="#t11">11</a> <a href="#t14">14</a> <a href="#t18">18</a> <a href="#t23">23</a> <a href="#t25">25</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 154.920' font-size='12.000'>
+  <text
+   x='89.880' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol blanchet basic
+  (defrole init
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
+  (defrole resp
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment &quot;Blanchet&apos;s protocol&quot;))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Children: <a href="#k1">1</a> <a href="#k2">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc d s)</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>blanchet 0</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (non-orig (invk b))
+  (uniq-orig s)
+  (comment &quot;Analyze from the initiator&apos;s perspective&quot;)
+  (label 0)
+  (unrealized (0 1))
+  (origs (s (0 0)))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a-0)) b-0)</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a-0) (b b-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>blanchet 1</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b a-0 b-0 akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (defstrand resp 2 (d d) (s s) (a a-0) (b b-0))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (invk b))
+  (uniq-orig d s)
+  (operation encryption-test (added-strand resp 2) (enc d s) (0 1))
+  (label 1)
+  (parent 0)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k0">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>s</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>s</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>blanchet 2</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener s)
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (invk b))
+  (uniq-orig s)
+  (operation encryption-test (added-listener s) (enc d s) (0 1))
+  (label 2)
+  (parent 0)
+  (unrealized (1 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k3">Item <a href="#t0">3</a>, Parent: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>blanchet 3 (realized)</text></svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (invk b))
+  (uniq-orig d s)
+  (operation nonce-test (contracted (a-0 a) (b-0 b)) s (1 0)
+    (enc (enc s (invk a)) b))
+  (label 3)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (s s) (d d))))
+  (origs (d (1 1)) (s (0 0))))</pre>
+
+<p id="t4">Tree <a href="#top">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  </svg></div>
+
+<pre>(defprotocol blanchet basic
+  (defrole init
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
+  (defrole resp
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment &quot;Blanchet&apos;s protocol&quot;))</pre>
+
+<p id="k4">Item <a href="#t4">4</a>, Child: <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>blanchet 4</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (non-orig (invk a) (invk b))
+  (uniq-orig d)
+  (comment &quot;Analyze from the responder&apos;s perspective&quot;)
+  (label 4)
+  (unrealized (0 0))
+  (origs (d (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k5">Item <a href="#t4">5</a>, Parent: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s (invk a)) b-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((s s) (a a) (b b-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>blanchet 5 (realized)</text></svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b b-0 akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (defstrand init 1 (s s) (a a) (b b-0))
+  (precedes ((1 0) (0 0)))
+  (non-orig (invk a) (invk b))
+  (uniq-orig d s)
+  (operation encryption-test (added-strand init 1) (enc s (invk a))
+    (0 0))
+  (label 5)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (s s) (d d))))
+  (origs (s (1 0)) (d (0 1))))</pre>
+
+<p id="t6">Tree <a href="#top">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='229.680pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 229.680 154.920' font-size='12.000'>
+  <text
+   x='89.880' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k10&quot;, &quot;_self&quot;)'>10</text>
+  <line
+   x1='139.800' y1='39.960' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k9&quot;, &quot;_self&quot;)'>9</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k7&quot;, &quot;_self&quot;)'>7</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k6&quot;, &quot;_self&quot;)'>6</text>
+  </svg></div>
+
+<pre>(defprotocol blanchet basic
+  (defrole init
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
+  (defrole resp
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment &quot;Blanchet&apos;s protocol&quot;))</pre>
+
+<p id="k6">Item <a href="#t6">6</a>, Children: <a href="#k7">7</a> <a href="#k8">8</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>d</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>blanchet 6</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (non-orig (invk b))
+  (uniq-orig s)
+  (comment &quot;From the initiator&apos;s perspective, is the secret leaked?&quot;)
+  (label 6)
+  (unrealized (0 1))
+  (origs (s (0 0)))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k7">Item <a href="#t6">7</a>, Parent: <a href="#k6">6</a>, Child: <a href="#k9">9</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a-0)) b-0)</title>
+   <circle style='fill: red;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>d</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a-0) (b b-0))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>blanchet 7</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b a-0 b-0 akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (defstrand resp 2 (d d) (s s) (a a-0) (b b-0))
+  (precedes ((0 0) (2 0)) ((2 1) (0 1)) ((2 1) (1 0)))
+  (non-orig (invk b))
+  (uniq-orig d s)
+  (operation encryption-test (added-strand resp 2) (enc d s) (0 1))
+  (label 7)
+  (parent 6)
+  (unrealized (1 0) (2 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k8">Item <a href="#t6">8</a>, Parent: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>s</title><circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>s</title>
+   <circle style='fill: red;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>d</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>blanchet 8</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (deflistener s)
+  (precedes ((0 0) (2 0)) ((2 1) (0 1)))
+  (non-orig (invk b))
+  (uniq-orig s)
+  (operation encryption-test (added-listener s) (enc d s) (0 1))
+  (label 8)
+  (parent 6)
+  (unrealized (2 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k9">Item <a href="#t6">9</a>, Parent: <a href="#k7">7</a>, Child: <a href="#k10">10</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>d</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>blanchet 9</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (precedes ((0 0) (2 0)) ((2 1) (0 1)) ((2 1) (1 0)))
+  (non-orig (invk b))
+  (uniq-orig d s)
+  (operation nonce-test (contracted (a-0 a) (b-0 b)) s (2 0)
+    (enc (enc s (invk a)) b))
+  (label 9)
+  (parent 7)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k10">Item <a href="#t6">10</a>, Parent: <a href="#k9">9</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 242.880 152.460 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>s</title><circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>s</title>
+   <circle style='fill: red;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>d</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 114.960 Q 186.900 77.460 333.840 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>blanchet 10</text></svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (deflistener s)
+  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((2 1) (0 1)) ((2 1) (1 0))
+    ((3 1) (1 0)))
+  (non-orig (invk b))
+  (uniq-orig d s)
+  (operation nonce-test (added-listener s) d (1 0) (enc d s))
+  (label 10)
+  (parent 9)
+  (unrealized (3 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t11">Tree <a href="#top">11</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 79.920' font-size='12.000'>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k13&quot;, &quot;_self&quot;)'>13</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k12&quot;, &quot;_self&quot;)'>12</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k11&quot;, &quot;_self&quot;)'>11</text>
+  </svg></div>
+
+<pre>(defprotocol blanchet basic
+  (defrole init
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
+  (defrole resp
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment &quot;Blanchet&apos;s protocol&quot;))</pre>
+
+<p id="k11">Item <a href="#t11">11</a>, Child: <a href="#k12">12</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>d</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>blanchet 11</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (non-orig (invk a) (invk b))
+  (uniq-orig d)
+  (comment &quot;From the responders&apos;s perspective, is the secret leaked?&quot;)
+  (label 11)
+  (unrealized (0 0) (1 0))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k12">Item <a href="#t11">12</a>, Parent: <a href="#k11">11</a>, Child: <a href="#k13">13</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>d</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>blanchet 12</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (precedes ((0 1) (1 0)))
+  (non-orig (invk a) (invk b))
+  (uniq-orig d)
+  (label 12)
+  (parent 11)
+  (unrealized (0 0))
+  (origs (d (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k13">Item <a href="#t11">13</a>, Parent: <a href="#k12">12</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 114.960 Q 142.920 77.460 45.960 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s (invk a)) b-0)</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>d</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s (invk a)) b)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((s s) (a a) (b b-0))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>blanchet 13 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton blanchet
+  (vars (d data) (s skey) (a b b-0 akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (defstrand init 1 (s s) (a a) (b b-0))
+  (precedes ((0 1) (1 0)) ((2 0) (0 0)))
+  (non-orig (invk a) (invk b))
+  (uniq-orig d s)
+  (operation encryption-test (added-strand init 1) (enc s (invk a))
+    (0 0))
+  (label 13)
+  (parent 12)
+  (unrealized)
+  (shape)
+  (maps ((0 1) ((a a) (b b) (s s) (d d))))
+  (origs (s (2 0)) (d (0 1))))</pre>
+
+<p id="t14">Tree <a href="#top">14</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 154.920' font-size='12.000'>
+  <text
+   x='89.880' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k16&quot;, &quot;_self&quot;)'>16</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k17&quot;, &quot;_self&quot;)'>17</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k15&quot;, &quot;_self&quot;)'>15</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k14&quot;, &quot;_self&quot;)'>14</text>
+  </svg></div>
+
+<pre>(defprotocol blanchet-corrected basic
+  (defrole init
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s b (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
+  (defrole resp
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s b (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment &quot;Corrected Blanchet&apos;s protocol&quot;))</pre>
+
+<p id="k14">Item <a href="#t14">14</a>, Children: <a href="#k15">15</a> <a href="#k16">16</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc d s)</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 14</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (non-orig (invk b))
+  (uniq-orig s)
+  (comment &quot;Analyze from the initiator&apos;s perspective&quot;)
+  (label 14)
+  (unrealized (0 1))
+  (origs (s (0 0)))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k15">Item <a href="#t14">15</a>, Parent: <a href="#k14">14</a>, Child: <a href="#k17">17</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b-0 (invk a-0)) b-0)</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a-0) (b b-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 15</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b a-0 b-0 akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (defstrand resp 2 (d d) (s s) (a a-0) (b b-0))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (invk b))
+  (uniq-orig d s)
+  (operation encryption-test (added-strand resp 2) (enc d s) (0 1))
+  (label 15)
+  (parent 14)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k16">Item <a href="#t14">16</a>, Parent: <a href="#k14">14</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>s</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>s</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 16</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener s)
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (invk b))
+  (uniq-orig s)
+  (operation encryption-test (added-listener s) (enc d s) (0 1))
+  (label 16)
+  (parent 14)
+  (unrealized (1 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k17">Item <a href="#t14">17</a>, Parent: <a href="#k15">15</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 17 (realized)</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (invk b))
+  (uniq-orig d s)
+  (operation nonce-test (contracted (a-0 a) (b-0 b)) s (1 0)
+    (enc (enc s b (invk a)) b))
+  (label 17)
+  (parent 15)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (s s) (d d))))
+  (origs (d (1 1)) (s (0 0))))</pre>
+
+<p id="t18">Tree <a href="#top">18</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='229.680pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 229.680 154.920' font-size='12.000'>
+  <text
+   x='89.880' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k20&quot;, &quot;_self&quot;)'>20</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k22&quot;, &quot;_self&quot;)'>22</text>
+  <line
+   x1='139.800' y1='39.960' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k21&quot;, &quot;_self&quot;)'>21</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k19&quot;, &quot;_self&quot;)'>19</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k18&quot;, &quot;_self&quot;)'>18</text>
+  </svg></div>
+
+<pre>(defprotocol blanchet-corrected basic
+  (defrole init
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s b (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
+  (defrole resp
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s b (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment &quot;Corrected Blanchet&apos;s protocol&quot;))</pre>
+
+<p id="k18">Item <a href="#t18">18</a>, Children: <a href="#k19">19</a> <a href="#k20">20</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>d</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 18</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (non-orig (invk b))
+  (uniq-orig s)
+  (comment &quot;From the initiator&apos;s perspective, is the secret leaked?&quot;)
+  (label 18)
+  (unrealized (0 1))
+  (origs (s (0 0)))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k19">Item <a href="#t18">19</a>, Parent: <a href="#k18">18</a>, Child: <a href="#k21">21</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b-0 (invk a-0)) b-0)</title>
+   <circle style='fill: red;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>d</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a-0) (b b-0))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 19</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b a-0 b-0 akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (defstrand resp 2 (d d) (s s) (a a-0) (b b-0))
+  (precedes ((0 0) (2 0)) ((2 1) (0 1)) ((2 1) (1 0)))
+  (non-orig (invk b))
+  (uniq-orig d s)
+  (operation encryption-test (added-strand resp 2) (enc d s) (0 1))
+  (label 19)
+  (parent 18)
+  (unrealized (1 0) (2 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k20">Item <a href="#t18">20</a>, Parent: <a href="#k18">18</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>s</title><circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>s</title>
+   <circle style='fill: red;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>d</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 20</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (deflistener s)
+  (precedes ((0 0) (2 0)) ((2 1) (0 1)))
+  (non-orig (invk b))
+  (uniq-orig s)
+  (operation encryption-test (added-listener s) (enc d s) (0 1))
+  (label 20)
+  (parent 18)
+  (unrealized (2 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k21">Item <a href="#t18">21</a>, Parent: <a href="#k19">19</a>, Child: <a href="#k22">22</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>d</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 21</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (precedes ((0 0) (2 0)) ((2 1) (0 1)) ((2 1) (1 0)))
+  (non-orig (invk b))
+  (uniq-orig d s)
+  (operation nonce-test (contracted (a-0 a) (b-0 b)) s (2 0)
+    (enc (enc s b (invk a)) b))
+  (label 21)
+  (parent 19)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k22">Item <a href="#t18">22</a>, Parent: <a href="#k21">21</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 242.880 152.460 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>s</title><circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>s</title>
+   <circle style='fill: red;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>d</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 114.960 Q 186.900 77.460 333.840 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 22</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (deflistener s)
+  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((2 1) (0 1)) ((2 1) (1 0))
+    ((3 1) (1 0)))
+  (non-orig (invk b))
+  (uniq-orig d s)
+  (operation nonce-test (added-listener s) d (1 0) (enc d s))
+  (label 22)
+  (parent 21)
+  (unrealized (3 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t23">Tree <a href="#top">23</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k24&quot;, &quot;_self&quot;)'>24</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k23&quot;, &quot;_self&quot;)'>23</text>
+  </svg></div>
+
+<pre>(defprotocol blanchet-corrected basic
+  (defrole init
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s b (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
+  (defrole resp
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s b (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment &quot;Corrected Blanchet&apos;s protocol&quot;))</pre>
+
+<p id="k23">Item <a href="#t23">23</a>, Child: <a href="#k24">24</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 23</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (non-orig (invk a) (invk b))
+  (uniq-orig d)
+  (comment &quot;Analyze from the responder&apos;s perspective&quot;)
+  (label 23)
+  (unrealized (0 0))
+  (origs (d (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k24">Item <a href="#t23">24</a>, Parent: <a href="#k23">23</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((s s) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 24 (realized)</text>
+  </svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (defstrand init 1 (s s) (a a) (b b))
+  (precedes ((1 0) (0 0)))
+  (non-orig (invk a) (invk b))
+  (uniq-orig d s)
+  (operation encryption-test (added-strand init 1) (enc s b (invk a))
+    (0 0))
+  (label 24)
+  (parent 23)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (s s) (d d))))
+  (origs (s (1 0)) (d (0 1))))</pre>
+
+<p id="t25">Tree <a href="#top">25</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='229.680pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 229.680 79.920' font-size='12.000'>
+  <text
+   x='189.720' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k28&quot;, &quot;_self&quot;)'>28</text>
+  <line
+   x1='139.800' y1='39.960' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k27&quot;, &quot;_self&quot;)'>27</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k26&quot;, &quot;_self&quot;)'>26</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k25&quot;, &quot;_self&quot;)'>25</text>
+  </svg></div>
+
+<pre>(defprotocol blanchet-corrected basic
+  (defrole init
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s b (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
+  (defrole resp
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s b (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment &quot;Corrected Blanchet&apos;s protocol&quot;))</pre>
+
+<p id="k25">Item <a href="#t25">25</a>, Child: <a href="#k26">26</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>d</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc d s)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 25</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (non-orig (invk a) (invk b))
+  (uniq-orig d)
+  (comment &quot;From the responders&apos;s perspective, is the secret leaked?&quot;)
+  (label 25)
+  (unrealized (0 0) (1 0))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k26">Item <a href="#t25">26</a>, Parent: <a href="#k25">25</a>, Child: <a href="#k27">27</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>d</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 26</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (precedes ((0 1) (1 0)))
+  (non-orig (invk a) (invk b))
+  (uniq-orig d)
+  (label 26)
+  (parent 25)
+  (unrealized (0 0))
+  (origs (d (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k27">Item <a href="#t25">27</a>, Parent: <a href="#k26">26</a>, Child: <a href="#k28">28</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 114.960 Q 142.920 77.460 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>d</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((s s) (a a) (b b))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 27</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (defstrand init 1 (s s) (a a) (b b))
+  (precedes ((0 1) (1 0)) ((2 0) (0 0)))
+  (non-orig (invk a) (invk b))
+  (uniq-orig d s)
+  (operation encryption-test (added-strand init 1) (enc s b (invk a))
+    (0 0))
+  (label 27)
+  (parent 26)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k28">Item <a href="#t25">28</a>, Parent: <a href="#k27">27</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 242.880 152.460 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>s</title><circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>s</title>
+   <circle style='fill: red;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 142.920 77.460 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 286.860 114.960 333.840 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>d</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>d</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc d s)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc s b (invk a)) b)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((s s) (a a) (b b))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((d d) (s s) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>blanchet-corrected 28</text></svg></div>
+
+<pre>(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (defstrand init 1 (s s) (a a) (b b))
+  (deflistener s)
+  (precedes ((0 1) (1 0)) ((2 0) (0 0)) ((2 0) (3 0)) ((3 1) (1 0)))
+  (non-orig (invk a) (invk b))
+  (uniq-orig d s)
+  (operation nonce-test (added-listener s) d (1 0) (enc d s))
+  (label 28)
+  (parent 27)
+  (unrealized (3 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/bltk_or.scm b/doc/examples/bltk_or.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/bltk_or.scm
@@ -0,0 +1,28 @@
+(herald "Otway-Rees Protocol"
+	(comment "Standard version using variables of sort mesg")
+	(algebra diffie-hellman))
+
+(defprotocol or diffie-hellman
+  (defrole init (vars (a b s name) (na text) (k skey) (m text))
+    (trace
+     (send (cat m a b (enc na m a b (bltk a s))))
+     (recv (cat m (enc na k (bltk a s))))))
+  (defrole resp
+    (vars (a b s name) (nb text) (k skey) (m text) (x y mesg))
+    (trace
+     (recv (cat m a b x))
+     (send (cat m a b x (enc nb m a b (bltk b s))))
+     (recv (cat m y (enc nb k (bltk b s))))
+     (send y)))
+  (defrole serv (vars (a b s name) (na nb text) (k skey) (m text))
+    (trace
+     (recv (cat m a b (enc na m a b (bltk a s))
+		(enc nb m a b (bltk b s))))
+     (send (cat m (enc na k (bltk a s)) (enc nb k (bltk b s)))))
+    (uniq-orig k)))
+
+(defskeleton or
+  (vars (nb text) (s a b name))
+  (defstrand resp 4 (a a) (b b) (s s) (nb nb))
+  (non-orig (bltk a s) (bltk b s))
+  (uniq-orig nb))
diff --git a/doc/examples/bltk_or.xhtml b/doc/examples/bltk_or.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/bltk_or.xhtml
@@ -0,0 +1,1329 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Otway-Rees Protocol</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Otway-Rees Protocol&quot;
+  (comment &quot;Standard version using variables of sort mesg&quot;)
+  (algebra diffie-hellman))
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from bltk_or.scm&quot;)</pre>
+
+<p id="t0">Tree 0.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.600pt' height='829.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.600 829.920' font-size='12.000'>
+  <text
+   x='189.720' y='776.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k16&quot;, &quot;_self&quot;)'>16</text>
+  <line
+   x1='139.800' y1='714.960' x2='189.720' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='701.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k15&quot;, &quot;_self&quot;)'>15</text>
+  <line
+   x1='139.800' y1='714.960' x2='189.720' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='626.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k13&quot;, &quot;_self&quot;)'>13</text>
+  <line
+   x1='139.800' y1='714.960' x2='189.720' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='701.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  <line
+   x1='89.880' y1='714.960' x2='139.800' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='701.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  <line
+   x1='39.960' y1='414.960' x2='89.880' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='551.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k7&quot;, &quot;_self&quot;)'>7</text>
+  <line
+   x1='89.880' y1='564.960' x2='139.800' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='551.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  <line
+   x1='39.960' y1='414.960' x2='89.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='476.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k14&quot;, &quot;_self&quot;)'>14</text>
+  <line
+   x1='139.800' y1='377.460' x2='189.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='401.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k13&quot;, &quot;_self&quot;)'>13</text>
+  <line
+   x1='139.800' y1='377.460' x2='189.720' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='326.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k12&quot;, &quot;_self&quot;)'>12</text>
+  <line
+   x1='139.800' y1='377.460' x2='189.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='251.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k10&quot;, &quot;_self&quot;)'>10</text>
+  <line
+   x1='139.800' y1='377.460' x2='189.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='363.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k6&quot;, &quot;_self&quot;)'>6</text>
+  <line
+   x1='89.880' y1='377.460' x2='139.800' y2='377.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='363.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  <line
+   x1='39.960' y1='414.960' x2='89.880' y2='377.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='176.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k13&quot;, &quot;_self&quot;)'>13</text>
+  <line
+   x1='189.720' y1='189.960' x2='239.640' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='176.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k11&quot;, &quot;_self&quot;)'>11</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='101.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k10&quot;, &quot;_self&quot;)'>10</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='26.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k12&quot;, &quot;_self&quot;)'>12</text>
+  <line
+   x1='189.720' y1='39.960' x2='239.640' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k9&quot;, &quot;_self&quot;)'>9</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  <line
+   x1='89.880' y1='114.960' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='414.960' x2='89.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='401.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol or diffie-hellman
+  (defrole init
+    (vars (a b s name) (na text) (k skey) (m text))
+    (trace (send (cat m a b (enc na m a b (bltk a s))))
+      (recv (cat m (enc na k (bltk a s))))))
+  (defrole resp
+    (vars (a b s name) (nb text) (k skey) (m text) (x y mesg))
+    (trace (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b (bltk b s))))
+      (recv (cat m y (enc nb k (bltk b s)))) (send y)))
+  (defrole serv
+    (vars (a b s name) (na nb text) (k skey) (m text))
+    (trace
+      (recv
+        (cat m a b (enc na m a b (bltk a s)) (enc nb m a b (bltk b s))))
+      (send (cat m (enc na k (bltk a s)) (enc nb k (bltk b s)))))
+    (uniq-orig k)))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Children: <a href="#k1">1</a> <a href="#k2">2</a> <a href="#k3">3</a> <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s b)))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat m a b x (enc nb m a b (bltk s b)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>or 0</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m text) (s a b name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (non-orig (bltk s a) (bltk s b))
+  (uniq-orig nb)
+  (label 0)
+  (unrealized (0 2))
+  (origs (nb (0 1)))
+  (comment &quot;4 in cohort - 4 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat m-0 (enc na k (bltk b a-0)) (enc nb k (bltk s b)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m-0 a-0 s (enc na m-0 a-0 s (bltk b a-0)) (enc nb m-0 a-0 s (bltk s b)))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s b)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (bltk s b)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na na) (nb nb) (m m-0) (a a-0) (b s) (s b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>or 1</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m na m-0 text) (s a b a-0 name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m-0) (a a-0) (b s) (s b) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (bltk s a) (bltk s b))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand serv 2) (enc nb k (bltk s b))
+    (0 2))
+  (label 1)
+  (parent 0)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat m-0 (enc na k (bltk s a-0)) (enc nb k (bltk s b)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m-0 a-0 b (enc na m-0 a-0 b (bltk s a-0)) (enc nb m-0 a-0 b (bltk s b)))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s b)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (bltk s b)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na na) (nb nb) (m m-0) (a a-0) (b b) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>or 2</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m na m-0 text) (s a b a-0 name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m-0) (a a-0) (b b) (s s) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (bltk s a) (bltk s b))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand serv 2) (enc nb k (bltk s b))
+    (0 2))
+  (label 2)
+  (parent 0)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k3">Item <a href="#t0">3</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat m-0 (enc nb k (bltk s b)) (enc nb-0 k (bltk b b-0)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m-0 s b-0 (enc nb m-0 s b-0 (bltk s b)) (enc nb-0 m-0 s b-0 (bltk b b-0)))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s b)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (bltk s b)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((na nb) (nb nb-0) (m m-0) (a s) (b b-0) (s b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>or 3</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m nb-0 m-0 text) (s a b b-0 name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand serv 2 (na nb) (nb nb-0) (m m-0) (a s) (b b-0) (s b) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (bltk s a) (bltk s b))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand serv 2) (enc nb k (bltk s b))
+    (0 2))
+  (label 3)
+  (parent 0)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k4">Item <a href="#t0">4</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k8">8</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat m-0 (enc nb k (bltk s b)) (enc nb-0 k (bltk s b-0)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m-0 b b-0 (enc nb m-0 b b-0 (bltk s b)) (enc nb-0 m-0 b b-0 (bltk s b-0)))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s b)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (bltk s b)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((na nb) (nb nb-0) (m m-0) (a b) (b b-0) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>or 4</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m nb-0 m-0 text) (s a b b-0 name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand serv 2 (na nb) (nb nb-0) (m m-0) (a b) (b b-0) (s s) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (bltk s a) (bltk s b))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand serv 2) (enc nb k (bltk s b))
+    (0 2))
+  (label 4)
+  (parent 0)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k5">Item <a href="#t0">5</a>, Parent: <a href="#k1">1</a>, Children: <a href="#k9">9</a> <a href="#k10">10</a> <a href="#k11">11</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc na k (bltk a b)) (enc nb k (bltk b b)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a b (enc na m a b (bltk a b)) (enc nb m a b (bltk b b)))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk b b)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (bltk b b)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na na) (nb nb) (m m) (a a) (b b) (s b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s b) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>or 5</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m na text) (a b name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s b) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m) (a a) (b b) (s b) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (bltk a b) (bltk b b))
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc nb m-0 a-0 s (bltk s b)) (1 0))
+  (label 5)
+  (parent 1)
+  (unrealized (1 0))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k6">Item <a href="#t0">6</a>, Parent: <a href="#k2">2</a>, Children: <a href="#k12">12</a> <a href="#k13">13</a> <a href="#k14">14</a>, Seen Child: <a href="#k10">10</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc na k (bltk s a)) (enc nb k (bltk s b)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a b (enc na m a b (bltk s a)) (enc nb m a b (bltk s b)))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s b)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (bltk s b)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na na) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>or 6</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m na text) (s a b name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (bltk s a) (bltk s b))
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc nb m-0 a-0 b (bltk s b)) (1 0))
+  (label 6)
+  (parent 2)
+  (seen 10)
+  (unrealized (1 0))
+  (comment &quot;4 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k7">Item <a href="#t0">7</a>, Parent: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat m (enc nb k (bltk a b)) (enc nb-0 k (bltk b b)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a b (enc nb m a b (bltk a b)) (enc nb-0 m a b (bltk b b)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk a b)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (bltk a b)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na nb) (nb nb-0) (m m) (a a) (b b) (s b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s a) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>or 7 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m nb-0 text) (a b name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s a) (k k))
+  (defstrand serv 2 (na nb) (nb nb-0) (m m) (a a) (b b) (s b) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (bltk a a) (bltk a b))
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc nb m-0 s b (bltk s b)) (1 0))
+  (label 7)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s a) (a a) (b b) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+<p id="k8">Item <a href="#t0">8</a>, Parent: <a href="#k4">4</a>, Children: <a href="#k15">15</a> <a href="#k16">16</a>, Seen Child: <a href="#k13">13</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat m (enc nb k (bltk s a)) (enc nb-0 k (bltk s a)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a a (enc nb m a a (bltk s a)) (enc nb-0 m a a (bltk s a)))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s a)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x (enc nb m a a (bltk s a)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>or 8</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m nb-0 text) (s a name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand serv 2 (na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (bltk s a))
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc nb m-0 b b (bltk s b)) (1 0))
+  (label 8)
+  (parent 4)
+  (seen 13)
+  (unrealized (1 0))
+  (comment &quot;3 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k9">Item <a href="#t0">9</a>, Parent: <a href="#k5">5</a>, Seen Child: <a href="#k12">12</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 114.960 Q 192.300 150.660 144.719 186.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b (enc na m a b (bltk a b)))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc na k (bltk a b)) (enc nb k (bltk b b)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a b (enc na m a b (bltk a b)) (enc nb m a b (bltk b b)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk b b)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (bltk b b)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na na) (m m) (a a) (b b) (s b))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((na na) (nb nb) (m m) (a a) (b b) (s b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s b) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>or 9 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m na text) (a b name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s b) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m) (a a) (b b) (s b) (k k))
+  (defstrand init 1 (na na) (m m) (a a) (b b) (s b))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((2 0) (1 0)))
+  (non-orig (bltk a b) (bltk b b))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand init 1)
+    (enc na m a b (bltk a b)) (1 0))
+  (label 9)
+  (parent 5)
+  (seen 12)
+  (unrealized)
+  (comment &quot;1 in cohort - 0 not yet seen&quot;))</pre>
+
+<p id="k10">Item <a href="#t0">10</a>, Parent: <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x-0 (enc na m a b (bltk a b)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc na k (bltk a b)) (enc nb k (bltk b b)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a b (enc na m a b (bltk a b)) (enc nb m a b (bltk b b)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk b b)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (bltk b b)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((x x-0) (nb na) (m m) (a a) (b b) (s a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((na na) (nb nb) (m m) (a a) (b b) (s b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s b) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>or 10 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y x-0 mesg) (nb m na text) (a b name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s b) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m) (a a) (b b) (s b) (k k))
+  (defstrand resp 2 (x x-0) (nb na) (m m) (a a) (b b) (s a))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((2 1) (1 0)))
+  (non-orig (bltk a b) (bltk b b))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand resp 2)
+    (enc na m a b (bltk a b)) (1 0))
+  (label 10)
+  (parent 5)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s b) (a a) (b b) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+<p id="k11">Item <a href="#t0">11</a>, Parent: <a href="#k5">5</a>, Seen Child: <a href="#k13">13</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc nb k (bltk a a)) (enc nb k (bltk a a)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a a (enc nb m a a (bltk a a)) (enc nb m a a (bltk a a)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk a a)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x (enc nb m a a (bltk a a)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na nb) (nb nb) (m m) (a a) (b a) (s a) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b a) (s a) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>or 11 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m text) (a name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s a) (k k))
+  (defstrand serv 2 (na nb) (nb nb) (m m) (a a) (b a) (s a) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (bltk a a))
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc na m a a (bltk a a)) (1 0))
+  (label 11)
+  (parent 5)
+  (seen 13)
+  (unrealized)
+  (comment &quot;1 in cohort - 0 not yet seen&quot;))</pre>
+
+<p id="k12">Item <a href="#t0">12</a>, Parent: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 114.960 Q 192.300 150.660 144.719 186.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b (enc na m a b (bltk s a)))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc na k (bltk s a)) (enc nb k (bltk s b)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a b (enc na m a b (bltk s a)) (enc nb m a b (bltk s b)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s b)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (bltk s b)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na na) (m m) (a a) (b b) (s s))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((na na) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>or 12 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m na text) (s a b name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand init 1 (na na) (m m) (a a) (b b) (s s))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((2 0) (1 0)))
+  (non-orig (bltk s a) (bltk s b))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand init 1)
+    (enc na m a b (bltk s a)) (1 0))
+  (label 12)
+  (parent 6)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s s) (a a) (b b) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+<p id="k13">Item <a href="#t0">13</a>, Parent: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc nb k (bltk s a)) (enc nb k (bltk s a)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a a (enc nb m a a (bltk s a)) (enc nb m a a (bltk s a)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s a)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x (enc nb m a a (bltk s a)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na nb) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>or 13 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m text) (s a name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand serv 2 (na nb) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (bltk s a))
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc na m a a (bltk s a)) (1 0))
+  (label 13)
+  (parent 6)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s s) (a a) (b a) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+<p id="k14">Item <a href="#t0">14</a>, Parent: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x-0 (enc na m a a (bltk s a)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc na k (bltk s a)) (enc nb k (bltk s a)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a a (enc na m a a (bltk s a)) (enc nb m a a (bltk s a)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s a)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x (enc nb m a a (bltk s a)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((x x-0) (nb na) (m m) (a a) (b a) (s s))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((na na) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>or 14 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y x-0 mesg) (nb m na text) (s a name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand resp 2 (x x-0) (nb na) (m m) (a a) (b a) (s s))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((2 1) (1 0)))
+  (non-orig (bltk s a))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand resp 2)
+    (enc na m a a (bltk s a)) (1 0))
+  (label 14)
+  (parent 6)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s s) (a a) (b a) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+<p id="k15">Item <a href="#t0">15</a>, Parent: <a href="#k8">8</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 114.960 Q 192.300 150.660 144.719 186.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a (enc nb-0 m a a (bltk s a)))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat m (enc nb k (bltk s a)) (enc nb-0 k (bltk s a)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a a (enc nb m a a (bltk s a)) (enc nb-0 m a a (bltk s a)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s a)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x (enc nb m a a (bltk s a)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na nb-0) (m m) (a a) (b a) (s s))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>or 15 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m nb-0 text) (s a name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand serv 2 (na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))
+  (defstrand init 1 (na nb-0) (m m) (a a) (b a) (s s))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((2 0) (1 0)))
+  (non-orig (bltk s a))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand init 1)
+    (enc nb-0 m a a (bltk s a)) (1 0))
+  (label 15)
+  (parent 8)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s s) (a a) (b a) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+<p id="k16">Item <a href="#t0">16</a>, Parent: <a href="#k8">8</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x-0 (enc nb-0 m a a (bltk s a)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat m (enc nb k (bltk s a)) (enc nb-0 k (bltk s a)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a a (enc nb m a a (bltk s a)) (enc nb-0 m a a (bltk s a)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (bltk s a)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x (enc nb m a a (bltk s a)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((x x-0) (nb nb-0) (m m) (a a) (b a) (s s))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>or 16 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y x-0 mesg) (nb m nb-0 text) (s a name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand serv 2 (na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))
+  (defstrand resp 2 (x x-0) (nb nb-0) (m m) (a a) (b a) (s s))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((2 1) (1 0)))
+  (non-orig (bltk s a))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand resp 2)
+    (enc nb-0 m a a (bltk s a)) (1 0))
+  (label 16)
+  (parent 8)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s s) (a a) (b a) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/envelope.scm b/doc/examples/envelope.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/envelope.scm
@@ -0,0 +1,129 @@
+;;; Mark Ryan's envelope protocol, implemented using TPMs.
+;;; The protocol includes roles to emulate interactions with a simplified
+;;; TPM (trusted platform module) that only has a single Platform
+;;; Configuration Register (PCR).  
+
+;;; The true protocol is encoded in the "alice" role.  Alice is a
+;;; teenager who wants to go out for an evening and maintain privacy
+;;; about her itinerary, but her parents insist on being able to know in
+;;; an emergency.
+
+;;; Alice uses a TPM-created key to encrypt the itinerary (represented
+;;; by 'v' for value).  Alice's parents can alter the state of the TPM
+;;; in either of two ways, but not in both: they can extend with
+;;; "obtain", which will enable decryption of 'v'.  Or, they can
+;;; extend with "refuse", which serves to represent permanently declining
+;;; the option to open the envelope.  
+
+(herald "Envelope Protocol" (bound 20))
+
+;;; Encoding of a PCR extend operation
+(defmacro (extend val old)
+  (hash val old))
+
+;; This is the refusal token
+(defmacro (refuse n pcr v k aik)
+  (enc "quote" (extend "refuse" (extend n pcr)) (enc v k) aik))
+
+(defprotocol envelope basic
+
+  ;; Power on sets the TPM to the boot state
+  (defrole tpm-power-on
+    (vars (state mesg))
+    (trace
+     (init "0")))
+
+  ;; TPM Quote has a fake event to deal with the fact that a variable
+  ;; of sort mesg must be acquired.
+  (defrole tpm-quote
+    (vars (nonce pcr mesg) (aik akey))
+    (trace
+     (recv (cat "quote" nonce))
+     (obsv pcr)
+     (send (enc "quote" pcr nonce aik)))
+    (non-orig aik))
+
+  ;; The extend command occurs only within an encrypted session.  We
+  ;; assume some session key already exists
+  (defrole tpm-extend-enc
+    (vars (value state mesg) (esk skey) (tne tno data)
+	  (tpmkey akey))
+    (trace
+     (recv (cat "establish transport"
+		tpmkey (enc esk tpmkey)))
+     (send (cat "establish transport" tne))
+     (recv (cat "execute transport"
+		(cat "extend" (enc value esk))
+		tno "false"
+		(hash esk (hash "execute transport"
+				(hash "extend"
+				      (enc value esk)))
+				tne tno "false")))
+     (tran state (extend value state)))
+    (uniq-orig tne)
+    (non-orig (invk tpmkey)))
+
+  ;; This role creates a key whose use is restricted to a requested
+  ;; pcr value (since we only model one pcr).  It doesn't create or
+  ;; change any TPM state.
+  (defrole tpm-create-key
+    (vars (k aik akey) (pcr mesg) (esk skey))
+    (trace
+     (recv (enc "create key" pcr esk)) ;; encryption prevents weird shapes
+     (send (enc "created" k pcr aik)));; no tpm state is set
+    (uniq-orig k)
+    (non-orig (invk k) aik esk))
+
+  ;; This role receives an encryption and a previously made key
+  ;; structure that restricts the decryption key to be used with a
+  ;; certain pcr value.  It retrieves the current value and checks
+  ;; that it matches before decrypting.
+  (defrole tpm-decrypt
+    (vars (m pcr mesg) (k aik akey))
+    (trace
+     (recv (cat "decrypt" (enc m k)))
+     (recv (enc "created" k pcr aik))
+     (obsv pcr)
+     (send m))
+    (non-orig aik))
+
+  ;; Alice extends a pcr with a fresh nonce in an encrypted session.
+  ;; She has the TPM create a new key whose use is bound to the hash
+  ;; of pcr value she just created with the string "obtain".  She then
+  ;; encrypts her fresh secret with this newly created key.  This role
+  ;; has a fake reception event to deal with he fact that pcr must be
+  ;; acquired.
+  (defrole alice
+    (vars (v n tne tno data) (esk1 esk skey) (k aik tpmkey akey)
+	  (pcr mesg))
+    (trace
+     (send (cat "establish transport"
+		tpmkey (enc esk tpmkey)))
+     (recv (cat "establish transport" tne))
+     (send (cat "execute transport"
+		(cat "extend" (enc n esk))
+		tno "false"
+		(hash esk (hash "execute transport"
+				(hash "extend"
+				      (enc n esk)))
+				tne tno "false")))
+     (recv pcr)				; Fake event
+     (send (enc "create key" (extend "obtain" (extend n pcr)) esk1))
+     (recv (enc "created" k (extend "obtain" (extend n pcr)) aik))
+     (send (enc v k)))
+    (uniq-orig n v tno esk)
+    (neq (tno n))
+    (non-orig aik esk1 (invk tpmkey))))
+
+;;; Initial skeleton
+(defskeleton envelope
+  (vars (v n data) (k aik akey) (pcr mesg))
+  (deflistener (refuse n pcr v k aik))
+  (deflistener v)
+  (defstrand alice 7 (n n) (pcr pcr) (v v) (k k) (aik aik)))
+
+(defskeleton envelope
+  (vars (v data))
+  (deflistener v)
+  (defstrand alice 7 (v v)))
+
diff --git a/doc/examples/envelope.xhtml b/doc/examples/envelope.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/envelope.xhtml
@@ -0,0 +1,21431 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Envelope Protocol</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Envelope Protocol&quot; (bound 20))
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from envelope_short.scm&quot;)
+(comment &quot;Strand count bounded at 20&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t59">59</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='978.480pt' height='1729.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 978.480 1729.920' font-size='12.000'>
+  <text
+   x='688.920' y='1676.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k41&quot;, &quot;_self&quot;)'>41</text>
+  <line
+   x1='639.000' y1='1689.960' x2='688.920' y2='1689.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='639.000' y='1676.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k37&quot;, &quot;_self&quot;)'>37</text>
+  <line
+   x1='589.080' y1='1652.460' x2='639.000' y2='1689.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='639.000' y='1601.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k36&quot;, &quot;_self&quot;)'>36</text>
+  <line
+   x1='589.080' y1='1652.460' x2='639.000' y2='1614.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='1638.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k32&quot;, &quot;_self&quot;)'>32</text>
+  <line
+   x1='539.160' y1='1539.960' x2='589.080' y2='1652.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='1526.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k31&quot;, &quot;_self&quot;)'>31</text>
+  <line
+   x1='539.160' y1='1539.960' x2='589.080' y2='1539.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='688.920' y='1451.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k40&quot;, &quot;_self&quot;)'>40</text>
+  <line
+   x1='639.000' y1='1464.960' x2='688.920' y2='1464.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='639.000' y='1451.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k35&quot;, &quot;_self&quot;)'>35</text>
+  <line
+   x1='589.080' y1='1427.460' x2='639.000' y2='1464.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='639.000' y='1376.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k34&quot;, &quot;_self&quot;)'>34</text>
+  <line
+   x1='589.080' y1='1427.460' x2='639.000' y2='1389.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='1413.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k30&quot;, &quot;_self&quot;)'>30</text>
+  <line
+   x1='539.160' y1='1539.960' x2='589.080' y2='1427.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='539.160' y='1526.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k26&quot;, &quot;_self&quot;)'>26</text>
+  <line
+   x1='489.240' y1='1502.460' x2='539.160' y2='1539.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='1301.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k29&quot;, &quot;_self&quot;)'>29</text>
+  <line
+   x1='539.160' y1='1314.960' x2='589.080' y2='1314.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='539.160' y='1301.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k25&quot;, &quot;_self&quot;)'>25</text>
+  <line
+   x1='489.240' y1='1502.460' x2='539.160' y2='1314.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='1488.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k20&quot;, &quot;_self&quot;)'>20</text>
+  <line
+   x1='439.320' y1='1464.960' x2='489.240' y2='1502.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='1226.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k28&quot;, &quot;_self&quot;)'>28</text>
+  <line
+   x1='539.160' y1='1239.960' x2='589.080' y2='1239.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='539.160' y='1226.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k24&quot;, &quot;_self&quot;)'>24</text>
+  <line
+   x1='489.240' y1='1239.960' x2='539.160' y2='1239.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='1226.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k19&quot;, &quot;_self&quot;)'>19</text>
+  <line
+   x1='439.320' y1='1464.960' x2='489.240' y2='1239.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='1451.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k14&quot;, &quot;_self&quot;)'>14</text>
+  <line
+   x1='389.400' y1='1014.960' x2='439.320' y2='1464.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='539.160' y='1151.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k23&quot;, &quot;_self&quot;)'>23</text>
+  <line
+   x1='489.240' y1='1164.960' x2='539.160' y2='1164.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='1151.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k18&quot;, &quot;_self&quot;)'>18</text>
+  <line
+   x1='439.320' y1='789.960' x2='489.240' y2='1164.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='1076.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k17&quot;, &quot;_self&quot;)'>17</text>
+  <line
+   x1='439.320' y1='789.960' x2='489.240' y2='1089.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='539.160' y='1001.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k22&quot;, &quot;_self&quot;)'>22</text>
+  <line
+   x1='489.240' y1='714.960' x2='539.160' y2='1014.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='938.520' y='926.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k58&quot;, &quot;_self&quot;)'>58</text>
+  <line
+   x1='888.600' y1='939.960' x2='938.520' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='888.600' y='926.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k56&quot;, &quot;_self&quot;)'>56</text>
+  <line
+   x1='838.680' y1='902.460' x2='888.600' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='888.600' y='851.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k55&quot;, &quot;_self&quot;)'>55</text>
+  <line
+   x1='838.680' y1='902.460' x2='888.600' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='838.680' y='888.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k52&quot;, &quot;_self&quot;)'>52</text>
+  <line
+   x1='788.760' y1='789.960' x2='838.680' y2='902.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='838.680' y='776.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k51&quot;, &quot;_self&quot;)'>51</text>
+  <line
+   x1='788.760' y1='789.960' x2='838.680' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='938.520' y='701.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k57&quot;, &quot;_self&quot;)'>57</text>
+  <line
+   x1='888.600' y1='714.960' x2='938.520' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='888.600' y='701.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k54&quot;, &quot;_self&quot;)'>54</text>
+  <line
+   x1='838.680' y1='677.460' x2='888.600' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='888.600' y='626.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k53&quot;, &quot;_self&quot;)'>53</text>
+  <line
+   x1='838.680' y1='677.460' x2='888.600' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='838.680' y='663.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k50&quot;, &quot;_self&quot;)'>50</text>
+  <line
+   x1='788.760' y1='789.960' x2='838.680' y2='677.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='788.760' y='776.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k47&quot;, &quot;_self&quot;)'>47</text>
+  <line
+   x1='738.840' y1='752.460' x2='788.760' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='838.680' y='551.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k49&quot;, &quot;_self&quot;)'>49</text>
+  <line
+   x1='788.760' y1='564.960' x2='838.680' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='788.760' y='551.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k46&quot;, &quot;_self&quot;)'>46</text>
+  <line
+   x1='738.840' y1='752.460' x2='788.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='738.840' y='738.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k44&quot;, &quot;_self&quot;)'>44</text>
+  <line
+   x1='688.920' y1='714.960' x2='738.840' y2='752.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='838.680' y='476.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k48&quot;, &quot;_self&quot;)'>48</text>
+  <line
+   x1='788.760' y1='489.960' x2='838.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='788.760' y='476.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k45&quot;, &quot;_self&quot;)'>45</text>
+  <line
+   x1='738.840' y1='489.960' x2='788.760' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='738.840' y='476.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k43&quot;, &quot;_self&quot;)'>43</text>
+  <line
+   x1='688.920' y1='714.960' x2='738.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='688.920' y='701.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k39&quot;, &quot;_self&quot;)'>39</text>
+  <line
+   x1='639.000' y1='677.460' x2='688.920' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='738.840' y='401.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k42&quot;, &quot;_self&quot;)'>42</text>
+  <line
+   x1='688.920' y1='414.960' x2='738.840' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='688.920' y='401.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k38&quot;, &quot;_self&quot;)'>38</text>
+  <line
+   x1='639.000' y1='677.460' x2='688.920' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='639.000' y='663.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k33&quot;, &quot;_self&quot;)'>33</text>
+  <line
+   x1='589.080' y1='677.460' x2='639.000' y2='677.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='663.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k27&quot;, &quot;_self&quot;)'>27</text>
+  <line
+   x1='539.160' y1='677.460' x2='589.080' y2='677.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='539.160' y='663.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k21&quot;, &quot;_self&quot;)'>21</text>
+  <line
+   x1='489.240' y1='714.960' x2='539.160' y2='677.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='701.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k16&quot;, &quot;_self&quot;)'>16</text>
+  <line
+   x1='439.320' y1='789.960' x2='489.240' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='776.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k13&quot;, &quot;_self&quot;)'>13</text>
+  <line
+   x1='389.400' y1='1014.960' x2='439.320' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='326.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k15&quot;, &quot;_self&quot;)'>15</text>
+  <line
+   x1='439.320' y1='339.960' x2='489.240' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='326.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k12&quot;, &quot;_self&quot;)'>12</text>
+  <line
+   x1='389.400' y1='1014.960' x2='439.320' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='1001.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k11&quot;, &quot;_self&quot;)'>11</text>
+  <line
+   x1='339.480' y1='1014.960' x2='389.400' y2='1014.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='1001.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k10&quot;, &quot;_self&quot;)'>10</text>
+  <line
+   x1='289.560' y1='1014.960' x2='339.480' y2='1014.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='1001.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k9&quot;, &quot;_self&quot;)'>9</text>
+  <line
+   x1='239.640' y1='977.460' x2='289.560' y2='1014.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='251.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  <line
+   x1='239.640' y1='977.460' x2='289.560' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='963.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k7&quot;, &quot;_self&quot;)'>7</text>
+  <line
+   x1='189.720' y1='939.960' x2='239.640' y2='977.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='176.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k6&quot;, &quot;_self&quot;)'>6</text>
+  <line
+   x1='189.720' y1='939.960' x2='239.640' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='926.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  <line
+   x1='139.800' y1='902.460' x2='189.720' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  <line
+   x1='139.800' y1='902.460' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='888.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  <line
+   x1='89.880' y1='864.960' x2='139.800' y2='902.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  <line
+   x1='89.880' y1='864.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='851.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='864.960' x2='89.880' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='851.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol envelope basic
+  (defrole tpm-power-on (vars) (trace (init &quot;0&quot;)))
+  (defrole tpm-quote
+    (vars (nonce pcr mesg) (aik akey))
+    (trace (recv (cat &quot;quote&quot; nonce)) (obsv pcr)
+      (send (enc &quot;quote&quot; pcr nonce aik)))
+    (non-orig aik))
+  (defrole tpm-extend-enc
+    (vars (value state mesg) (esk skey) (tne tno data) (tpmkey akey))
+    (trace (recv (cat &quot;establish transport&quot; tpmkey (enc esk tpmkey)))
+      (send (cat &quot;establish transport&quot; tne))
+      (recv
+        (cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc value esk)) tno
+          &quot;false&quot;
+          (hash esk
+            (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc value esk)))
+            tne tno &quot;false&quot;))) (tran state (hash value state)))
+    (non-orig (invk tpmkey))
+    (uniq-orig tne))
+  (defrole tpm-create-key
+    (vars (k aik akey) (pcr mesg) (esk skey))
+    (trace (recv (enc &quot;create key&quot; pcr esk))
+      (send (enc &quot;created&quot; k pcr aik)))
+    (non-orig (invk k) aik esk)
+    (uniq-orig k))
+  (defrole tpm-decrypt
+    (vars (m pcr mesg) (k aik akey))
+    (trace (recv (cat &quot;decrypt&quot; (enc m k)))
+      (recv (enc &quot;created&quot; k pcr aik)) (obsv pcr) (send m))
+    (non-orig aik))
+  (defrole alice
+    (vars (v n tne tno data) (esk1 esk skey) (k aik tpmkey akey)
+      (pcr mesg))
+    (trace (send (cat &quot;establish transport&quot; tpmkey (enc esk tpmkey)))
+      (recv (cat &quot;establish transport&quot; tne))
+      (send
+        (cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot;
+          (hash esk
+            (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne
+            tno &quot;false&quot;))) (recv pcr)
+      (send (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1))
+      (recv (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik))
+      (send (enc v k)))
+    (non-orig aik esk1 (invk tpmkey))
+    (uniq-orig v n tno esk)
+    (neq (tno n))))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Child: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='604.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 604.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: red;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>envelope 0</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (neq (tno n))
+  (non-orig esk1 aik (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (label 0)
+  (unrealized (0 0) (1 0) (2 5))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Children: <a href="#k2">2</a> <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='679.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 679.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='564.960' x2='139.920' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 192.900 564.960 145.920 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: red;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>envelope 1</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (precedes ((2 6) (0 0)) ((2 6) (1 0)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (label 1)
+  (parent 0)
+  (unrealized (0 0) (2 5))
+  (origs (esk (2 0)) (n (2 2)) (tno (2 2)) (v (2 6)))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='679.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 679.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='564.960' x2='139.920' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 264.960 Q 291.078 374.718 242.316 484.477'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik) nonce aik-0)</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: orange;' cx='339.840' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 192.900 564.960 145.920 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)) (aik aik-0))</title>
+   <text
+    x='339.840' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>envelope 2</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik))
+    (aik aik-0))
+  (precedes ((2 6) (0 0)) ((2 6) (1 0)) ((3 2) (2 5)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik) (2 5))
+  (label 2)
+  (parent 1)
+  (unrealized (0 0) (3 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k3">Item <a href="#t0">3</a>, Parent: <a href="#k1">1</a>, Children: <a href="#k4">4</a> <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='679.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 679.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='564.960' x2='139.920' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 290.808 337.114 241.777 484.268'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0)</title>
+   <circle style='fill: red;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 192.900 564.960 145.920 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: red;' cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk-0) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>envelope 3</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk esk-0 skey)
+    (k aik tpmkey akey))
+  (deflistener (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk-0) (k k) (aik aik))
+  (precedes ((2 6) (0 0)) ((2 6) (1 0)) ((3 1) (2 5)))
+  (neq (tno n))
+  (non-orig esk1 esk-0 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-create-key 2)
+    (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik) (2 5))
+  (label 3)
+  (parent 1)
+  (unrealized (0 0) (1 0) (3 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k4">Item <a href="#t0">4</a>, Parent: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='679.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 679.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='114.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='264.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='564.960' x2='139.920' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 264.960 Q 392.820 264.960 345.840 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0) nonce aik-0)</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0)</title>
+   <circle style='fill: orange;' cx='439.800' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 291.524 412.464 243.207 484.967'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0)</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 192.900 564.960 145.920 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: red;' cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0)) (aik aik-0))</title>
+   <text
+    x='439.800' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk-0) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='239.880' y='39.960' style='text-anchor: middle;'>envelope 4</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk esk-0 skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk-0) (k k) (aik aik))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0))
+    (aik aik-0))
+  (precedes ((2 6) (0 0)) ((2 6) (1 0)) ((3 1) (2 5)) ((4 2) (3 0)))
+  (neq (tno n))
+  (non-orig esk1 esk-0 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0) (3 0))
+  (label 4)
+  (parent 3)
+  (unrealized (0 0) (1 0) (4 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k5">Item <a href="#t0">5</a>, Parent: <a href="#k3">3</a>, Children: <a href="#k6">6</a> <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='679.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 679.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='564.960' x2='139.920' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 192.900 564.960 145.920 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: red;' cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>envelope 5</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (1 0)) ((3 1) (2 5)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (displaced 4 2 alice 5)
+    (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0) (3 0))
+  (label 5)
+  (parent 3)
+  (unrealized (0 0) (1 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k6">Item <a href="#t0">6</a>, Parent: <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='754.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 754.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='489.960' x2='439.800' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='639.960' x2='139.920' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 639.960 Q 292.860 602.460 145.920 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; v nonce aik-0)</title>
+   <circle cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: orange;' cx='439.800' cy='564.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='714.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr v) (aik aik-0))</title>
+   <text
+    x='439.800' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='239.880' y='39.960' style='text-anchor: middle;'>envelope 6</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr v) (aik aik-0))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 1)) ((3 1) (2 5))
+    ((4 2) (1 0)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation nonce-test (added-strand tpm-quote 3) v (1 0) (enc v k))
+  (label 6)
+  (parent 5)
+  (unrealized (0 0) (4 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k7">Item <a href="#t0">7</a>, Parent: <a href="#k5">5</a>, Children: <a href="#k8">8</a> <a href="#k9">9</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>pcr-0</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; k pcr-0 aik-0)</title>
+   <circle style='fill: red;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g><title>((m v) (pcr pcr-0) (k k) (aik aik-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='239.880' y='39.960' style='text-anchor: middle;'>envelope 7</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr pcr-0 mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
+    ((4 3) (1 0)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) v (1 0) (enc v k))
+  (label 7)
+  (parent 5)
+  (unrealized (0 0) (4 1))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k8">Item <a href="#t0">8</a>, Parent: <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='414.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 564.960 Q 492.180 600.660 444.599 636.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; k pcr-0 aik-0) nonce aik-1)</title>
+   <circle cx='539.760' cy='564.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; k pcr-0 aik-0)</title>
+   <circle style='fill: orange;' cx='539.760' cy='489.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>pcr-0</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; k pcr-0 aik-0)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 339.840 489.960 Q 436.800 452.460 533.760 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; k pcr-0 aik-0)) (aik aik-1))</title>
+   <text
+    x='539.760' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g><title>((m v) (pcr pcr-0) (k k) (aik aik-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='289.860' y='39.960' style='text-anchor: middle;'>envelope 8</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr pcr-0 nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 aik-1 akey))
+  (deflistener (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; k pcr-0 aik-0)) (aik aik-1))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
+    ((3 1) (5 1)) ((4 3) (1 0)) ((5 2) (4 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; k pcr-0 aik-0) (4 1))
+  (label 8)
+  (parent 7)
+  (unrealized (0 0) (5 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k9">Item <a href="#t0">9</a>, Parent: <a href="#k7">7</a>, Child: <a href="#k10">10</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n pcr))</title>
+   <circle style='fill: orange;' cx='439.800' cy='714.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n pcr))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='239.880' y='39.960' style='text-anchor: middle;'>envelope 9</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (k k) (aik aik))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
+    ((4 3) (1 0)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (displaced 5 3 tpm-create-key 2)
+    (enc &quot;created&quot; k pcr-0 aik-0) (4 1))
+  (label 9)
+  (parent 7)
+  (unrealized (0 0) (4 2))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k10">Item <a href="#t0">10</a>, Parent: <a href="#k9">9</a>, Child: <a href="#k11">11</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n pcr) (hash &quot;obtain&quot; (hash n pcr)))</title>
+   <circle style='fill: orange;' cx='539.760' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n pcr))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n pcr)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n pcr))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='289.860' y='39.960'
+   style='text-anchor: middle;'>envelope 10</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno tne-0 tno-0 data) (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 akey))
+  (deflistener (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n pcr))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)))
+  (leadsto ((5 3) (4 2)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tno tne-0 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;obtain&quot; (hash n pcr)) (4 2))
+  (label 10)
+  (parent 9)
+  (unrealized (0 0) (5 3))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k11">Item <a href="#t0">11</a>, Parent: <a href="#k10">10</a>, Children: <a href="#k12">12</a> <a href="#k13">13</a> <a href="#k14">14</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='339.840' y='39.960'
+   style='text-anchor: middle;'>envelope 11</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 3) (5 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash n state) (5 3))
+  (label 11)
+  (parent 10)
+  (unrealized (0 0) (6 2))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k12">Item <a href="#t0">12</a>, Parent: <a href="#k11">11</a>, Child: <a href="#k15">15</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='114.960' x2='739.680' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;) nonce aik-0)</title>
+   <circle cx='739.680' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: orange;' cx='739.680' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)) (aik aik-0))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='389.820' y='39.960'
+   style='text-anchor: middle;'>envelope 12</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-1
+        (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1
+        tno-1 &quot;false&quot;)) (aik aik-0))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 3) (5 3))
+    ((7 2) (6 2)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;) (6 2))
+  (label 12)
+  (parent 11)
+  (unrealized (0 0) (6 2) (7 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k13">Item <a href="#t0">13</a>, Parent: <a href="#k11">11</a>, Children: <a href="#k16">16</a> <a href="#k17">17</a> <a href="#k18">18</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: red;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='339.840' y='39.960'
+   style='text-anchor: middle;'>envelope 13</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (displaced 7 2 alice 3)
+    (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;) (6 2))
+  (label 13)
+  (parent 11)
+  (unrealized (0 0) (6 0))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k14">Item <a href="#t0">14</a>, Parent: <a href="#k11">11</a>, Children: <a href="#k19">19</a> <a href="#k20">20</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='189.960' x2='739.680' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: red;' cx='739.680' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 686.700 189.960 733.680 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='389.820' y='39.960'
+   style='text-anchor: middle;'>envelope 14</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat esk-1
+        (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1
+        tno-1 &quot;false&quot;))
+    (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;) (6 2))
+  (label 14)
+  (parent 11)
+  (unrealized (0 0) (6 2) (7 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k15">Item <a href="#t0">15</a>, Parent: <a href="#k12">12</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='879.600pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 879.600 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='264.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='264.960' x2='639.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='264.960' x2='539.760' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (cat (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;) (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: orange;' cx='839.640' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc esk-1 esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc esk-1 esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='839.640' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;) nonce aik-0)</title>
+   <circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: gray;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 736.680 302.460 833.640 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 489.960 Q 490.998 599.718 442.236 709.477'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.991 301.406 634.102 412.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value esk-1) (state (cat (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)) (aik aik-0))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='439.800' y='39.960'
+   style='text-anchor: middle;'>envelope 15</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-1
+        (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1
+        tno-1 &quot;false&quot;)) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value esk-1)
+    (state
+      (cat (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+        tne-1 tno-1 &quot;false&quot;)) (tne tne-2) (tno tno-2) (esk esk-2)
+    (tpmkey tpmkey-2))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (8 3))
+    ((6 3) (5 3)) ((7 2) (6 2)) ((8 3) (7 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;) (7 1))
+  (label 15)
+  (parent 12)
+  (unrealized (0 0) (6 2) (8 3))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k16">Item <a href="#t0">16</a>, Parent: <a href="#k13">13</a>, Children: <a href="#k21">21</a> <a href="#k22">22</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='339.840' y='39.960'
+   style='text-anchor: middle;'>envelope 16</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (contracted (tpmkey-1 tpmkey)) esk (6 0)
+    (enc esk tpmkey))
+  (label 16)
+  (parent 13)
+  (unrealized (0 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k17">Item <a href="#t0">17</a>, Parent: <a href="#k13">13</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='1054.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 1054.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='114.960' x2='739.680' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='264.960' x2='639.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='264.960' x2='539.760' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='714.960' x2='439.800' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='939.960' x2='139.920' y2='1014.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; esk nonce aik-0)</title>
+   <circle cx='739.680' cy='264.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: orange;' cx='739.680' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 442.800 302.460 245.880 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 489.960 Q 490.553 674.561 441.345 859.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 439.800 939.960 Q 292.860 902.460 145.920 939.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='939.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='864.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <path
+   d='M 339.840 639.960 Q 292.860 639.960 245.880 639.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 714.960 Q 142.920 677.460 45.960 714.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 714.960 Q 336.840 677.460 433.800 714.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 286.860 564.960 333.840 564.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 436.800 377.460 633.720 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 486.780 152.460 733.680 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='1014.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='939.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='389.820' y='39.960'
+   style='text-anchor: middle;'>envelope 17</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((2 0) (7 1)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (6 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (6 0)
+    (enc esk tpmkey))
+  (label 17)
+  (parent 13)
+  (unrealized (0 0) (7 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k18">Item <a href="#t0">18</a>, Parent: <a href="#k13">13</a>, Child: <a href="#k23">23</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='1129.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 1129.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='114.960' x2='739.680' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='789.960' x2='439.800' y2='1014.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='639.960' x2='339.840' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='1014.960' x2='139.920' y2='1089.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 339.960 Q 692.700 339.960 645.720 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='739.680' cy='339.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='739.680' cy='264.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: red;' cx='739.680' cy='189.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 442.800 377.460 245.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 490.553 749.561 441.345 934.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 1014.960 Q 292.860 977.460 145.920 1014.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='1014.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='939.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='864.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='789.960' r='6.000'/></g>
+  <path
+   d='M 339.840 714.960 Q 292.860 714.960 245.880 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 239.880 789.960 Q 142.920 752.460 45.960 789.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 789.960 Q 336.840 752.460 433.800 789.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='714.960' r='6.000'/></g>
+  <path
+   d='M 239.880 639.960 Q 286.860 639.960 333.840 639.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='639.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 436.800 452.460 633.720 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 486.780 77.460 733.680 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='1089.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='1014.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='739.680' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='389.820' y='39.960'
+   style='text-anchor: middle;'>envelope 18</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((2 0) (7 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 3) (6 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (6 0)
+    (enc esk tpmkey))
+  (label 18)
+  (parent 13)
+  (unrealized (0 0) (7 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k19">Item <a href="#t0">19</a>, Parent: <a href="#k14">14</a>, Child: <a href="#k24">24</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='879.600pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 879.600 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='264.960' x2='739.680' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 839.640 264.960 Q 792.660 264.960 745.680 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) nonce aik-0)</title>
+   <circle cx='839.640' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: orange;' cx='839.640' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 339.960 Q 692.700 339.960 645.720 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 592.740 414.960 545.760 414.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 264.960 Q 686.700 264.960 733.680 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 490.728 562.114 441.697 709.268'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.851 264.407 633.823 338.854'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))) (aik aik-0))</title>
+   <text
+    x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='439.800' y='39.960'
+   style='text-anchor: middle;'>envelope 19</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+    (aik aik-0))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 2) (7 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) (7 0))
+  (label 19)
+  (parent 14)
+  (unrealized (0 0) (6 2) (8 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k20">Item <a href="#t0">20</a>, Parent: <a href="#k14">14</a>, Children: <a href="#k25">25</a> <a href="#k26">26</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='879.600pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 879.600 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='189.960' x2='739.680' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 839.640 189.960 Q 792.660 189.960 745.680 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='839.640' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: red;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 686.700 189.960 733.680 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='439.800' y='39.960'
+   style='text-anchor: middle;'>envelope 20</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+    (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) (7 0))
+  (label 20)
+  (parent 14)
+  (unrealized (0 0) (6 2) (8 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k21">Item <a href="#t0">21</a>, Parent: <a href="#k16">16</a>, Child: <a href="#k27">27</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: orange;' cx='739.680' cy='639.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='389.820' y='39.960'
+   style='text-anchor: middle;'>envelope 21</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (4 0))
+    ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik) (0 0))
+  (label 21)
+  (parent 16)
+  (unrealized (7 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k22">Item <a href="#t0">22</a>, Parent: <a href="#k16">16</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='489.960' x2='739.680' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='639.960' x2='39.960' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 639.960 Q 392.820 602.460 45.960 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik) nonce aik-0)</title>
+   <circle cx='739.680' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: orange;' cx='739.680' cy='564.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='739.680' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)) (aik aik-0))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='389.820' y='39.960'
+   style='text-anchor: middle;'>envelope 22</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+    (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (4 0))
+    ((2 6) (7 1)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik) (0 0))
+  (label 22)
+  (parent 16)
+  (unrealized (7 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k23">Item <a href="#t0">23</a>, Parent: <a href="#k18">18</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='879.600pt' height='1204.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 879.600 1204.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='189.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='414.960' x2='539.760' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='864.960' x2='439.800' y2='1089.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='714.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='1089.960' x2='139.920' y2='1164.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='864.960' x2='39.960' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 839.640 264.960 Q 792.660 264.960 745.680 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; tpmkey pcr aik-0) nonce aik-1)</title>
+   <circle cx='839.640' cy='264.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: orange;' cx='839.640' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='739.680' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 639.720 639.960 Q 592.740 639.960 545.760 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 442.800 452.460 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 639.960 Q 490.553 824.561 441.345 1009.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 439.800 1089.960 Q 292.860 1052.460 145.920 1089.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='1089.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='1014.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='939.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='864.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 292.860 789.960 245.880 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <path
+   d='M 239.880 864.960 Q 142.920 827.460 45.960 864.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 864.960 Q 336.840 827.460 433.800 864.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='864.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='789.960' r='6.000'/></g>
+  <path
+   d='M 239.880 714.960 Q 286.860 714.960 333.840 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='714.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 436.800 527.460 633.720 564.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 486.780 152.460 733.680 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='1164.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='1089.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='939.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='864.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))</title>
+   <text
+    x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='739.680' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='439.800' y='39.960'
+   style='text-anchor: middle;'>envelope 23</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr nonce mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((2 0) (7 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 3) (6 0)) ((8 2) (7 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; tpmkey pcr aik-0) (7 1))
+  (label 23)
+  (parent 18)
+  (unrealized (0 0) (8 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k24">Item <a href="#t0">24</a>, Parent: <a href="#k19">19</a>, Child: <a href="#k28">28</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='979.560pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 979.560 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='414.960' x2='739.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash &quot;extend&quot; (enc n esk-1)) (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))</title>
+   <circle style='fill: orange;' cx='939.600' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;execute transport&quot; esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;execute transport&quot; esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) nonce aik-0)</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 437.186 338.489 634.491 487.018'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;execute transport&quot;) (state (hash &quot;extend&quot; (enc n esk-1))) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))) (aik aik-0))</title>
+   <text
+    x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='489.780' y='39.960'
+   style='text-anchor: middle;'>envelope 24</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value &quot;execute transport&quot;)
+    (state (hash &quot;extend&quot; (enc n esk-1))) (tne tne-2) (tno tno-2)
+    (esk esk-2) (tpmkey tpmkey-2))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 2) (7 0)) ((9 3) (8 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((9 3) (8 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) (8 1))
+  (label 24)
+  (parent 19)
+  (unrealized (0 0) (6 2) (9 3))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k25">Item <a href="#t0">25</a>, Parent: <a href="#k20">20</a>, Child: <a href="#k29">29</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='979.560pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 979.560 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='339.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='264.960' x2='639.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='264.960' x2='539.760' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 939.600 264.960 Q 892.620 264.960 845.640 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;extend&quot; (enc n esk-1)) nonce aik-0)</title>
+   <circle cx='939.600' cy='264.960' r='6.000'/></g>
+  <g><title>(hash &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: orange;' cx='939.600' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='839.640' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 686.700 339.960 733.680 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 489.960 Q 490.998 599.718 442.236 709.477'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.991 301.406 634.102 412.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;extend&quot; (enc n esk-1))) (aik aik-0))</title>
+   <text
+    x='939.600' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='489.780' y='39.960'
+   style='text-anchor: middle;'>envelope 25</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;extend&quot; (enc n esk-1))) (aik aik-0))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 2) (8 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash &quot;extend&quot; (enc n esk-1)) (8 0))
+  (label 25)
+  (parent 20)
+  (unrealized (0 0) (6 2) (9 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k26">Item <a href="#t0">26</a>, Parent: <a href="#k20">20</a>, Children: <a href="#k30">30</a> <a href="#k31">31</a> <a href="#k32">32</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='979.560pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 979.560 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='939.600' y1='264.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='414.960' x2='739.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='939.600' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: red;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='489.780' y='39.960'
+   style='text-anchor: middle;'>envelope 26</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (precedes ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 1) (8 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener (cat &quot;extend&quot; (enc n esk-1)))
+    (hash &quot;extend&quot; (enc n esk-1)) (8 0))
+  (label 26)
+  (parent 20)
+  (unrealized (0 0) (9 0))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k27">Item <a href="#t0">27</a>, Parent: <a href="#k21">21</a>, Child: <a href="#k33">33</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='879.600pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 879.600 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 839.640 339.960 Q 790.608 487.114 741.577 634.268'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: orange;' cx='839.640' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='439.800' y='39.960'
+   style='text-anchor: middle;'>envelope 27</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (4 0))
+    ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 tne-1 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;refuse&quot; (hash n state)) (7 1))
+  (label 27)
+  (parent 21)
+  (unrealized (8 3))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k28">Item <a href="#t0">28</a>, Parent: <a href="#k24">24</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1079.520pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1079.520 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1039.560' y1='114.960' x2='1039.560' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='414.960' x2='739.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (enc n esk-1) (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: orange;' cx='1039.560' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;extend&quot; esk-3)) tno-3 &quot;false&quot; (hash esk-3 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;extend&quot; esk-3))) tne-3 tno-3 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;establish transport&quot; tne-3)</title>
+   <circle cx='1039.560' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-3 (enc esk-3 tpmkey-3))</title>
+   <circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash &quot;extend&quot; (enc n esk-1)) (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))</title>
+   <circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;execute transport&quot; esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;execute transport&quot; esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) nonce aik-0)</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 636.733 264.680 1033.586 339.400'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;extend&quot;) (state (enc n esk-1)) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;execute transport&quot;) (state (hash &quot;extend&quot; (enc n esk-1))) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))) (aik aik-0))</title>
+   <text
+    x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='539.760' y='39.960'
+   style='text-anchor: middle;'>envelope 28</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
+    (esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 tpmkey-3 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value &quot;execute transport&quot;)
+    (state (hash &quot;extend&quot; (enc n esk-1))) (tne tne-2) (tno tno-2)
+    (esk esk-2) (tpmkey tpmkey-2))
+  (defstrand tpm-extend-enc 4 (value &quot;extend&quot;) (state (enc n esk-1))
+    (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))
+  (precedes ((2 2) (10 3)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 2) (7 0)) ((9 3) (8 1))
+    ((10 3) (9 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((9 3) (8 1)) ((10 3) (9 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 tne-3 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;extend&quot; (enc n esk-1)) (9 3))
+  (label 28)
+  (parent 24)
+  (unrealized (0 0) (6 2) (10 3))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k29">Item <a href="#t0">29</a>, Parent: <a href="#k25">25</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1079.520pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1079.520 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1039.560' y1='114.960' x2='1039.560' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='264.960' x2='939.600' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='414.960' x2='839.640' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='489.960' x2='739.680' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='414.960' x2='539.760' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (enc n esk-1) (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: orange;' cx='1039.560' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;extend&quot; esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;extend&quot; esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='1039.560' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 414.960 Q 892.620 414.960 845.640 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;extend&quot; (enc n esk-1)) nonce aik-0)</title>
+   <circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g><title>(hash &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 839.640 489.960 Q 792.660 489.960 745.680 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='839.640' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 739.680 564.960 Q 692.700 564.960 645.720 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 639.960 Q 592.740 639.960 545.760 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 686.700 489.960 733.680 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 639.960 Q 492.180 675.660 444.599 711.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 636.733 264.680 1033.586 339.400'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;extend&quot;) (state (enc n esk-1)) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;extend&quot; (enc n esk-1))) (aik aik-0))</title>
+   <text
+    x='939.600' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='539.760' y='39.960'
+   style='text-anchor: middle;'>envelope 29</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;extend&quot; (enc n esk-1))) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value &quot;extend&quot;) (state (enc n esk-1))
+    (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (precedes ((2 2) (10 3)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 2) (8 0))
+    ((10 3) (9 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((10 3) (9 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;extend&quot; (enc n esk-1)) (9 1))
+  (label 29)
+  (parent 25)
+  (unrealized (0 0) (6 2) (10 3))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k30">Item <a href="#t0">30</a>, Parent: <a href="#k26">26</a>, Children: <a href="#k34">34</a> <a href="#k35">35</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='979.560pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 979.560 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='939.600' y1='264.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='414.960' x2='739.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='939.600' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: red;' cx='739.680' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-1 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 437.186 188.489 634.491 337.018'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='489.780' y='39.960'
+   style='text-anchor: middle;'>envelope 30</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (precedes ((2 0) (6 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
+    ((9 1) (8 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (contracted (esk-1 esk)) n (9 0) (enc n esk))
+  (label 30)
+  (parent 26)
+  (unrealized (0 0) (6 0) (7 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k31">Item <a href="#t0">31</a>, Parent: <a href="#k26">26</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1079.520pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1079.520 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1039.560' y1='189.960' x2='1039.560' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='339.960' x2='939.600' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='414.960' x2='839.640' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='489.960' x2='739.680' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='414.960' x2='539.760' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; n nonce aik-0)</title>
+   <circle cx='1039.560' cy='339.960' r='6.000'/></g>
+  <g><title>n</title>
+   <circle style='fill: orange;' cx='1039.560' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='189.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 414.960 Q 892.620 414.960 845.640 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 839.640 489.960 Q 792.660 489.960 745.680 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='839.640' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 739.680 564.960 Q 692.700 564.960 645.720 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 639.960 Q 592.740 639.960 545.760 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 686.700 489.960 733.680 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 639.960 Q 492.180 675.660 444.599 711.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 636.720 227.460 1033.560 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr n) (aik aik-0))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='539.760' y='39.960'
+   style='text-anchor: middle;'>envelope 31</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr n) (aik aik-0))
+  (precedes ((2 2) (10 1)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 1) (8 0))
+    ((10 2) (9 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) n (9 0) (enc n esk))
+  (label 31)
+  (parent 26)
+  (unrealized (0 0) (10 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k32">Item <a href="#t0">32</a>, Parent: <a href="#k26">26</a>, Children: <a href="#k36">36</a> <a href="#k37">37</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1079.520pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1079.520 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1039.560' y1='114.960' x2='1039.560' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='264.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='414.960' x2='739.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1039.560 189.960 Q 991.980 225.660 944.399 261.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1039.560' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>esk</title>
+   <circle style='fill: red;' cx='1039.560' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='939.600' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 636.720 77.460 1033.560 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='539.760' y='39.960'
+   style='text-anchor: middle;'>envelope 32</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (deflistener esk)
+  (precedes ((2 0) (10 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 1) (9 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-listener esk) n (9 0) (enc n esk))
+  (label 32)
+  (parent 26)
+  (unrealized (0 0) (10 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k33">Item <a href="#t0">33</a>, Parent: <a href="#k27">27</a>, Children: <a href="#k38">38</a> <a href="#k39">39</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='979.560pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 979.560 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 339.960 Q 790.608 487.114 741.577 634.268'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='489.780' y='39.960'
+   style='text-anchor: middle;'>envelope 33</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 3) (8 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash n state) (8 3))
+  (label 33)
+  (parent 27)
+  (unrealized (9 2))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k34">Item <a href="#t0">34</a>, Parent: <a href="#k30">30</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1079.520pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1079.520 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1039.560' y1='114.960' x2='1039.560' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='264.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='414.960' x2='739.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1039.560 264.960 Q 892.303 301.118 745.046 412.276'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; esk nonce aik-0)</title>
+   <circle cx='1039.560' cy='264.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: orange;' cx='1039.560' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='939.600' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-1 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 437.186 188.489 634.491 337.018'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 636.733 114.680 1033.586 189.400'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='539.760' y='39.960'
+   style='text-anchor: middle;'>envelope 34</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (10 1)) ((2 2) (9 0)) ((2 4) (3 0))
+    ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2))
+    ((8 1) (7 0)) ((9 1) (8 0)) ((10 2) (7 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (7 0)
+    (enc esk tpmkey))
+  (label 34)
+  (parent 30)
+  (unrealized (0 0) (6 0) (10 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k35">Item <a href="#t0">35</a>, Parent: <a href="#k30">30</a>, Child: <a href="#k40">40</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1079.520pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1079.520 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1039.560' y1='114.960' x2='1039.560' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='264.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='414.960' x2='739.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1039.560 339.960 Q 892.530 339.232 745.501 413.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1039.560' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='1039.560' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: red;' cx='1039.560' cy='189.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='939.600' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-1 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 437.186 188.489 634.491 337.018'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 636.720 77.460 1033.560 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='539.760' y='39.960'
+   style='text-anchor: middle;'>envelope 35</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (10 0)) ((2 2) (9 0)) ((2 4) (3 0))
+    ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2))
+    ((8 1) (7 0)) ((9 1) (8 0)) ((10 3) (7 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (7 0)
+    (enc esk tpmkey))
+  (label 35)
+  (parent 30)
+  (unrealized (0 0) (6 0) (10 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k36">Item <a href="#t0">36</a>, Parent: <a href="#k32">32</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1179.480pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1179.480 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1139.520' y1='114.960' x2='1139.520' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='264.960' x2='1039.560' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='339.960' x2='939.600' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='414.960' x2='839.640' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='489.960' x2='739.680' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='414.960' x2='539.760' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1139.520 264.960 Q 1092.540 264.960 1045.560 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; esk nonce aik-0)</title>
+   <circle cx='1139.520' cy='264.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: orange;' cx='1139.520' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1039.560' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>esk</title>
+   <circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 414.960 Q 892.620 414.960 845.640 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 839.640 489.960 Q 792.660 489.960 745.680 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='839.640' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 739.680 564.960 Q 692.700 564.960 645.720 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 639.960 Q 592.740 639.960 545.760 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 686.700 489.960 733.680 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 639.960 Q 492.180 675.660 444.599 711.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 586.757 264.640 933.634 339.321'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 686.710 114.711 1133.541 189.462'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
+   <text
+    x='1139.520' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='589.740' y='39.960'
+   style='text-anchor: middle;'>envelope 36</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((2 0) (11 1)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 1) (9 0)) ((11 2) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (10 0)
+    (enc esk tpmkey))
+  (label 36)
+  (parent 32)
+  (unrealized (0 0) (11 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k37">Item <a href="#t0">37</a>, Parent: <a href="#k32">32</a>, Child: <a href="#k41">41</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1179.480pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1179.480 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1139.520' y1='114.960' x2='1139.520' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='339.960' x2='1039.560' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='414.960' x2='939.600' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='489.960' x2='839.640' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='489.960' x2='639.720' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='489.960' x2='539.760' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1139.520 339.960 Q 1092.540 339.960 1045.560 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1139.520' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='1139.520' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: red;' cx='1139.520' cy='189.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 414.960 Q 992.580 414.960 945.600 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1039.560' cy='414.960' r='6.000'/>
+   </g>
+  <g><title>esk</title>
+   <circle style='fill: blue;' cx='1039.560' cy='339.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 489.960 Q 892.620 489.960 845.640 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='939.600' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: blue;' cx='939.600' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 839.640 564.960 Q 792.660 564.960 745.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='839.640' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 739.680 639.960 Q 692.700 639.960 645.720 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 714.960 Q 592.740 714.960 545.760 714.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 686.700 564.960 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 714.960 Q 492.780 714.960 445.800 714.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 586.807 301.831 933.733 413.702'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 686.700 77.460 1133.520 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='1139.520' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='589.740' y='39.960'
+   style='text-anchor: middle;'>envelope 37</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((2 0) (11 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 1) (9 0)) ((11 3) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (10 0)
+    (enc esk tpmkey))
+  (label 37)
+  (parent 32)
+  (unrealized (0 0) (11 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k38">Item <a href="#t0">38</a>, Parent: <a href="#k33">33</a>, Child: <a href="#k42">42</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1079.520pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1079.520 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1039.560' y1='114.960' x2='1039.560' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1039.560 264.960 Q 992.580 264.960 945.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;) nonce aik-0)</title>
+   <circle cx='1039.560' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: orange;' cx='1039.560' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 339.960 Q 790.608 487.114 741.577 634.268'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)) (aik aik-0))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='539.760' y='39.960'
+   style='text-anchor: middle;'>envelope 38</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-2
+        (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2
+        tno-2 &quot;false&quot;)) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 3) (8 3)) ((10 2) (9 2)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;) (9 2))
+  (label 38)
+  (parent 33)
+  (unrealized (9 2) (10 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k39">Item <a href="#t0">39</a>, Parent: <a href="#k33">33</a>, Children: <a href="#k43">43</a> <a href="#k44">44</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1079.520pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1079.520 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1039.560' y1='189.960' x2='1039.560' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1039.560 264.960 Q 992.580 264.960 945.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: red;' cx='1039.560' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 939.600 189.960 Q 986.580 189.960 1033.560 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 339.960 Q 790.608 487.114 741.577 634.268'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='539.760' y='39.960'
+   style='text-anchor: middle;'>envelope 39</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat esk-2
+        (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2
+        tno-2 &quot;false&quot;))
+    (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;) (9 2))
+  (label 39)
+  (parent 33)
+  (unrealized (9 2) (10 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k40">Item <a href="#t0">40</a>, Parent: <a href="#k35">35</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1179.480pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1179.480 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1139.520' y1='114.960' x2='1139.520' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='189.960' x2='1039.560' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='264.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='414.960' x2='739.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1139.520 264.960 Q 1092.540 264.960 1045.560 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; tpmkey pcr aik-0) nonce aik-1)</title>
+   <circle cx='1139.520' cy='264.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: orange;' cx='1139.520' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 414.960 Q 892.620 377.460 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1039.560' cy='414.960' r='6.000'/>
+   </g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='1039.560' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='1039.560' cy='189.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='939.600' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-1 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 686.700 414.960 733.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 491.444 637.464 443.127 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 437.186 188.489 634.491 337.018'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 636.733 114.680 1033.586 189.400'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))</title>
+   <text
+    x='1139.520' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='589.740' y='39.960'
+   style='text-anchor: middle;'>envelope 40</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 data) (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((2 0) (6 0)) ((2 0) (10 0)) ((2 2) (9 0)) ((2 4) (3 0))
+    ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2))
+    ((8 1) (7 0)) ((9 1) (8 0)) ((10 3) (7 0)) ((11 2) (10 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; tpmkey pcr aik-0) (10 1))
+  (label 40)
+  (parent 35)
+  (unrealized (0 0) (6 0) (11 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k41">Item <a href="#t0">41</a>, Parent: <a href="#k37">37</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1279.440pt' height='979.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1279.440 979.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1239.480' y1='114.960' x2='1239.480' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='189.960' x2='1139.520' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='489.960' x2='939.600' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='564.960' x2='839.640' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='639.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='564.960' x2='639.720' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='564.960' x2='539.760' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='639.960' x2='439.800' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='864.960' x2='139.920' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1239.480 264.960 Q 1192.500 264.960 1145.520 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; tpmkey pcr aik-0) nonce aik-1)</title>
+   <circle cx='1239.480' cy='264.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: orange;' cx='1239.480' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1239.480' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1139.520' cy='414.960' r='6.000'/>
+   </g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='1139.520' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: blue;' cx='1139.520' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='189.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1039.560' cy='489.960' r='6.000'/>
+   </g>
+  <g><title>esk</title>
+   <circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='939.600' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 839.640 639.960 Q 792.660 639.960 745.680 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='839.640' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 692.700 714.960 645.720 714.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 639.720 789.960 Q 592.740 789.960 545.760 789.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='714.960' r='6.000'/></g>
+  <path
+   d='M 639.720 639.960 Q 686.700 639.960 733.680 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='639.720' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 539.760 789.960 Q 492.780 789.960 445.800 789.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='714.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 439.800 864.960 Q 292.860 827.460 145.920 864.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='864.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 142.920 527.460 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 337.031 563.906 434.182 637.853'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 586.884 339.042 933.888 488.123'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 686.710 114.711 1133.541 189.462'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='939.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='864.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))</title>
+   <text
+    x='1239.480' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='1139.520' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='639.720' y='39.960'
+   style='text-anchor: middle;'>envelope 41</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((2 0) (11 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 1) (9 0)) ((11 3) (10 0)) ((12 2) (11 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; tpmkey pcr aik-0) (11 1))
+  (label 41)
+  (parent 37)
+  (unrealized (0 0) (12 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k42">Item <a href="#t0">42</a>, Parent: <a href="#k38">38</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1179.480pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1179.480 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1139.520' y1='114.960' x2='1139.520' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='264.960' x2='1039.560' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='264.960' x2='939.600' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1139.520 339.960 Q 1092.540 339.960 1045.560 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (cat (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;) (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: orange;' cx='1139.520' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc esk-2 esk-3)) tno-3 &quot;false&quot; (hash esk-3 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc esk-2 esk-3))) tne-3 tno-3 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;establish transport&quot; tne-3)</title>
+   <circle cx='1139.520' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-3 (enc esk-3 tpmkey-3))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 414.960 Q 992.580 414.960 945.600 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;) nonce aik-0)</title>
+   <circle cx='1039.560' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: gray;' cx='1039.560' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 489.960 Q 892.620 489.960 845.640 489.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='939.600' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 939.600 339.960 Q 1036.560 302.460 1133.520 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 839.640 489.960 Q 791.324 562.464 743.007 634.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 586.807 301.831 933.733 413.702'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((value esk-2) (state (cat (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
+   <text
+    x='1139.520' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)) (aik aik-0))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='589.740' y='39.960'
+   style='text-anchor: middle;'>envelope 42</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
+    (esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-2
+        (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2
+        tno-2 &quot;false&quot;)) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value esk-2)
+    (state
+      (cat (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+        tne-2 tno-2 &quot;false&quot;)) (tne tne-3) (tno tno-3) (esk esk-3)
+    (tpmkey tpmkey-3))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (11 3)) ((9 3) (8 3)) ((10 2) (9 2))
+    ((11 3) (10 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
+    ((11 3) (10 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;) (10 1))
+  (label 42)
+  (parent 38)
+  (unrealized (9 2) (11 3))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k43">Item <a href="#t0">43</a>, Parent: <a href="#k39">39</a>, Child: <a href="#k45">45</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1179.480pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1179.480 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1139.520' y1='114.960' x2='1139.520' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='264.960' x2='1039.560' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='189.960' x2='939.600' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='189.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1139.520 264.960 Q 1092.540 264.960 1045.560 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) nonce aik-0)</title>
+   <circle cx='1139.520' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: orange;' cx='1139.520' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 414.960 Q 892.620 414.960 845.640 414.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 939.600 264.960 Q 986.580 264.960 1033.560 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 790.878 524.718 742.116 634.477'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 586.757 264.640 933.634 339.321'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))) (aik aik-0))</title>
+   <text
+    x='1139.520' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='589.740' y='39.960'
+   style='text-anchor: middle;'>envelope 43</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+    (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 2) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) (10 0))
+  (label 43)
+  (parent 39)
+  (unrealized (9 2) (11 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k44">Item <a href="#t0">44</a>, Parent: <a href="#k39">39</a>, Children: <a href="#k46">46</a> <a href="#k47">47</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1179.480pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1179.480 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1139.520' y1='114.960' x2='1139.520' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='189.960' x2='1039.560' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1139.520 189.960 Q 1092.540 189.960 1045.560 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle cx='1139.520' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: red;' cx='1139.520' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 1039.560 264.960 Q 992.580 264.960 945.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='189.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 939.600 189.960 Q 986.580 189.960 1033.560 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 339.960 Q 790.608 487.114 741.577 634.268'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 586.740 227.460 933.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='589.740' y='39.960'
+   style='text-anchor: middle;'>envelope 44</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 1) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+    (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) (10 0))
+  (label 44)
+  (parent 39)
+  (unrealized (9 2) (11 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k45">Item <a href="#t0">45</a>, Parent: <a href="#k43">43</a>, Child: <a href="#k48">48</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1279.440pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1279.440 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1239.480' y1='114.960' x2='1239.480' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='264.960' x2='1139.520' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='339.960' x2='939.600' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash &quot;extend&quot; (enc n esk-2)) (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))</title>
+   <circle style='fill: orange;' cx='1239.480' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;execute transport&quot; esk-3)) tno-3 &quot;false&quot; (hash esk-3 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;execute transport&quot; esk-3))) tne-3 tno-3 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;establish transport&quot; tne-3)</title>
+   <circle cx='1239.480' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-3 (enc esk-3 tpmkey-3))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) nonce aik-0)</title>
+   <circle cx='1139.520' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: gray;' cx='1139.520' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1139.520' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 586.884 339.042 933.888 488.123'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;execute transport&quot;) (state (hash &quot;extend&quot; (enc n esk-2))) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
+   <text
+    x='1239.480' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))) (aik aik-0))</title>
+   <text
+    x='1139.520' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='639.720' y='39.960'
+   style='text-anchor: middle;'>envelope 45</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
+    (esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value &quot;execute transport&quot;)
+    (state (hash &quot;extend&quot; (enc n esk-2))) (tne tne-3) (tno tno-3)
+    (esk esk-3) (tpmkey tpmkey-3))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 2) (10 0)) ((12 3) (11 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
+    ((12 3) (11 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) (11 1))
+  (label 45)
+  (parent 43)
+  (unrealized (9 2) (12 3))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k46">Item <a href="#t0">46</a>, Parent: <a href="#k44">44</a>, Child: <a href="#k49">49</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1279.440pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1279.440 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1239.480' y1='114.960' x2='1239.480' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='264.960' x2='1139.520' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='339.960' x2='1039.560' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='264.960' x2='939.600' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1239.480 264.960 Q 1192.500 264.960 1145.520 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;extend&quot; (enc n esk-2)) nonce aik-0)</title>
+   <circle cx='1239.480' cy='264.960' r='6.000'/></g>
+  <g><title>(hash &quot;extend&quot; (enc n esk-2))</title>
+   <circle style='fill: orange;' cx='1239.480' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1239.480' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 339.960 Q 1092.540 339.960 1045.560 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle cx='1139.520' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 414.960 Q 992.580 414.960 945.600 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='339.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 489.960 Q 892.620 489.960 845.640 489.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='939.600' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 939.600 339.960 Q 986.580 339.960 1033.560 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 839.640 489.960 Q 791.324 562.464 743.007 634.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 586.807 301.831 933.733 413.702'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;extend&quot; (enc n esk-2))) (aik aik-0))</title>
+   <text
+    x='1239.480' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='639.720' y='39.960'
+   style='text-anchor: middle;'>envelope 46</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;extend&quot; (enc n esk-2))) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 1) (10 0)) ((12 2) (11 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash &quot;extend&quot; (enc n esk-2)) (11 0))
+  (label 46)
+  (parent 44)
+  (unrealized (9 2) (12 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k47">Item <a href="#t0">47</a>, Parent: <a href="#k44">44</a>, Children: <a href="#k50">50</a> <a href="#k51">51</a> <a href="#k52">52</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1279.440pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1279.440 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='339.960' x2='939.600' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle cx='1239.480' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle style='fill: red;' cx='1239.480' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle cx='1139.520' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='639.720' y='39.960'
+   style='text-anchor: middle;'>envelope 47</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-2)))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (12 0)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 1) (10 0)) ((12 1) (11 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test
+    (added-listener (cat &quot;extend&quot; (enc n esk-2)))
+    (hash &quot;extend&quot; (enc n esk-2)) (11 0))
+  (label 47)
+  (parent 44)
+  (unrealized (12 0))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k48">Item <a href="#t0">48</a>, Parent: <a href="#k45">45</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1379.400pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1379.400 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1339.440' y1='114.960' x2='1339.440' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1239.480' y1='114.960' x2='1239.480' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='264.960' x2='1139.520' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='339.960' x2='939.600' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1339.440 339.960 Q 1292.460 339.960 1245.480 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (enc n esk-2) (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: orange;' cx='1339.440' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;extend&quot; esk-4)) tno-4 &quot;false&quot; (hash esk-4 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;extend&quot; esk-4))) tne-4 tno-4 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='1339.440' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;establish transport&quot; tne-4)</title>
+   <circle cx='1339.440' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-4 (enc esk-4 tpmkey-4))</title>
+   <circle style='fill: blue;' cx='1339.440' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash &quot;extend&quot; (enc n esk-2)) (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))</title>
+   <circle style='fill: gray;' cx='1239.480' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;execute transport&quot; esk-3)) tno-3 &quot;false&quot; (hash esk-3 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;execute transport&quot; esk-3))) tne-3 tno-3 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;establish transport&quot; tne-3)</title>
+   <circle cx='1239.480' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-3 (enc esk-3 tpmkey-3))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) nonce aik-0)</title>
+   <circle cx='1139.520' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: gray;' cx='1139.520' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1139.520' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 786.667 264.756 1333.454 339.552'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;extend&quot;) (state (enc n esk-2)) (tne tne-4) (tno tno-4) (esk esk-4) (tpmkey tpmkey-4))</title>
+   <text
+    x='1339.440' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;execute transport&quot;) (state (hash &quot;extend&quot; (enc n esk-2))) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
+   <text
+    x='1239.480' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))) (aik aik-0))</title>
+   <text
+    x='1139.520' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='689.700' y='39.960'
+   style='text-anchor: middle;'>envelope 48</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 tne-4
+      tno-4 data) (esk1 esk esk-0 esk-1 esk-2 esk-3 esk-4 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 tpmkey-4
+      akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value &quot;execute transport&quot;)
+    (state (hash &quot;extend&quot; (enc n esk-2))) (tne tne-3) (tno tno-3)
+    (esk esk-3) (tpmkey tpmkey-3))
+  (defstrand tpm-extend-enc 4 (value &quot;extend&quot;) (state (enc n esk-2))
+    (tne tne-4) (tno tno-4) (esk esk-4) (tpmkey tpmkey-4))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (13 3)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 2) (10 0)) ((12 3) (11 1)) ((13 3) (12 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
+    ((12 3) (11 1)) ((13 3) (12 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3) (invk tpmkey-4))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 tne-4 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;extend&quot; (enc n esk-2)) (12 3))
+  (label 48)
+  (parent 45)
+  (unrealized (9 2) (13 3))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k49">Item <a href="#t0">49</a>, Parent: <a href="#k46">46</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1379.400pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1379.400 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1339.440' y1='114.960' x2='1339.440' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1239.480' y1='264.960' x2='1239.480' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='414.960' x2='1139.520' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='489.960' x2='1039.560' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='414.960' x2='939.600' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='414.960' x2='839.640' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1339.440 339.960 Q 1292.460 339.960 1245.480 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (enc n esk-2) (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: orange;' cx='1339.440' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;extend&quot; esk-3)) tno-3 &quot;false&quot; (hash esk-3 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;extend&quot; esk-3))) tne-3 tno-3 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='1339.440' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;establish transport&quot; tne-3)</title>
+   <circle cx='1339.440' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-3 (enc esk-3 tpmkey-3))</title>
+   <circle style='fill: blue;' cx='1339.440' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1239.480 414.960 Q 1192.500 414.960 1145.520 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;extend&quot; (enc n esk-2)) nonce aik-0)</title>
+   <circle cx='1239.480' cy='414.960' r='6.000'/></g>
+  <g><title>(hash &quot;extend&quot; (enc n esk-2))</title>
+   <circle style='fill: gray;' cx='1239.480' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 489.960 Q 1092.540 489.960 1045.560 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle cx='1139.520' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 564.960 Q 992.580 564.960 945.600 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='489.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 639.960 Q 892.620 639.960 845.640 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 939.600 489.960 Q 986.580 489.960 1033.560 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 839.640 639.960 Q 792.660 639.960 745.680 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 786.667 264.756 1333.454 339.552'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;extend&quot;) (state (enc n esk-2)) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
+   <text
+    x='1339.440' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;extend&quot; (enc n esk-2))) (aik aik-0))</title>
+   <text
+    x='1239.480' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='689.700' y='39.960'
+   style='text-anchor: middle;'>envelope 49</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
+    (esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;extend&quot; (enc n esk-2))) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value &quot;extend&quot;) (state (enc n esk-2))
+    (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (13 3)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 1) (10 0)) ((12 2) (11 0)) ((13 3) (12 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
+    ((13 3) (12 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;extend&quot; (enc n esk-2)) (12 1))
+  (label 49)
+  (parent 46)
+  (unrealized (9 2) (13 3))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k50">Item <a href="#t0">50</a>, Parent: <a href="#k47">47</a>, Children: <a href="#k53">53</a> <a href="#k54">54</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1279.440pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1279.440 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='339.960' x2='939.600' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='1239.480' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='1139.520' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: red;' cx='1039.560' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-2 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk tpmkey-2))</title>
+   <circle style='fill: red;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 586.884 189.042 933.888 338.123'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='639.720' y='39.960'
+   style='text-anchor: middle;'>envelope 50</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 2) (6 2)) ((2 2) (12 0))
+    ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
+    ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
+    ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (contracted (esk-2 esk)) n (12 0) (enc n esk))
+  (label 50)
+  (parent 47)
+  (unrealized (9 0) (10 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k51">Item <a href="#t0">51</a>, Parent: <a href="#k47">47</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1379.400pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1379.400 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1339.440' y1='189.960' x2='1339.440' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1239.480' y1='339.960' x2='1239.480' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='414.960' x2='1139.520' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='489.960' x2='1039.560' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='414.960' x2='939.600' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='414.960' x2='839.640' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1339.440 339.960 Q 1292.460 339.960 1245.480 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; n nonce aik-0)</title>
+   <circle cx='1339.440' cy='339.960' r='6.000'/></g>
+  <g><title>n</title>
+   <circle style='fill: orange;' cx='1339.440' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1339.440' cy='189.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1239.480 414.960 Q 1192.500 414.960 1145.520 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle cx='1239.480' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='339.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 489.960 Q 1092.540 489.960 1045.560 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle cx='1139.520' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 564.960 Q 992.580 564.960 945.600 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='489.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 639.960 Q 892.620 639.960 845.640 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 939.600 489.960 Q 986.580 489.960 1033.560 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 839.640 639.960 Q 792.660 639.960 745.680 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 786.660 227.460 1333.440 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr n) (aik aik-0))</title>
+   <text
+    x='1339.440' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='689.700' y='39.960'
+   style='text-anchor: middle;'>envelope 51</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-2)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr n) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (13 1)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 1) (10 0)) ((12 1) (11 0)) ((13 2) (12 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) n (12 0) (enc n esk))
+  (label 51)
+  (parent 47)
+  (unrealized (13 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k52">Item <a href="#t0">52</a>, Parent: <a href="#k47">47</a>, Children: <a href="#k55">55</a> <a href="#k56">56</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1379.400pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1379.400 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1339.440' y1='114.960' x2='1339.440' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='339.960' x2='939.600' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1339.440 189.960 Q 1291.860 225.660 1244.279 261.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1339.440' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>esk</title>
+   <circle style='fill: red;' cx='1339.440' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle cx='1239.480' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle cx='1139.520' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 786.660 77.460 1333.440 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='689.700' y='39.960'
+   style='text-anchor: middle;'>envelope 52</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-2)))
+  (deflistener esk)
+  (precedes ((2 0) (6 0)) ((2 0) (13 0)) ((2 2) (6 2)) ((2 2) (12 0))
+    ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
+    ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
+    ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-listener esk) n (12 0) (enc n esk))
+  (label 52)
+  (parent 47)
+  (unrealized (13 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k53">Item <a href="#t0">53</a>, Parent: <a href="#k50">50</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1379.400pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1379.400 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1339.440' y1='114.960' x2='1339.440' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='339.960' x2='939.600' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1339.440 264.960 Q 1192.183 301.118 1044.926 412.276'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; esk nonce aik-0)</title>
+   <circle cx='1339.440' cy='264.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: orange;' cx='1339.440' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1339.440' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='1239.480' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='1139.520' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-2 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk tpmkey-2))</title>
+   <circle style='fill: red;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 586.884 189.042 933.888 338.123'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 786.667 114.756 1333.454 189.552'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
+   <text
+    x='1339.440' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='689.700' y='39.960'
+   style='text-anchor: middle;'>envelope 53</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 0) (13 1)) ((2 2) (6 2))
+    ((2 2) (12 0)) ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1))
+    ((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0))
+    ((9 3) (8 3)) ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0))
+    ((13 2) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (10 0)
+    (enc esk tpmkey))
+  (label 53)
+  (parent 50)
+  (unrealized (9 0) (13 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k54">Item <a href="#t0">54</a>, Parent: <a href="#k50">50</a>, Child: <a href="#k57">57</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1379.400pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1379.400 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1339.440' y1='114.960' x2='1339.440' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='339.960' x2='939.600' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1339.440 339.960 Q 1192.410 339.232 1045.381 413.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1339.440' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='1339.440' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: red;' cx='1339.440' cy='189.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='1339.440' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='1239.480' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='1139.520' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-2 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk tpmkey-2))</title>
+   <circle style='fill: red;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 586.884 189.042 933.888 338.123'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 786.660 77.460 1333.440 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='1339.440' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='689.700' y='39.960'
+   style='text-anchor: middle;'>envelope 54</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 0) (13 0)) ((2 2) (6 2))
+    ((2 2) (12 0)) ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1))
+    ((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0))
+    ((9 3) (8 3)) ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0))
+    ((13 3) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (10 0)
+    (enc esk tpmkey))
+  (label 54)
+  (parent 50)
+  (unrealized (9 0) (13 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k55">Item <a href="#t0">55</a>, Parent: <a href="#k52">52</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1479.360pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1479.360 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1439.400' y1='114.960' x2='1439.400' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1339.440' y1='264.960' x2='1339.440' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1239.480' y1='339.960' x2='1239.480' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='414.960' x2='1139.520' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='489.960' x2='1039.560' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='414.960' x2='939.600' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='414.960' x2='839.640' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1439.400 264.960 Q 1392.420 264.960 1345.440 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; esk nonce aik-0)</title>
+   <circle cx='1439.400' cy='264.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: orange;' cx='1439.400' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1439.400' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1339.440 339.960 Q 1292.460 339.960 1245.480 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1339.440' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>esk</title>
+   <circle style='fill: blue;' cx='1339.440' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1239.480 414.960 Q 1192.500 414.960 1145.520 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle cx='1239.480' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='339.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 489.960 Q 1092.540 489.960 1045.560 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle cx='1139.520' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 564.960 Q 992.580 564.960 945.600 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='489.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 639.960 Q 892.620 639.960 845.640 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 939.600 489.960 Q 986.580 489.960 1033.560 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 839.640 639.960 Q 792.660 639.960 745.680 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 736.688 264.736 1233.497 339.511'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 836.646 114.773 1433.412 189.586'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
+   <text
+    x='1439.400' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='739.680' y='39.960'
+   style='text-anchor: middle;'>envelope 55</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-2)))
+  (deflistener esk)
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (14 1)) ((2 2) (6 2)) ((2 2) (12 0))
+    ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
+    ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
+    ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0))
+    ((14 2) (13 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (13 0)
+    (enc esk tpmkey))
+  (label 55)
+  (parent 52)
+  (unrealized (14 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k56">Item <a href="#t0">56</a>, Parent: <a href="#k52">52</a>, Child: <a href="#k58">58</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1479.360pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1479.360 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1439.400' y1='114.960' x2='1439.400' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1339.440' y1='339.960' x2='1339.440' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1239.480' y1='414.960' x2='1239.480' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='489.960' x2='1139.520' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='564.960' x2='1039.560' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='489.960' x2='939.600' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='489.960' x2='839.640' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='639.960' x2='739.680' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1439.400 339.960 Q 1392.420 339.960 1345.440 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1439.400' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='1439.400' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: red;' cx='1439.400' cy='189.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='1439.400' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1339.440 414.960 Q 1292.460 414.960 1245.480 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1339.440' cy='414.960' r='6.000'/>
+   </g>
+  <g><title>esk</title>
+   <circle style='fill: blue;' cx='1339.440' cy='339.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1239.480 489.960 Q 1192.500 489.960 1145.520 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle cx='1239.480' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 564.960 Q 1092.540 564.960 1045.560 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle cx='1139.520' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='489.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 639.960 Q 992.580 639.960 945.600 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='564.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 714.960 Q 892.620 714.960 845.640 714.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 939.600 564.960 Q 986.580 564.960 1033.560 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 839.640 714.960 Q 792.660 714.960 745.680 714.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 739.680 789.960 Q 392.820 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.813 564.515 733.746 639.070'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 736.713 302.015 1233.546 414.070'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 836.640 77.460 1433.400 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='1439.400' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='739.680' y='39.960'
+   style='text-anchor: middle;'>envelope 56</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-2)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (14 0)) ((2 2) (6 2)) ((2 2) (12 0))
+    ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
+    ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
+    ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0))
+    ((14 3) (13 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (13 0)
+    (enc esk tpmkey))
+  (label 56)
+  (parent 52)
+  (unrealized (14 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k57">Item <a href="#t0">57</a>, Parent: <a href="#k54">54</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1479.360pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1479.360 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1439.400' y1='114.960' x2='1439.400' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1339.440' y1='189.960' x2='1339.440' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1239.480' y1='264.960' x2='1239.480' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='339.960' x2='1139.520' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='414.960' x2='1039.560' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='339.960' x2='939.600' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='714.960' x2='39.960' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1439.400 264.960 Q 1392.420 264.960 1345.440 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; tpmkey pcr aik-0) nonce aik-1)</title>
+   <circle cx='1439.400' cy='264.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: orange;' cx='1439.400' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1439.400' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1339.440 414.960 Q 1192.500 377.460 1045.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1339.440' cy='414.960' r='6.000'/>
+   </g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='1339.440' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: blue;' cx='1339.440' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='1339.440' cy='189.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1239.480 339.960 Q 1192.500 339.960 1145.520 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='1239.480' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='264.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 414.960 Q 1092.540 414.960 1045.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='1139.520' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='339.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 489.960 Q 992.580 489.960 945.600 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 564.960 Q 892.620 564.960 845.640 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-2 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 939.600 414.960 Q 986.580 414.960 1033.560 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk tpmkey-2))</title>
+   <circle style='fill: red;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 839.640 564.960 Q 792.060 600.660 744.479 636.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 714.960 Q 392.820 677.460 45.960 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='714.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.780 527.460 733.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 736.680 227.460 1233.480 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 586.884 189.042 933.888 338.123'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 786.667 114.756 1333.454 189.552'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))</title>
+   <text
+    x='1439.400' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='1339.440' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='739.680' y='39.960'
+   style='text-anchor: middle;'>envelope 57</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 aik-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 0) (13 0)) ((2 2) (6 2))
+    ((2 2) (12 0)) ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1))
+    ((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0))
+    ((9 3) (8 3)) ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0))
+    ((13 3) (10 0)) ((14 2) (13 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; tpmkey pcr aik-0) (13 1))
+  (label 57)
+  (parent 54)
+  (unrealized (9 0) (14 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k58">Item <a href="#t0">58</a>, Parent: <a href="#k56">56</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1579.320pt' height='979.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1579.320 979.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1539.360' y1='114.960' x2='1539.360' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1439.400' y1='189.960' x2='1439.400' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1339.440' y1='414.960' x2='1339.440' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1239.480' y1='489.960' x2='1239.480' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1139.520' y1='564.960' x2='1139.520' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='639.960' x2='1039.560' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='564.960' x2='939.600' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='564.960' x2='839.640' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='714.960' x2='739.680' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='414.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='789.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='864.960' x2='39.960' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1539.360 264.960 Q 1492.380 264.960 1445.400 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; tpmkey pcr aik-0) nonce aik-1)</title>
+   <circle cx='1539.360' cy='264.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: orange;' cx='1539.360' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1539.360' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1439.400 414.960 Q 1392.420 414.960 1345.440 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1439.400' cy='414.960' r='6.000'/>
+   </g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='1439.400' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: blue;' cx='1439.400' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='1439.400' cy='189.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1339.440 489.960 Q 1292.460 489.960 1245.480 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1339.440' cy='489.960' r='6.000'/>
+   </g>
+  <g><title>esk</title>
+   <circle style='fill: blue;' cx='1339.440' cy='414.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1239.480 564.960 Q 1192.500 564.960 1145.520 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle cx='1239.480' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-2))</title>
+   <circle style='fill: blue;' cx='1239.480' cy='489.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1139.520 639.960 Q 1092.540 639.960 1045.560 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle cx='1139.520' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))</title>
+   <circle style='fill: blue;' cx='1139.520' cy='564.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 714.960 Q 992.580 714.960 945.600 714.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle cx='1039.560' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='639.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 789.960 Q 892.620 789.960 845.640 789.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='939.600' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='714.960' r='6.000'/></g>
+  <path
+   d='M 939.600 639.960 Q 986.580 639.960 1033.560 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 839.640 789.960 Q 792.660 789.960 745.680 789.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;refuse&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='839.640' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;refuse&quot; esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;refuse&quot; esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='714.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='839.640' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 739.680 864.960 Q 392.820 827.460 45.960 864.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='739.680' cy='864.960' r='6.000'/></g>
+  <g><title>(hash &quot;refuse&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='739.680' cy='789.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='739.680' cy='714.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 189.960 Q 442.800 152.460 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='639.720' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 490.553 524.561 441.345 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 292.860 752.460 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='439.800' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 292.860 489.960 245.880 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 564.960 Q 336.840 527.460 433.800 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 564.960 Q 486.907 601.598 733.933 713.235'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='239.880' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='239.880' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 286.860 414.960 333.840 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 436.800 227.460 633.720 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 736.753 339.301 1233.626 488.642'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 436.800 77.460 633.720 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 836.646 114.773 1433.412 189.586'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle cx='39.960' cy='939.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik)</title>
+   <circle style='fill: blue;' cx='39.960' cy='864.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))</title>
+   <text
+    x='1539.360' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='1439.400' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;refuse&quot;) (state (hash n state)) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce (enc v k)) (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='789.660' y='39.960'
+   style='text-anchor: middle;'>envelope 58</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 aik-1 akey))
+  (deflistener
+    (enc &quot;quote&quot; (hash &quot;refuse&quot; (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash &quot;refuse&quot; (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;refuse&quot;) (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2)))
+      tne-2 tno-2 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-2))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-2)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((2 0) (6 0)) ((2 0) (14 0)) ((2 2) (6 2)) ((2 2) (12 0))
+    ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
+    ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
+    ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0))
+    ((14 3) (13 0)) ((15 2) (14 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; tpmkey pcr aik-0) (14 1))
+  (label 58)
+  (parent 56)
+  (unrealized (15 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t59">Tree <a href="#top">59</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='728.880pt' height='1129.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 728.880 1129.920' font-size='12.000'>
+  <text
+   x='688.920' y='1076.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k94&quot;, &quot;_self&quot;)'>94</text>
+  <line
+   x1='639.000' y1='1089.960' x2='688.920' y2='1089.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='639.000' y='1076.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k92&quot;, &quot;_self&quot;)'>92</text>
+  <line
+   x1='589.080' y1='1052.460' x2='639.000' y2='1089.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='639.000' y='1001.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k91&quot;, &quot;_self&quot;)'>91</text>
+  <line
+   x1='589.080' y1='1052.460' x2='639.000' y2='1014.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='1038.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k88&quot;, &quot;_self&quot;)'>88</text>
+  <line
+   x1='539.160' y1='939.960' x2='589.080' y2='1052.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='926.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k87&quot;, &quot;_self&quot;)'>87</text>
+  <line
+   x1='539.160' y1='939.960' x2='589.080' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='688.920' y='851.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k93&quot;, &quot;_self&quot;)'>93</text>
+  <line
+   x1='639.000' y1='864.960' x2='688.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='639.000' y='851.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k90&quot;, &quot;_self&quot;)'>90</text>
+  <line
+   x1='589.080' y1='827.460' x2='639.000' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='639.000' y='776.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k89&quot;, &quot;_self&quot;)'>89</text>
+  <line
+   x1='589.080' y1='827.460' x2='639.000' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='813.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k86&quot;, &quot;_self&quot;)'>86</text>
+  <line
+   x1='539.160' y1='939.960' x2='589.080' y2='827.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='539.160' y='926.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k83&quot;, &quot;_self&quot;)'>83</text>
+  <line
+   x1='489.240' y1='902.460' x2='539.160' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='701.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k85&quot;, &quot;_self&quot;)'>85</text>
+  <line
+   x1='539.160' y1='714.960' x2='589.080' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='539.160' y='701.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k82&quot;, &quot;_self&quot;)'>82</text>
+  <line
+   x1='489.240' y1='902.460' x2='539.160' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='888.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k79&quot;, &quot;_self&quot;)'>79</text>
+  <line
+   x1='439.320' y1='864.960' x2='489.240' y2='902.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='626.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k84&quot;, &quot;_self&quot;)'>84</text>
+  <line
+   x1='539.160' y1='639.960' x2='589.080' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='539.160' y='626.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k81&quot;, &quot;_self&quot;)'>81</text>
+  <line
+   x1='489.240' y1='639.960' x2='539.160' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='626.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k78&quot;, &quot;_self&quot;)'>78</text>
+  <line
+   x1='439.320' y1='864.960' x2='489.240' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='851.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k73&quot;, &quot;_self&quot;)'>73</text>
+  <line
+   x1='389.400' y1='714.960' x2='439.320' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='539.160' y='551.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k80&quot;, &quot;_self&quot;)'>80</text>
+  <line
+   x1='489.240' y1='564.960' x2='539.160' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='551.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k77&quot;, &quot;_self&quot;)'>77</text>
+  <line
+   x1='439.320' y1='489.960' x2='489.240' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='476.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k76&quot;, &quot;_self&quot;)'>76</text>
+  <line
+   x1='439.320' y1='489.960' x2='489.240' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='401.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k75&quot;, &quot;_self&quot;)'>75</text>
+  <line
+   x1='439.320' y1='489.960' x2='489.240' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='476.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k72&quot;, &quot;_self&quot;)'>72</text>
+  <line
+   x1='389.400' y1='714.960' x2='439.320' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='326.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k74&quot;, &quot;_self&quot;)'>74</text>
+  <line
+   x1='439.320' y1='339.960' x2='489.240' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='326.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k71&quot;, &quot;_self&quot;)'>71</text>
+  <line
+   x1='389.400' y1='714.960' x2='439.320' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='701.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k70&quot;, &quot;_self&quot;)'>70</text>
+  <line
+   x1='339.480' y1='714.960' x2='389.400' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='701.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k69&quot;, &quot;_self&quot;)'>69</text>
+  <line
+   x1='289.560' y1='714.960' x2='339.480' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='701.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k68&quot;, &quot;_self&quot;)'>68</text>
+  <line
+   x1='239.640' y1='677.460' x2='289.560' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='251.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k67&quot;, &quot;_self&quot;)'>67</text>
+  <line
+   x1='239.640' y1='677.460' x2='289.560' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='663.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k66&quot;, &quot;_self&quot;)'>66</text>
+  <line
+   x1='189.720' y1='639.960' x2='239.640' y2='677.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='176.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k65&quot;, &quot;_self&quot;)'>65</text>
+  <line
+   x1='189.720' y1='639.960' x2='239.640' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='626.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k64&quot;, &quot;_self&quot;)'>64</text>
+  <line
+   x1='139.800' y1='602.460' x2='189.720' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k63&quot;, &quot;_self&quot;)'>63</text>
+  <line
+   x1='139.800' y1='602.460' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='588.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k62&quot;, &quot;_self&quot;)'>62</text>
+  <line
+   x1='89.880' y1='564.960' x2='139.800' y2='602.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k61&quot;, &quot;_self&quot;)'>61</text>
+  <line
+   x1='89.880' y1='564.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='551.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k60&quot;, &quot;_self&quot;)'>60</text>
+  <line
+   x1='39.960' y1='564.960' x2='89.880' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='551.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k59&quot;, &quot;_self&quot;)'>59</text>
+  </svg></div>
+
+<pre>(defprotocol envelope basic
+  (defrole tpm-power-on (vars) (trace (init &quot;0&quot;)))
+  (defrole tpm-quote
+    (vars (nonce pcr mesg) (aik akey))
+    (trace (recv (cat &quot;quote&quot; nonce)) (obsv pcr)
+      (send (enc &quot;quote&quot; pcr nonce aik)))
+    (non-orig aik))
+  (defrole tpm-extend-enc
+    (vars (value state mesg) (esk skey) (tne tno data) (tpmkey akey))
+    (trace (recv (cat &quot;establish transport&quot; tpmkey (enc esk tpmkey)))
+      (send (cat &quot;establish transport&quot; tne))
+      (recv
+        (cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc value esk)) tno
+          &quot;false&quot;
+          (hash esk
+            (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc value esk)))
+            tne tno &quot;false&quot;))) (tran state (hash value state)))
+    (non-orig (invk tpmkey))
+    (uniq-orig tne))
+  (defrole tpm-create-key
+    (vars (k aik akey) (pcr mesg) (esk skey))
+    (trace (recv (enc &quot;create key&quot; pcr esk))
+      (send (enc &quot;created&quot; k pcr aik)))
+    (non-orig (invk k) aik esk)
+    (uniq-orig k))
+  (defrole tpm-decrypt
+    (vars (m pcr mesg) (k aik akey))
+    (trace (recv (cat &quot;decrypt&quot; (enc m k)))
+      (recv (enc &quot;created&quot; k pcr aik)) (obsv pcr) (send m))
+    (non-orig aik))
+  (defrole alice
+    (vars (v n tne tno data) (esk1 esk skey) (k aik tpmkey akey)
+      (pcr mesg))
+    (trace (send (cat &quot;establish transport&quot; tpmkey (enc esk tpmkey)))
+      (recv (cat &quot;establish transport&quot; tne))
+      (send
+        (cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot;
+          (hash esk
+            (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne
+            tno &quot;false&quot;))) (recv pcr)
+      (send (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1))
+      (recv (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik))
+      (send (enc v k)))
+    (non-orig aik esk1 (invk tpmkey))
+    (uniq-orig v n tno esk)
+    (neq (tno n))))</pre>
+
+<p id="k59">Item <a href="#t59">59</a>, Child: <a href="#k60">60</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='604.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 604.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: red;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>envelope 59</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (neq (tno n))
+  (non-orig esk1 aik (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (label 59)
+  (unrealized (0 0) (1 5))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k60">Item <a href="#t59">60</a>, Parent: <a href="#k59">59</a>, Children: <a href="#k61">61</a> <a href="#k62">62</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='679.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 679.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 564.960 Q 92.940 564.960 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: red;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>envelope 60</text>
+  </svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (precedes ((1 6) (0 0)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (label 60)
+  (parent 59)
+  (unrealized (1 5))
+  (origs (esk (1 0)) (n (1 2)) (tno (1 2)) (v (1 6)))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k61">Item <a href="#t59">61</a>, Parent: <a href="#k60">60</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='679.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 679.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 191.118 374.718 142.356 484.477'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik) nonce aik-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: orange;' cx='239.880' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 92.940 564.960 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)) (aik aik-0))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>envelope 61</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik))
+    (aik aik-0))
+  (precedes ((1 6) (0 0)) ((2 2) (1 5)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik) (1 5))
+  (label 61)
+  (parent 60)
+  (unrealized (2 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k62">Item <a href="#t59">62</a>, Parent: <a href="#k60">60</a>, Children: <a href="#k63">63</a> <a href="#k64">64</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='679.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 679.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 190.848 337.114 141.817 484.268'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0)</title>
+   <circle style='fill: red;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 92.940 564.960 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk-0) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>envelope 62</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk esk-0 skey)
+    (k aik tpmkey akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk-0) (k k) (aik aik))
+  (precedes ((1 6) (0 0)) ((2 1) (1 5)))
+  (neq (tno n))
+  (non-orig esk1 esk-0 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-create-key 2)
+    (enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik) (1 5))
+  (label 62)
+  (parent 60)
+  (unrealized (0 0) (2 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k63">Item <a href="#t59">63</a>, Parent: <a href="#k62">62</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='679.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 679.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 264.960 Q 292.860 264.960 245.880 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0) nonce aik-0)</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0)</title>
+   <circle style='fill: orange;' cx='339.840' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 191.564 412.464 143.247 484.967'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 92.940 564.960 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0)) (aik aik-0))</title>
+   <text
+    x='339.840' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk-0) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>envelope 63</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk esk-0 skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk-0) (k k) (aik aik))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0))
+    (aik aik-0))
+  (precedes ((1 6) (0 0)) ((2 1) (1 5)) ((3 2) (2 0)))
+  (neq (tno n))
+  (non-orig esk1 esk-0 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0) (2 0))
+  (label 63)
+  (parent 62)
+  (unrealized (0 0) (3 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k64">Item <a href="#t59">64</a>, Parent: <a href="#k62">62</a>, Children: <a href="#k65">65</a> <a href="#k66">66</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='679.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 679.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='564.960' x2='39.960' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 92.940 564.960 45.960 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: red;' cx='39.960' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>envelope 64</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (precedes ((1 4) (2 0)) ((1 6) (0 0)) ((2 1) (1 5)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (displaced 3 1 alice 5)
+    (enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk-0) (2 0))
+  (label 64)
+  (parent 62)
+  (unrealized (0 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k65">Item <a href="#t59">65</a>, Parent: <a href="#k64">64</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='754.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 754.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='489.960' x2='339.840' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='639.960' x2='39.960' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 639.960 Q 192.900 602.460 45.960 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; v nonce aik-0)</title>
+   <circle cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: orange;' cx='339.840' cy='564.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='339.840' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='714.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='639.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr v) (aik aik-0))</title>
+   <text
+    x='339.840' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>envelope 65</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr v) (aik aik-0))
+  (precedes ((1 4) (2 0)) ((1 6) (3 1)) ((2 1) (1 5)) ((3 2) (0 0)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation nonce-test (added-strand tpm-quote 3) v (0 0) (enc v k))
+  (label 65)
+  (parent 64)
+  (unrealized (3 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k66">Item <a href="#t59">66</a>, Parent: <a href="#k64">64</a>, Children: <a href="#k67">67</a> <a href="#k68">68</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>pcr-0</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; k pcr-0 aik-0)</title>
+   <circle style='fill: red;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g><title>((m v) (pcr pcr-0) (k k) (aik aik-0))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>envelope 66</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr pcr-0 mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
+  (precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) v (0 0) (enc v k))
+  (label 66)
+  (parent 64)
+  (unrealized (3 1))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k67">Item <a href="#t59">67</a>, Parent: <a href="#k66">66</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='414.960' x2='439.800' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 564.960 Q 392.220 600.660 344.639 636.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; k pcr-0 aik-0) nonce aik-1)</title>
+   <circle cx='439.800' cy='564.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; k pcr-0 aik-0)</title>
+   <circle style='fill: orange;' cx='439.800' cy='489.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>pcr-0</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; k pcr-0 aik-0)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 489.960 Q 336.840 452.460 433.800 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; k pcr-0 aik-0)) (aik aik-1))</title>
+   <text
+    x='439.800' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g><title>((m v) (pcr pcr-0) (k k) (aik aik-0))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='239.880' y='39.960'
+   style='text-anchor: middle;'>envelope 67</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr pcr-0 nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 aik-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; k pcr-0 aik-0)) (aik aik-1))
+  (precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((2 1) (4 1))
+    ((3 3) (0 0)) ((4 2) (3 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; k pcr-0 aik-0) (3 1))
+  (label 67)
+  (parent 66)
+  (unrealized (4 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k68">Item <a href="#t59">68</a>, Parent: <a href="#k66">66</a>, Child: <a href="#k69">69</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n pcr))</title>
+   <circle style='fill: orange;' cx='339.840' cy='714.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n pcr))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>envelope 68</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (k k) (aik aik))
+  (precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (displaced 4 2 tpm-create-key 2)
+    (enc &quot;created&quot; k pcr-0 aik-0) (3 1))
+  (label 68)
+  (parent 66)
+  (unrealized (3 2))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k69">Item <a href="#t59">69</a>, Parent: <a href="#k68">68</a>, Child: <a href="#k70">70</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='114.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n pcr) (hash &quot;obtain&quot; (hash n pcr)))</title>
+   <circle style='fill: orange;' cx='439.800' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n pcr))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n pcr)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n pcr)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n pcr)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n pcr))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n pcr))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr pcr) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='239.880' y='39.960'
+   style='text-anchor: middle;'>envelope 69</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno tne-0 tno-0 data) (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n pcr)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n pcr))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0))
+    ((4 3) (3 2)))
+  (leadsto ((4 3) (3 2)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tno tne-0 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;obtain&quot; (hash n pcr)) (3 2))
+  (label 69)
+  (parent 68)
+  (unrealized (4 3))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k70">Item <a href="#t59">70</a>, Parent: <a href="#k69">69</a>, Children: <a href="#k71">71</a> <a href="#k72">72</a> <a href="#k73">73</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='114.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='289.860' y='39.960'
+   style='text-anchor: middle;'>envelope 70</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 3) (4 3)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash n state) (4 3))
+  (label 70)
+  (parent 69)
+  (unrealized (5 2))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k71">Item <a href="#t59">71</a>, Parent: <a href="#k70">70</a>, Child: <a href="#k74">74</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='114.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 264.960 Q 592.740 264.960 545.760 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;) nonce aik-0)</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: orange;' cx='639.720' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)) (aik aik-0))</title>
+   <text
+    x='639.720' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='339.840' y='39.960'
+   style='text-anchor: middle;'>envelope 71</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-1
+        (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1
+        tno-1 &quot;false&quot;)) (aik aik-0))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 3) (4 3)) ((6 2) (5 2)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;) (5 2))
+  (label 71)
+  (parent 70)
+  (unrealized (5 2) (6 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k72">Item <a href="#t59">72</a>, Parent: <a href="#k70">70</a>, Children: <a href="#k75">75</a> <a href="#k76">76</a> <a href="#k77">77</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='114.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 189.960 Q 342.840 152.460 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: red;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 336.840 77.460 533.760 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='289.860' y='39.960'
+   style='text-anchor: middle;'>envelope 72</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (precedes ((1 0) (5 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
+    ((5 3) (4 3)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (displaced 6 1 alice 3)
+    (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;) (5 2))
+  (label 72)
+  (parent 70)
+  (unrealized (5 0))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k73">Item <a href="#t59">73</a>, Parent: <a href="#k70">70</a>, Children: <a href="#k78">78</a> <a href="#k79">79</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='114.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 264.960 Q 592.740 264.960 545.760 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: red;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 189.960 Q 586.740 189.960 633.720 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='339.840' y='39.960'
+   style='text-anchor: middle;'>envelope 73</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat esk-1
+        (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1
+        tno-1 &quot;false&quot;))
+    (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;) (5 2))
+  (label 73)
+  (parent 70)
+  (unrealized (5 2) (6 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k74">Item <a href="#t59">74</a>, Parent: <a href="#k71">71</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='114.960' x2='739.680' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='264.960' x2='639.720' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='264.960' x2='539.760' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='264.960' x2='439.800' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 339.960 Q 692.700 339.960 645.720 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (cat (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;) (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: orange;' cx='739.680' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc esk-1 esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc esk-1 esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='739.680' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 592.740 414.960 545.760 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;) nonce aik-0)</title>
+   <circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 489.960 Q 492.780 489.960 445.800 489.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 636.720 302.460 733.680 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 439.800 489.960 Q 391.038 599.718 342.276 709.477'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 337.031 301.406 534.142 412.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value esk-1) (state (cat (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='739.680' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)) (aik aik-0))</title>
+   <text
+    x='639.720' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='389.820' y='39.960'
+   style='text-anchor: middle;'>envelope 74</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-1
+        (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1
+        tno-1 &quot;false&quot;)) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value esk-1)
+    (state
+      (cat (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+        tne-1 tno-1 &quot;false&quot;)) (tne tne-2) (tno tno-2) (esk esk-2)
+    (tpmkey tpmkey-2))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (7 3)) ((5 3) (4 3))
+    ((6 2) (5 2)) ((7 3) (6 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((7 3) (6 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;) (6 1))
+  (label 74)
+  (parent 71)
+  (unrealized (5 2) (7 3))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k75">Item <a href="#t59">75</a>, Parent: <a href="#k72">72</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='114.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 189.960 Q 342.840 152.460 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 336.840 77.460 533.760 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='289.860' y='39.960'
+   style='text-anchor: middle;'>envelope 75 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (precedes ((1 0) (5 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
+    ((5 3) (4 3)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (contracted (tpmkey-1 tpmkey)) esk (5 0)
+    (enc esk tpmkey))
+  (label 75)
+  (parent 72)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1)
+      ((v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k)
+        (aik aik) (tpmkey tpmkey) (pcr state))))
+  (origs (n (1 2)) (tno (1 2)) (esk (1 0)) (tne (5 1)) (tne-0 (4 1))
+    (k (2 1)) (v (1 6))))</pre>
+
+<p id="k76">Item <a href="#t59">76</a>, Parent: <a href="#k72">72</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='1054.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 1054.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='264.960' x2='539.760' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='264.960' x2='439.800' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='714.960' x2='339.840' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='564.960' x2='239.880' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='939.960' x2='39.960' y2='1014.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 264.960 Q 592.740 264.960 545.760 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; esk nonce aik-0)</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: orange;' cx='639.720' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 489.960 Q 492.780 489.960 445.800 489.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 342.840 302.460 145.920 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 439.800 489.960 Q 390.593 674.561 341.385 859.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 339.840 939.960 Q 192.900 902.460 45.960 939.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='939.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='864.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <path
+   d='M 239.880 639.960 Q 192.900 639.960 145.920 639.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 139.920 714.960 Q 236.880 677.460 333.840 714.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 186.900 564.960 233.880 564.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 336.840 377.460 533.760 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 386.820 152.460 633.720 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='1014.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='939.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
+   <text
+    x='639.720' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='339.840' y='39.960'
+   style='text-anchor: middle;'>envelope 76</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((1 0) (6 1)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
+    ((5 3) (4 3)) ((6 2) (5 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (5 0)
+    (enc esk tpmkey))
+  (label 76)
+  (parent 72)
+  (unrealized (6 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k77">Item <a href="#t59">77</a>, Parent: <a href="#k72">72</a>, Child: <a href="#k80">80</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='1129.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 1129.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='114.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='339.960' x2='439.800' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='789.960' x2='339.840' y2='1014.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='639.960' x2='239.880' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='1014.960' x2='39.960' y2='1089.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: red;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 342.840 377.460 145.920 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 564.960 Q 390.593 749.561 341.385 934.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 339.840 1014.960 Q 192.900 977.460 45.960 1014.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='1014.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='939.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='864.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='789.960' r='6.000'/></g>
+  <path
+   d='M 239.880 714.960 Q 192.900 714.960 145.920 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 139.920 789.960 Q 236.880 752.460 333.840 789.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='714.960' r='6.000'/></g>
+  <path
+   d='M 139.920 639.960 Q 186.900 639.960 233.880 639.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='639.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 139.920 489.960 Q 336.840 452.460 533.760 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 386.820 77.460 633.720 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='1089.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='1014.960' r='6.000'/></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='339.840' y='39.960'
+   style='text-anchor: middle;'>envelope 77</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((1 0) (6 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
+    ((5 3) (4 3)) ((6 3) (5 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (5 0)
+    (enc esk tpmkey))
+  (label 77)
+  (parent 72)
+  (unrealized (6 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k78">Item <a href="#t59">78</a>, Parent: <a href="#k73">73</a>, Child: <a href="#k81">81</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='114.960' x2='739.680' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='264.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) nonce aik-0)</title>
+   <circle cx='739.680' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: orange;' cx='739.680' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 492.780 414.960 445.800 414.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 264.960 Q 586.740 264.960 633.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 414.960 Q 390.768 562.114 341.737 709.268'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 336.891 264.407 533.863 338.854'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))) (aik aik-0))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='389.820' y='39.960'
+   style='text-anchor: middle;'>envelope 78</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+    (aik aik-0))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 2) (6 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) (6 0))
+  (label 78)
+  (parent 73)
+  (unrealized (5 2) (7 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k79">Item <a href="#t59">79</a>, Parent: <a href="#k73">73</a>, Children: <a href="#k82">82</a> <a href="#k83">83</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='114.960' x2='739.680' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='114.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='114.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 189.960 Q 692.700 189.960 645.720 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='739.680' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: red;' cx='739.680' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 639.720 264.960 Q 592.740 264.960 545.760 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 189.960 Q 586.740 189.960 633.720 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 390.593 524.561 341.385 709.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='389.820' y='39.960'
+   style='text-anchor: middle;'>envelope 79</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 1) (6 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+    (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) (6 0))
+  (label 79)
+  (parent 73)
+  (unrealized (5 2) (7 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k80">Item <a href="#t59">80</a>, Parent: <a href="#k77">77</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='1204.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 1204.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='114.960' x2='739.680' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='414.960' x2='539.760' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='414.960' x2='439.800' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='864.960' x2='339.840' y2='1089.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='714.960' x2='239.880' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='1089.960' x2='39.960' y2='1164.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 264.960 Q 692.700 264.960 645.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; tpmkey pcr aik-0) nonce aik-1)</title>
+   <circle cx='739.680' cy='264.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: orange;' cx='739.680' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='739.680' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 592.740 414.960 545.760 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: blue;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 639.960 Q 492.780 639.960 445.800 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 539.760 489.960 Q 342.840 452.460 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 439.800 639.960 Q 390.593 824.561 341.385 1009.162'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 339.840 1089.960 Q 192.900 1052.460 45.960 1089.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='1089.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='1014.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='939.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='864.960' r='6.000'/></g>
+  <path
+   d='M 239.880 789.960 Q 192.900 789.960 145.920 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='714.960' r='6.000'/></g>
+  <path
+   d='M 139.920 864.960 Q 236.880 827.460 333.840 864.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='864.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='789.960' r='6.000'/></g>
+  <path
+   d='M 139.920 714.960 Q 186.900 714.960 233.880 714.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='714.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 336.840 527.460 533.760 564.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 386.820 152.460 633.720 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='1164.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='1089.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='639.720' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne) (tno tno) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='389.820' y='39.960'
+   style='text-anchor: middle;'>envelope 80</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr nonce mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((1 0) (6 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
+    ((5 3) (4 3)) ((6 3) (5 0)) ((7 2) (6 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; tpmkey pcr aik-0) (6 1))
+  (label 80)
+  (parent 77)
+  (unrealized (7 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k81">Item <a href="#t59">81</a>, Parent: <a href="#k78">78</a>, Child: <a href="#k84">84</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='879.600pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 879.600 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='264.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='339.960' x2='439.800' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash &quot;extend&quot; (enc n esk-1)) (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))</title>
+   <circle style='fill: orange;' cx='839.640' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;execute transport&quot; esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;execute transport&quot; esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='839.640' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) nonce aik-0)</title>
+   <circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: gray;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 337.226 338.489 534.531 487.018'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;execute transport&quot;) (state (hash &quot;extend&quot; (enc n esk-1))) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))) (aik aik-0))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='439.800' y='39.960'
+   style='text-anchor: middle;'>envelope 81</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value &quot;execute transport&quot;)
+    (state (hash &quot;extend&quot; (enc n esk-1))) (tne tne-2) (tno tno-2)
+    (esk esk-2) (tpmkey tpmkey-2))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 2) (6 0)) ((8 3) (7 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((8 3) (7 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) (7 1))
+  (label 81)
+  (parent 78)
+  (unrealized (5 2) (8 3))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k82">Item <a href="#t59">82</a>, Parent: <a href="#k79">79</a>, Child: <a href="#k85">85</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='879.600pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 879.600 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='264.960' x2='739.680' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='264.960' x2='539.760' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='264.960' x2='439.800' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 839.640 264.960 Q 792.660 264.960 745.680 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;extend&quot; (enc n esk-1)) nonce aik-0)</title>
+   <circle cx='839.640' cy='264.960' r='6.000'/></g>
+  <g><title>(hash &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: orange;' cx='839.640' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 339.960 Q 692.700 339.960 645.720 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='739.680' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 592.740 414.960 545.760 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 489.960 Q 492.780 489.960 445.800 489.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 586.740 339.960 633.720 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 439.800 489.960 Q 391.038 599.718 342.276 709.477'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 337.031 301.406 534.142 412.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;extend&quot; (enc n esk-1))) (aik aik-0))</title>
+   <text
+    x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='439.800' y='39.960'
+   style='text-anchor: middle;'>envelope 82</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;extend&quot; (enc n esk-1))) (aik aik-0))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 1) (6 0)) ((8 2) (7 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash &quot;extend&quot; (enc n esk-1)) (7 0))
+  (label 82)
+  (parent 79)
+  (unrealized (5 2) (8 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k83">Item <a href="#t59">83</a>, Parent: <a href="#k79">79</a>, Children: <a href="#k86">86</a> <a href="#k87">87</a> <a href="#k88">88</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='879.600pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 879.600 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='339.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='339.960' x2='439.800' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='839.640' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: red;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='439.800' y='39.960'
+   style='text-anchor: middle;'>envelope 83</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (precedes ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener (cat &quot;extend&quot; (enc n esk-1)))
+    (hash &quot;extend&quot; (enc n esk-1)) (7 0))
+  (label 83)
+  (parent 79)
+  (unrealized (8 0))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k84">Item <a href="#t59">84</a>, Parent: <a href="#k81">81</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='979.560pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 979.560 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='114.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='264.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='339.960' x2='439.800' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (enc n esk-1) (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: orange;' cx='939.600' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;extend&quot; esk-3)) tno-3 &quot;false&quot; (hash esk-3 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;extend&quot; esk-3))) tne-3 tno-3 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-3)</title>
+   <circle cx='939.600' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-3 (enc esk-3 tpmkey-3))</title>
+   <circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash &quot;extend&quot; (enc n esk-1)) (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))</title>
+   <circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;execute transport&quot; esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;execute transport&quot; esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='839.640' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='839.640' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) nonce aik-0)</title>
+   <circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: gray;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='739.680' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 536.773 264.680 933.626 339.400'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;extend&quot;) (state (enc n esk-1)) (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;execute transport&quot;) (state (hash &quot;extend&quot; (enc n esk-1))) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='839.640' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))) (aik aik-0))</title>
+   <text
+    x='739.680' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='489.780' y='39.960'
+   style='text-anchor: middle;'>envelope 84</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
+    (esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 tpmkey-3 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value &quot;execute transport&quot;)
+    (state (hash &quot;extend&quot; (enc n esk-1))) (tne tne-2) (tno tno-2)
+    (esk esk-2) (tpmkey tpmkey-2))
+  (defstrand tpm-extend-enc 4 (value &quot;extend&quot;) (state (enc n esk-1))
+    (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))
+  (precedes ((1 2) (9 3)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 2) (6 0)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 tne-3 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;extend&quot; (enc n esk-1)) (8 3))
+  (label 84)
+  (parent 81)
+  (unrealized (5 2) (9 3))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k85">Item <a href="#t59">85</a>, Parent: <a href="#k82">82</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='979.560pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 979.560 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='414.960' x2='739.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='489.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='414.960' x2='539.760' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='414.960' x2='439.800' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (enc n esk-1) (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: orange;' cx='939.600' cy='339.960' r='6.000'/>
+   </g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;extend&quot; esk-2)) tno-2 &quot;false&quot; (hash esk-2 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;extend&quot; esk-2))) tne-2 tno-2 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-2)</title>
+   <circle cx='939.600' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-2 (enc esk-2 tpmkey-2))</title>
+   <circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (hash &quot;extend&quot; (enc n esk-1)) nonce aik-0)</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g><title>(hash &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: gray;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='739.680' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 639.960 Q 492.780 639.960 445.800 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: red;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 539.760 489.960 Q 586.740 489.960 633.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 439.800 639.960 Q 392.220 675.660 344.639 711.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 536.773 264.680 933.626 339.400'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value &quot;extend&quot;) (state (enc n esk-1)) (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((nonce nonce) (pcr (hash &quot;extend&quot; (enc n esk-1))) (aik aik-0))</title>
+   <text
+    x='839.640' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='489.780' y='39.960'
+   style='text-anchor: middle;'>envelope 85</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash &quot;extend&quot; (enc n esk-1))) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value &quot;extend&quot;) (state (enc n esk-1))
+    (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (precedes ((1 2) (9 3)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 1) (6 0)) ((8 2) (7 0)) ((9 3) (8 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((9 3) (8 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash &quot;extend&quot; (enc n esk-1)) (8 1))
+  (label 85)
+  (parent 82)
+  (unrealized (5 2) (9 3))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k86">Item <a href="#t59">86</a>, Parent: <a href="#k83">83</a>, Children: <a href="#k89">89</a> <a href="#k90">90</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='879.600pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 879.600 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='339.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='339.960' x2='439.800' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='839.640' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: red;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-1 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 337.226 188.489 534.531 337.018'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='439.800' y='39.960'
+   style='text-anchor: middle;'>envelope 86</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (precedes ((1 0) (5 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
+    ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (contracted (esk-1 esk)) n (8 0) (enc n esk))
+  (label 86)
+  (parent 83)
+  (unrealized (5 0) (6 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k87">Item <a href="#t59">87</a>, Parent: <a href="#k83">83</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='979.560pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 979.560 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='939.600' y1='189.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='414.960' x2='739.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='489.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='414.960' x2='539.760' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='414.960' x2='439.800' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; n nonce aik-0)</title>
+   <circle cx='939.600' cy='339.960' r='6.000'/></g>
+  <g><title>n</title>
+   <circle style='fill: orange;' cx='939.600' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='939.600' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='739.680' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 639.960 Q 492.780 639.960 445.800 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 539.760 489.960 Q 586.740 489.960 633.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 439.800 639.960 Q 392.220 675.660 344.639 711.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 536.760 227.460 933.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr n) (aik aik-0))</title>
+   <text
+    x='939.600' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='489.780' y='39.960'
+   style='text-anchor: middle;'>envelope 87</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr n) (aik aik-0))
+  (precedes ((1 2) (9 1)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0)) ((9 2) (8 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) n (8 0) (enc n esk))
+  (label 87)
+  (parent 83)
+  (unrealized (9 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k88">Item <a href="#t59">88</a>, Parent: <a href="#k83">83</a>, Children: <a href="#k91">91</a> <a href="#k92">92</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='979.560pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 979.560 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='339.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='339.960' x2='439.800' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 939.600 189.960 Q 892.020 225.660 844.439 261.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='939.600' cy='189.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: red;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='839.640' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 536.760 77.460 933.600 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='489.780' y='39.960'
+   style='text-anchor: middle;'>envelope 88</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (deflistener esk)
+  (precedes ((1 0) (9 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
+    ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-listener esk) n (8 0) (enc n esk))
+  (label 88)
+  (parent 83)
+  (unrealized (9 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k89">Item <a href="#t59">89</a>, Parent: <a href="#k86">86</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='979.560pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 979.560 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='339.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='339.960' x2='439.800' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 939.600 264.960 Q 792.343 301.118 645.086 412.276'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; esk nonce aik-0)</title>
+   <circle cx='939.600' cy='264.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: orange;' cx='939.600' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='839.640' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-1 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 337.226 188.489 534.531 337.018'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 114.960 Q 536.773 114.680 933.626 189.400'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
+   <text
+    x='939.600' y='77.460' style='text-anchor: middle;'>tpm-quote</text>
+   </g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='489.780' y='39.960'
+   style='text-anchor: middle;'>envelope 89</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((1 0) (5 0)) ((1 0) (9 1)) ((1 2) (8 0)) ((1 4) (2 0))
+    ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2))
+    ((5 1) (6 0)) ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0))
+    ((8 1) (7 0)) ((9 2) (6 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (6 0)
+    (enc esk tpmkey))
+  (label 89)
+  (parent 86)
+  (unrealized (5 0) (9 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k90">Item <a href="#t59">90</a>, Parent: <a href="#k86">86</a>, Child: <a href="#k93">93</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='979.560pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 979.560 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='939.600' y1='114.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='339.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='339.960' x2='439.800' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 939.600 339.960 Q 792.570 339.232 645.541 413.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='939.600' cy='339.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: red;' cx='939.600' cy='189.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='939.600' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='839.640' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-1 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 337.226 188.489 534.531 337.018'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 114.960 Q 536.760 77.460 933.600 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='489.780' y='39.960'
+   style='text-anchor: middle;'>envelope 90</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((1 0) (5 0)) ((1 0) (9 0)) ((1 2) (8 0)) ((1 4) (2 0))
+    ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2))
+    ((5 1) (6 0)) ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0))
+    ((8 1) (7 0)) ((9 3) (6 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (6 0)
+    (enc esk tpmkey))
+  (label 90)
+  (parent 86)
+  (unrealized (5 0) (9 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k91">Item <a href="#t59">91</a>, Parent: <a href="#k88">88</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1079.520pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1079.520 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1039.560' y1='114.960' x2='1039.560' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='264.960' x2='939.600' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='339.960' x2='839.640' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='414.960' x2='739.680' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='489.960' x2='639.720' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='414.960' x2='539.760' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='414.960' x2='439.800' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1039.560 264.960 Q 992.580 264.960 945.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc &quot;quote&quot; esk nonce aik-0)</title>
+   <circle cx='1039.560' cy='264.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: orange;' cx='1039.560' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 339.960 Q 892.620 339.960 845.640 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='939.600' cy='339.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 839.640 414.960 Q 792.660 414.960 745.680 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='839.640' cy='414.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 489.960 Q 692.700 489.960 645.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='739.680' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 639.720 564.960 Q 592.740 564.960 545.760 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 639.960 Q 492.780 639.960 445.800 639.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 539.760 489.960 Q 586.740 489.960 633.720 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 439.800 639.960 Q 392.220 675.660 344.639 711.359'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 486.797 264.640 833.674 339.321'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 586.750 114.711 1033.581 189.462'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g><title>((nonce nonce) (pcr esk) (aik aik-0))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='539.760' y='39.960'
+   style='text-anchor: middle;'>envelope 91</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((1 0) (10 1)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
+    ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 2) (9 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (9 0)
+    (enc esk tpmkey))
+  (label 91)
+  (parent 88)
+  (unrealized (10 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k92">Item <a href="#t59">92</a>, Parent: <a href="#k88">88</a>, Child: <a href="#k94">94</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1079.520pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1079.520 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1039.560' y1='114.960' x2='1039.560' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='339.960' x2='939.600' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='414.960' x2='839.640' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='489.960' x2='739.680' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='564.960' x2='639.720' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='489.960' x2='539.760' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='489.960' x2='439.800' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1039.560 339.960 Q 992.580 339.960 945.600 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1039.560' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='1039.560' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: red;' cx='1039.560' cy='189.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 414.960 Q 892.620 414.960 845.640 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: blue;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 839.640 489.960 Q 792.660 489.960 745.680 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='839.640' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 739.680 564.960 Q 692.700 564.960 645.720 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='739.680' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 639.720 639.960 Q 592.740 639.960 545.760 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 539.760 714.960 Q 492.780 714.960 445.800 714.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 586.740 564.960 633.720 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 439.800 714.960 Q 392.820 714.960 345.840 714.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 486.847 301.831 833.773 413.702'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 586.740 77.460 1033.560 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='539.760' y='39.960'
+   style='text-anchor: middle;'>envelope 92</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((1 0) (10 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
+    ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 3) (9 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (9 0)
+    (enc esk tpmkey))
+  (label 92)
+  (parent 88)
+  (unrealized (10 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k93">Item <a href="#t59">93</a>, Parent: <a href="#k90">90</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1079.520pt' height='904.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1079.520 904.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1039.560' y1='114.960' x2='1039.560' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='189.960' x2='939.600' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='264.960' x2='839.640' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='339.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='414.960' x2='639.720' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='339.960' x2='439.800' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='564.960' x2='339.840' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='789.960' x2='39.960' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1039.560 264.960 Q 992.580 264.960 945.600 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; tpmkey pcr aik-0) nonce aik-1)</title>
+   <circle cx='1039.560' cy='264.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: orange;' cx='1039.560' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 414.960 Q 792.660 377.460 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='939.600' cy='414.960' r='6.000'/></g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='939.600' cy='339.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: blue;' cx='939.600' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='939.600' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 839.640 339.960 Q 792.660 339.960 745.680 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle cx='839.640' cy='339.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk))</title>
+   <circle style='fill: blue;' cx='839.640' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 739.680 414.960 Q 692.700 414.960 645.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 489.960 Q 592.740 489.960 545.760 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 539.760 564.960 Q 492.780 564.960 445.800 564.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno-1 &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 586.740 414.960 633.720 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk tpmkey-1))</title>
+   <circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 564.960 Q 391.484 637.464 343.167 709.967'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='489.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='414.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 339.840 789.960 Q 192.900 752.460 45.960 789.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='789.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 236.880 527.460 333.840 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 486.780 227.460 833.640 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 337.226 188.489 534.531 337.018'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 114.960 Q 536.773 114.680 933.626 189.400'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='864.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='939.600' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='539.760' y='39.960'
+   style='text-anchor: middle;'>envelope 93</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 data) (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))))
+  (deflistener (cat &quot;extend&quot; (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((1 0) (5 0)) ((1 0) (9 0)) ((1 2) (8 0)) ((1 4) (2 0))
+    ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2))
+    ((5 1) (6 0)) ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0))
+    ((8 1) (7 0)) ((9 3) (6 0)) ((10 2) (9 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; tpmkey pcr aik-0) (9 1))
+  (label 93)
+  (parent 90)
+  (unrealized (5 0) (10 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k94">Item <a href="#t59">94</a>, Parent: <a href="#k92">92</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='1179.480pt' height='979.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 1179.480 979.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='1139.520' y1='114.960' x2='1139.520' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='1039.560' y1='189.960' x2='1039.560' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='939.600' y1='414.960' x2='939.600' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='839.640' y1='489.960' x2='839.640' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='739.680' y1='564.960' x2='739.680' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='639.960' x2='639.720' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='564.960' x2='539.760' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='564.960' x2='439.800' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='639.960' x2='339.840' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='414.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='864.960' x2='39.960' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 1139.520 264.960 Q 1092.540 264.960 1045.560 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;quote&quot; (enc &quot;created&quot; tpmkey pcr aik-0) nonce aik-1)</title>
+   <circle cx='1139.520' cy='264.960' r='6.000'/></g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: orange;' cx='1139.520' cy='189.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;quote&quot; nonce)</title>
+   <circle style='fill: blue;' cx='1139.520' cy='114.960' r='6.000'/>
+   </g>
+  <path
+   d='M 1039.560 414.960 Q 992.580 414.960 945.600 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='1039.560' cy='414.960' r='6.000'/>
+   </g>
+  <g><title>pcr</title>
+   <circle style='fill: gray;' cx='1039.560' cy='339.960' r='6.000'/>
+   </g>
+  <g><title>(enc &quot;created&quot; tpmkey pcr aik-0)</title>
+   <circle style='fill: blue;' cx='1039.560' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>(cat &quot;decrypt&quot; (enc esk tpmkey))</title>
+   <circle style='fill: blue;' cx='1039.560' cy='189.960' r='6.000'/>
+   </g>
+  <path
+   d='M 939.600 489.960 Q 892.620 489.960 845.640 489.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>esk</title><circle cx='939.600' cy='489.960' r='6.000'/></g>
+  <g><title>esk</title>
+   <circle style='fill: blue;' cx='939.600' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 839.640 564.960 Q 792.660 564.960 745.680 564.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle cx='839.640' cy='564.960' r='6.000'/></g>
+  <g><title>(cat &quot;extend&quot; (enc n esk-1))</title>
+   <circle style='fill: blue;' cx='839.640' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 739.680 639.960 Q 692.700 639.960 645.720 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle cx='739.680' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 639.720 714.960 Q 592.740 714.960 545.760 714.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle cx='639.720' cy='714.960' r='6.000'/></g>
+  <g>
+   <title>(cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;)</title>
+   <circle style='fill: blue;' cx='639.720' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 539.760 789.960 Q 492.780 789.960 445.800 789.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(tran state (hash n state))</title>
+   <circle style='fill: gray;' cx='539.760' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk-1)) tno-1 &quot;false&quot; (hash esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))) tne-1 tno-1 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='539.760' cy='714.960' r='6.000'/></g>
+  <path
+   d='M 539.760 639.960 Q 586.740 639.960 633.720 639.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat &quot;establish transport&quot; tne-1)</title>
+   <circle cx='539.760' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-1 (enc esk-1 tpmkey-1))</title>
+   <circle style='fill: blue;' cx='539.760' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 439.800 789.960 Q 392.820 789.960 345.840 789.960'
+   style='stroke-width: 0.960; stroke: blue; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(tran (hash n state) (hash &quot;obtain&quot; (hash n state)))</title>
+   <circle style='fill: gray;' cx='439.800' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc &quot;obtain&quot; esk-0)) tno-0 &quot;false&quot; (hash esk-0 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc &quot;obtain&quot; esk-0))) tne-0 tno-0 &quot;false&quot;))</title>
+   <circle style='fill: blue;' cx='439.800' cy='714.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne-0)</title>
+   <circle cx='439.800' cy='639.960' r='6.000'/></g>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey-0 (enc esk-0 tpmkey-0))</title>
+   <circle style='fill: blue;' cx='439.800' cy='564.960' r='6.000'/></g>
+  <path
+   d='M 339.840 864.960 Q 192.900 827.460 45.960 864.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>v</title><circle cx='339.840' cy='864.960' r='6.000'/></g>
+  <g><title>(hash &quot;obtain&quot; (hash n state))</title>
+   <circle style='fill: gray;' cx='339.840' cy='789.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='339.840' cy='714.960' r='6.000'/></g>
+  <g><title>(cat &quot;decrypt&quot; (enc v k))</title>
+   <circle style='fill: blue;' cx='339.840' cy='639.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 192.900 489.960 145.920 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 139.920 564.960 Q 237.071 563.906 334.222 637.853'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc v k)</title>
+   <circle cx='139.920' cy='564.960' r='6.000'/></g>
+  <g>
+   <title>(enc &quot;created&quot; k (hash &quot;obtain&quot; (hash n state)) aik)</title>
+   <circle style='fill: blue;' cx='139.920' cy='489.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 186.900 414.960 233.880 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc &quot;create key&quot; (hash &quot;obtain&quot; (hash n state)) esk1)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>state</title>
+   <circle style='fill: blue;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 486.924 339.042 833.928 488.123'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;execute transport&quot; (cat &quot;extend&quot; (enc n esk)) tno &quot;false&quot; (hash esk (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk))) tne tno &quot;false&quot;))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat &quot;establish transport&quot; tne)</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 586.750 114.711 1033.581 189.462'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat &quot;establish transport&quot; tpmkey (enc esk tpmkey))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>v</title><circle cx='39.960' cy='939.960' r='6.000'/></g>
+  <g><title>v</title>
+   <circle style='fill: blue;' cx='39.960' cy='864.960' r='6.000'/></g>
+  <g>
+   <title>((nonce nonce) (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))</title>
+   <text
+    x='1139.520' y='77.460'
+    style='text-anchor: middle;'>tpm-quote</text></g>
+  <g><title>((m esk) (pcr pcr) (k tpmkey) (aik aik-0))</title>
+   <text
+    x='1039.560' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((value n) (state state) (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))</title>
+   <text
+    x='539.760' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((value &quot;obtain&quot;) (state (hash n state)) (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))</title>
+   <text
+    x='439.800' y='77.460'
+    style='text-anchor: middle;'>tpm-extend-enc</text></g>
+  <g>
+   <title>((m v) (pcr (hash &quot;obtain&quot; (hash n state))) (k k) (aik aik))</title>
+   <text
+    x='339.840' y='77.460'
+    style='text-anchor: middle;'>tpm-decrypt</text></g>
+  <g>
+   <title>((pcr (hash &quot;obtain&quot; (hash n state))) (esk esk1) (k k) (aik aik))</title>
+   <text
+    x='239.880' y='77.460'
+    style='text-anchor: middle;'>tpm-create-key</text></g>
+  <g>
+   <title>((pcr state) (v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>alice</text></g>
+  <text
+   x='589.740' y='39.960'
+   style='text-anchor: middle;'>envelope 94</text></svg></div>
+
+<pre>(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash &quot;obtain&quot; (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash &quot;obtain&quot; (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value &quot;obtain&quot;) (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1)))
+      tne-1 tno-1 &quot;false&quot;))
+  (deflistener (cat &quot;execute transport&quot; (hash &quot;extend&quot; (enc n esk-1))))
+  (deflistener (cat &quot;extend&quot; (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc &quot;created&quot; tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((1 0) (10 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
+    ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 3) (9 0)) ((11 2) (10 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc &quot;created&quot; tpmkey pcr aik-0) (10 1))
+  (label 94)
+  (parent 92)
+  (unrealized (11 1))
+  (comment &quot;empty cohort&quot;))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/ffgg.scm b/doc/examples/ffgg.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/ffgg.scm
@@ -0,0 +1,24 @@
+(herald "The ffgg Protocol"
+	(comment "From A Necessarily Parallel Attack by Jon K. Millen"))
+
+(defprotocol ffgg basic
+  (defrole init (vars (a b name) (n1 n2 m x y text))
+    (trace
+     (send a)
+     (recv (cat b n1 n2))
+     (send (cat a (enc n1 n2 m (pubk b))))
+     (recv (cat n1 x (enc x y n1 (pubk b))))))
+  (defrole resp (vars (b a name) (n1 n2 x y text))
+    (trace
+     (recv a)
+     (send (cat b n1 n2))
+     (recv (cat a (enc n1 x y (pubk b))))
+     (send (cat n1 x (enc x y n1 (pubk b)))))
+    (uniq-orig n1 n2)))
+
+(defskeleton ffgg
+  (vars (b name) (n1 n2 m text))
+  (defstrand init 4 (b b) (m m))
+  (deflistener m)
+  (uniq-orig m)
+  (non-orig (privk b)))
diff --git a/doc/examples/fnof_test.scm b/doc/examples/fnof_test.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/fnof_test.scm
@@ -0,0 +1,86 @@
+(herald "Function constraint test protocol"
+   (comment "Skeletons 2, 4, and 7 should have no shapes."))
+
+(defprotocol fnoftest basic
+  (defrole init
+     (vars (an0 an1 n0 n1 text) (k skey))
+     (trace
+       (send (cat n0 (enc an0 an1 n0 n1 k)))
+       (recv n1))
+     (non-orig k)
+     (uniq-orig n0 n1)
+  )
+)
+
+;;; In this skeleton, after n0 and n1 are unified, an0 and an1 will
+;;; remain distinct.
+(defskeleton fnoftest
+   (vars (an0 an1 n0 n1 text) (k skey))
+   (defstrand init 2 (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+)
+
+;;; This skeleton will be dead.  The fn-of declaration forces an0 =
+;;; an1 which violates the neq declaration.
+(defskeleton fnoftest
+   (vars (an0 an1 n0 n1 text) (k skey))
+   (defstrand init 2 (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+   (neq (an0 an1))
+   (fn-of (a (an0 n0) (an1 n1)))
+)
+
+;;; Tests whether rectification will happen properly on initial load,
+;;; since n1 and n0 are already unified.
+(defskeleton fnoftest
+   (vars (an0 an1 n1 text) (k skey))
+   (defstrand init 2 (an0 an0) (an1 an1) (n0 n1) (n1 n1) (k k))
+   (fn-of (a (an0 n1) (an1 n1)))
+)
+
+;;; Tests whether rectification will happen properly on initial load
+;;; when it leads to an impossibility.
+(defskeleton fnoftest
+   (vars (an0 an1 n1 text) (k skey))
+   (defstrand init 2 (an0 an0) (an1 an1) (n0 n1) (n1 n1) (k k))
+   (fn-of (a (an0 n1) (an1 n1)))
+   (neq (an0 an1))
+)
+
+(defprotocol fnoftest2 basic
+  (defrole init
+     (vars (bn0 bn1 name) (an0 an1 n0 n1 text) (k skey))
+     (trace
+       (send (cat n0 (enc bn0 bn1 an0 an1 n0 n1 k)))
+       (recv n1))
+     (non-orig k)
+     (uniq-orig n0 n1)
+     (fn-of (a (an0 n0) (an1 n1)))
+     (fn-of (b ((pubk bn0) an0)))
+  )
+)
+
+;;; This skeleton should be fine, but bn0 = bn1.  Tests cascading
+;;; requirements, as the bn0 = bn1 requirement only arises after an0 =
+;;; an1 happens.
+(defskeleton fnoftest2
+   (vars (bn0 bn1 name) (an0 an1 n0 n1 text) (k skey))
+   (defstrand init 2 (bn0 bn0) (bn1 bn1) (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+   (fn-of (b ((pubk bn1) an1)))
+)
+
+;;; Here, bn0 and bn1 are not unified because they are the result of
+;;; different functions, even once the inputs are unified.
+(defskeleton fnoftest2
+   (vars (bn0 bn1 name) (an0 an1 n0 n1 text) (k skey))
+   (defstrand init 2 (bn0 bn0) (bn1 bn1) (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+   (fn-of (c ((pubk bn1) an1)))
+   (decl foo ((n0 n1) (0 1)) ((k k k n0) (0 0) (0 0) (0 1)))
+)
+
+;;; This should be dead due to a cascade, because pubk bn0 cannot be
+;;; unified with privk bn0.
+(defskeleton fnoftest2
+   (vars (bn0 bn1 name) (an0 an1 n0 n1 text) (k skey))
+   (defstrand init 2 (bn0 bn0) (bn1 bn1) (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+   (fn-of (b ((privk bn0) an1)))
+   (decl foo ((n0 n1) (0 1)) ((k k k n0) (0 0) (0 0) (0 1)))
+)
diff --git a/doc/examples/fnof_yahalom.scm b/doc/examples/fnof_yahalom.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/fnof_yahalom.scm
@@ -0,0 +1,135 @@
+(herald "Yahalom Protocol with Forwarding Removed, using fnof to emulate ltk function"
+   (bound 12))
+
+(defprotocol yahalom basic
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init (c ltkac) to force c, ltkac to be present in the
+    ; trace.
+    (trace (init (cat c ltkac))
+           (send (cat a n-a))
+	   (recv (enc b k n-a n-b ltkac))
+	   (send (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+    (fn-of ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  )
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init (c ltkac) to force c, ltkac to be present in the
+    ; trace.
+    (trace (init (cat c ltkac))
+           (recv (cat a n-a))
+	   (send (cat b (enc a n-a n-b ltkbc)))
+	   (recv (enc a k ltkbc))
+	   (recv (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+    (fn-of ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  )
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init c to force c to be present in the trace.
+    (trace (init c)
+           (recv (cat b (enc a n-a n-b ltkbc)))
+	   (send (enc b k n-a n-b ltkac))
+	   (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+    (fn-of ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  )
+)
+
+(defskeleton yahalom
+  (vars (a b c name) (n-b text) (ltkac ltkbc skey))
+  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc))
+  (non-orig ltkbc ltkac)
+  (uniq-orig n-b)
+)
+
+;;; Ensure encryption key remains secret.
+(defskeleton yahalom
+  (vars (a b c name) (n-b text) (ltkac ltkbc k skey))
+  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b) (k k) (ltkac ltkac) (ltkbc ltkbc))
+  (deflistener k)
+  (non-orig ltkbc ltkac)
+  (uniq-orig n-b)
+)
+
+;;;  In this version, fn-of is only used for the "forward" direction
+;;; of the ltk function.  In other words, if y = ltk(a,b) and z =
+;;; ltk(a,b) then y = z.  But if y = ltk(a,b) and z = ltk(c,d) it is
+;;; not necessarily the case that if y = z then a = b and c = d.
+(defprotocol yahalom2 basic
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init (c ltkac) to force c, ltkac to be present in the
+    ; trace.
+    (trace (init (cat c ltkac))
+           (send (cat a n-a))
+	   (recv (enc b k n-a n-b ltkac))
+	   (send (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init (c ltkac) to force c, ltkac to be present in the
+    ; trace.
+    (trace (init (cat c ltkac))
+           (recv (cat a n-a))
+	   (send (cat b (enc a n-a n-b ltkbc)))
+	   (recv (enc a k ltkbc))
+	   (recv (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init c to force c to be present in the trace.
+    (trace (init c)
+           (recv (cat b (enc a n-a n-b ltkbc)))
+	   (send (enc b k n-a n-b ltkac))
+	   (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+)
+
+(defprotocol yahalom2 basic
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (send (cat a n-a (hash ltkbc)))
+	   (recv (enc b k n-a n-b ltkac))
+	   (send (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat a n-a))
+	   (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+	   (recv (enc a k ltkbc))
+	   (recv (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat b (enc a n-a n-b ltkbc)))
+	   (send (cat (hash c) (enc b k n-a n-b ltkac)))
+	   (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+)
+
+(defskeleton yahalom2
+  (vars (a b c name) (n-b text) (ltkac ltkbc skey))
+  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc))
+  (non-orig ltkbc ltkac)
+  (uniq-orig n-b)
+)
+
+;;; Ensure encryption key remains secret.
+(defskeleton yahalom2
+  (vars (a b c name) (n-b text) (ltkac ltkbc k skey))
+  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b) (k k) (ltkac ltkac) (ltkbc ltkbc))
+  (deflistener k)
+  (non-orig ltkbc ltkac)
+  (uniq-orig n-b)
+)
diff --git a/doc/examples/fnof_yahalom.xhtml b/doc/examples/fnof_yahalom.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/fnof_yahalom.xhtml
@@ -0,0 +1,1876 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Yahalom Protocol with Forwarding Removed, using fnof to emulate ltk function</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald
+  &quot;Yahalom Protocol with Forwarding Removed, using fnof to emulate ltk function&quot;
+  (bound 12))
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from fnof_yahalom.scm&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t4">4</a> <a href="#t10">10</a> <a href="#t15">15</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 154.920' font-size='12.000'>
+  <text
+   x='139.800' y='101.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol yahalom basic
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (ltkac k skey))
+    (trace (init (cat c ltkac)) (send (cat a n-a))
+      (recv (enc b k n-a n-b ltkac)) (send (enc n-b k)))
+    (fn-of (&quot;ltk&quot; (ltkac (cat a c))) (&quot;ltk-inv&quot; ((cat a c) ltkac))))
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc))
+      (recv (enc n-b k)))
+    (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))
+      (&quot;ltk-inv&quot; ((cat a c) ltkac) ((cat b c) ltkbc))))
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (init c) (recv (cat b (enc a n-a n-b ltkbc)))
+      (send (enc b k n-a n-b ltkac)) (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))
+      (&quot;ltk-inv&quot; ((cat a c) ltkac) ((cat b c) ltkbc)))))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Child: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>yahalom 0</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))
+    (&quot;ltk-inv&quot; ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b)
+  (label 0)
+  (unrealized (0 3))
+  (origs (n-b (0 2)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Children: <a href="#k2">2</a> <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a-0 n-b-0 ltkac)</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>c</title>
+   <circle style='fill: gray;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>yahalom 1</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 4 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b)
+    (ltkac ltkac) (ltkbc ltkbc) (k k))
+  (precedes ((1 3) (0 3)))
+  (fn-of (&quot;ltk&quot; (ltkbc (cat b c)) (ltkac (cat a c)))
+    (&quot;ltk-inv&quot; ((cat b c) ltkbc) ((cat a c) ltkac)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand serv 4) (enc a k ltkbc)
+    (0 3))
+  (label 1)
+  (parent 0)
+  (unrealized (1 1))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 414.960 Q 92.940 414.960 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b ltkac)</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>c</title>
+   <circle style='fill: gray;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 86.940 264.960 133.920 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>yahalom 2 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 4 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (precedes ((0 2) (1 1)) ((1 3) (0 3)))
+  (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))
+    (&quot;ltk-inv&quot; ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (displaced 2 0 resp 3)
+    (enc a n-a-0 n-b-0 ltkbc) (1 1))
+  (label 2)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (n-a n-a)
+        (k k))))
+  (origs (k (1 2)) (n-b (0 2))))</pre>
+
+<p id="k3">Item <a href="#t0">3</a>, Parent: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 414.960 Q 92.940 414.960 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b k n-a-0 n-b-0 ltkac)</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>c</title>
+   <circle style='fill: gray;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>yahalom 3 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 4 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b)
+    (ltkac ltkac) (ltkbc ltkbc) (k k))
+  (defstrand resp 3 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c)
+    (ltkac ltkac) (ltkbc ltkbc))
+  (precedes ((1 3) (0 3)) ((2 2) (1 1)))
+  (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))
+    (&quot;ltk-inv&quot; ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand resp 3)
+    (enc a n-a-0 n-b-0 ltkbc) (1 1))
+  (label 3)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (n-a n-a)
+        (k k))))
+  (origs (k (1 2)) (n-b (0 2))))</pre>
+
+<p id="t4">Tree <a href="#top">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='229.680pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 229.680 154.920' font-size='12.000'>
+  <text
+   x='189.720' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k9&quot;, &quot;_self&quot;)'>9</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k7&quot;, &quot;_self&quot;)'>7</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  <line
+   x1='139.800' y1='39.960' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k6&quot;, &quot;_self&quot;)'>6</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  </svg></div>
+
+<pre>(defprotocol yahalom basic
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (ltkac k skey))
+    (trace (init (cat c ltkac)) (send (cat a n-a))
+      (recv (enc b k n-a n-b ltkac)) (send (enc n-b k)))
+    (fn-of (&quot;ltk&quot; (ltkac (cat a c))) (&quot;ltk-inv&quot; ((cat a c) ltkac))))
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc))
+      (recv (enc n-b k)))
+    (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))
+      (&quot;ltk-inv&quot; ((cat a c) ltkac) ((cat b c) ltkbc))))
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (init c) (recv (cat b (enc a n-a n-b ltkbc)))
+      (send (enc b k n-a n-b ltkac)) (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))
+      (&quot;ltk-inv&quot; ((cat a c) ltkac) ((cat b c) ltkbc)))))</pre>
+
+<p id="k4">Item <a href="#t4">4</a>, Child: <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>k</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>yahalom 4</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))
+    (&quot;ltk-inv&quot; ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b)
+  (label 4)
+  (unrealized (0 3))
+  (origs (n-b (0 2)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k5">Item <a href="#t4">5</a>, Parent: <a href="#k4">4</a>, Children: <a href="#k6">6</a> <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 339.960 Q 142.920 302.460 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 ltkac)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>c</title>
+   <circle style='fill: gray;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>yahalom 5</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 4 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b)
+    (ltkac ltkac) (ltkbc ltkbc) (k k))
+  (precedes ((2 2) (1 0)) ((2 3) (0 3)))
+  (fn-of (&quot;ltk&quot; (ltkbc (cat b c)) (ltkac (cat a c)))
+    (&quot;ltk-inv&quot; ((cat b c) ltkbc) ((cat a c) ltkac)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand serv 4) (enc a k ltkbc)
+    (0 3))
+  (label 5)
+  (parent 4)
+  (unrealized (1 0) (2 1))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k6">Item <a href="#t4">6</a>, Parent: <a href="#k5">5</a>, Child: <a href="#k8">8</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='339.960' x2='139.920' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 192.900 339.960 145.920 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b ltkac)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>c</title>
+   <circle style='fill: gray;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 136.920 227.460 233.880 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>yahalom 6</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 4 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (precedes ((0 2) (2 1)) ((2 2) (1 0)) ((2 3) (0 3)))
+  (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))
+    (&quot;ltk-inv&quot; ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (displaced 3 0 resp 3)
+    (enc a n-a-0 n-b-0 ltkbc) (2 1))
+  (label 6)
+  (parent 5)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k7">Item <a href="#t4">7</a>, Parent: <a href="#k5">5</a>, Child: <a href="#k9">9</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='339.960' x2='139.920' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 264.960 Q 292.860 264.960 245.880 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 192.900 339.960 145.920 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 ltkac)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>c</title>
+   <circle style='fill: gray;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>yahalom 7</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 4 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b)
+    (ltkac ltkac) (ltkbc ltkbc) (k k))
+  (defstrand resp 3 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c)
+    (ltkac ltkac) (ltkbc ltkbc))
+  (precedes ((2 2) (1 0)) ((2 3) (0 3)) ((3 2) (2 1)))
+  (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))
+    (&quot;ltk-inv&quot; ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand resp 3)
+    (enc a n-a-0 n-b-0 ltkbc) (2 1))
+  (label 7)
+  (parent 5)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k8">Item <a href="#t4">8</a>, Parent: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='414.960' x2='139.920' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 414.960 Q 192.900 414.960 145.920 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b ltkac)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>c</title>
+   <circle style='fill: gray;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='489.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 136.920 227.460 233.880 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>yahalom 8</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 4 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (precedes ((0 2) (2 1)) ((2 3) (0 3)) ((2 3) (1 0)))
+  (fn-of (&quot;ltk&quot; (ltkbc (cat b c)) (ltkac (cat a c)))
+    (&quot;ltk-inv&quot; ((cat b c) ltkbc) ((cat a c) ltkac)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation nonce-test (displaced 3 2 serv 4) k (1 0)
+    (enc b k n-a n-b ltkac))
+  (label 8)
+  (parent 6)
+  (unrealized (1 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k9">Item <a href="#t4">9</a>, Parent: <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='414.960' x2='139.920' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 264.960 Q 292.860 264.960 245.880 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 414.960 Q 192.900 414.960 145.920 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b k n-a-0 n-b-0 ltkac)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>c</title>
+   <circle style='fill: gray;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='489.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc))</title>
+   <circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat c ltkac)</title>
+   <circle style='fill: gray;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>yahalom 9</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 4 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b)
+    (ltkac ltkac) (ltkbc ltkbc) (k k))
+  (defstrand resp 3 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c)
+    (ltkac ltkac) (ltkbc ltkbc))
+  (precedes ((2 3) (0 3)) ((2 3) (1 0)) ((3 2) (2 1)))
+  (fn-of (&quot;ltk&quot; (ltkbc (cat b c)) (ltkac (cat a c)))
+    (&quot;ltk-inv&quot; ((cat b c) ltkbc) ((cat a c) ltkac)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation nonce-test (displaced 4 2 serv 4) k (1 0)
+    (enc b k n-a-0 n-b-0 ltkac))
+  (label 9)
+  (parent 7)
+  (unrealized (1 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t10">Tree <a href="#top">10</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='229.680pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 229.680 154.920' font-size='12.000'>
+  <text
+   x='189.720' y='101.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k14&quot;, &quot;_self&quot;)'>14</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k13&quot;, &quot;_self&quot;)'>13</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k12&quot;, &quot;_self&quot;)'>12</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k11&quot;, &quot;_self&quot;)'>11</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k10&quot;, &quot;_self&quot;)'>10</text>
+  </svg></div>
+
+<pre>(defprotocol yahalom2 basic
+  (defrole init
+    (vars (a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (send (cat a n-a (hash ltkbc)))
+      (recv (enc b k n-a n-b ltkac)) (send (enc n-b k))))
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k)))
+    (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))))
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat b (enc a n-a n-b ltkbc)))
+      (send (cat (hash c) (enc b k n-a n-b ltkac)))
+      (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c))))))</pre>
+
+<p id="k10">Item <a href="#t10">10</a>, Child: <a href="#k11">11</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc) (hash c ltkac))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>yahalom2 10</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom2
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b)
+  (label 10)
+  (unrealized (0 2) (0 3))
+  (origs (n-b (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k11">Item <a href="#t10">11</a>, Parent: <a href="#k10">10</a>, Children: <a href="#k12">12</a> <a href="#k13">13</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat b-0 (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc) (hash c ltkac))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0) (ltkac ltkac-0) (ltkbc ltkbc) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>yahalom2 11</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 name)
+    (ltkac ltkbc k ltkac-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (precedes ((1 2) (0 2)))
+  (fn-of
+    (&quot;ltk&quot; (ltkac-0 (cat a c-0)) (ltkbc (cat b-0 c-0)) (ltkac (cat a c))
+      (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand serv 3) (enc a k ltkbc)
+    (0 2))
+  (label 11)
+  (parent 10)
+  (unrealized (0 3) (1 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k12">Item <a href="#t10">12</a>, Parent: <a href="#k11">11</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(cat (hash c-0) (enc b-0 k n-a n-b ltkac-0))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b-0 (enc a n-a n-b ltkbc))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b ltkbc) (hash c ltkac))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (c c-0) (a a) (b b-0) (ltkac ltkac-0) (ltkbc ltkbc) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>yahalom2 12 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton yahalom2
+  (vars (n-b n-a text) (a b c c-0 b-0 name)
+    (ltkac ltkbc k ltkac-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (precedes ((0 1) (1 0)) ((1 2) (0 2)))
+  (fn-of
+    (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)) (ltkac-0 (cat a c-0))
+      (ltkbc (cat b-0 c-0))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc a n-a-0 n-b-0 ltkbc) (1 0))
+  (label 12)
+  (parent 11)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (n-a n-a)
+        (k k))))
+  (origs (k (1 1)) (n-b (0 1))))</pre>
+
+<p id="k13">Item <a href="#t10">13</a>, Parent: <a href="#k11">11</a>, Child: <a href="#k14">14</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat b-1 (enc a n-a-0 n-b-0 ltkbc) (hash c-1 ltkac-1))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b-0 (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc) (hash c ltkac))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1) (ltkac ltkac-1) (ltkbc ltkbc))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0) (ltkac ltkac-0) (ltkbc ltkbc) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>yahalom2 13</text></svg></div>
+
+<pre>(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 b-1 c-1 name)
+    (ltkac ltkbc k ltkac-0 ltkac-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1)
+    (ltkac ltkac-1) (ltkbc ltkbc))
+  (precedes ((1 2) (0 2)) ((2 1) (1 0)))
+  (fn-of
+    (&quot;ltk&quot; (ltkac-1 (cat a c-1)) (ltkbc (cat b-1 c-1))
+      (ltkac-0 (cat a c-0)) (ltkbc (cat b-0 c-0)) (ltkac (cat a c))
+      (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand resp 2)
+    (enc a n-a-0 n-b-0 ltkbc) (1 0))
+  (label 13)
+  (parent 11)
+  (unrealized (0 3))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k14">Item <a href="#t10">14</a>, Parent: <a href="#k13">13</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 264.960 Q 192.583 301.118 45.326 412.276'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (hash c-2) (enc b-2 k-0 n-a n-b ltkac-2))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b-2 (enc a n-a n-b ltkbc))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat b-1 (enc a n-a-0 n-b-0 ltkbc) (hash c-1 ltkac-1))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b-0 (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b ltkbc) (hash c ltkac))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (c c-2) (a a) (b b-2) (ltkac ltkac-2) (ltkbc ltkbc) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1) (ltkac ltkac-1) (ltkbc ltkbc))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0) (ltkac ltkac-0) (ltkbc ltkbc) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>yahalom2 14 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 b-1 c-1 c-2 b-2 name)
+    (ltkac ltkbc k ltkac-0 ltkac-1 ltkac-2 k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1)
+    (ltkac ltkac-1) (ltkbc ltkbc))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c-2) (a a) (b b-2)
+    (ltkac ltkac-2) (ltkbc ltkbc) (k k-0))
+  (precedes ((0 1) (3 0)) ((1 2) (0 2)) ((2 1) (1 0)) ((3 1) (0 3)))
+  (fn-of
+    (&quot;ltk&quot; (ltkac-2 (cat a c-2)) (ltkbc (cat b-2 c-2))
+      (ltkac-1 (cat a c-1)) (ltkbc (cat b-1 c-1)) (ltkac-0 (cat a c-0))
+      (ltkbc (cat b-0 c-0)) (ltkac (cat a c)) (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-strand serv 2) n-b (0 3)
+    (enc a n-a n-b ltkbc))
+  (label 14)
+  (parent 13)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (n-a n-a)
+        (k k))))
+  (origs (k-0 (3 1)) (k (1 1)) (n-b (0 1))))</pre>
+
+<p id="t15">Tree <a href="#top">15</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='229.680pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 229.680 154.920' font-size='12.000'>
+  <text
+   x='189.720' y='101.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k19&quot;, &quot;_self&quot;)'>19</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k18&quot;, &quot;_self&quot;)'>18</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k17&quot;, &quot;_self&quot;)'>17</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k16&quot;, &quot;_self&quot;)'>16</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k15&quot;, &quot;_self&quot;)'>15</text>
+  </svg></div>
+
+<pre>(defprotocol yahalom2 basic
+  (defrole init
+    (vars (a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (send (cat a n-a (hash ltkbc)))
+      (recv (enc b k n-a n-b ltkac)) (send (enc n-b k))))
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k)))
+    (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)))))
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat b (enc a n-a n-b ltkbc)))
+      (send (cat (hash c) (enc b k n-a n-b ltkac)))
+      (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c))))))</pre>
+
+<p id="k15">Item <a href="#t15">15</a>, Child: <a href="#k16">16</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>k</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc) (hash c ltkac))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>yahalom2 15</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom2
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (fn-of (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b)
+  (label 15)
+  (unrealized (0 2) (0 3))
+  (origs (n-b (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k16">Item <a href="#t15">16</a>, Parent: <a href="#k15">15</a>, Children: <a href="#k17">17</a> <a href="#k18">18</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat b-0 (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle style='fill: red;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc) (hash c ltkac))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0) (ltkac ltkac-0) (ltkbc ltkbc) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>yahalom2 16</text></svg></div>
+
+<pre>(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 name)
+    (ltkac ltkbc k ltkac-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (precedes ((2 1) (1 0)) ((2 2) (0 2)))
+  (fn-of
+    (&quot;ltk&quot; (ltkac-0 (cat a c-0)) (ltkbc (cat b-0 c-0)) (ltkac (cat a c))
+      (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand serv 3) (enc a k ltkbc)
+    (0 2))
+  (label 16)
+  (parent 15)
+  (unrealized (0 3) (2 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k17">Item <a href="#t15">17</a>, Parent: <a href="#k16">16</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 339.960 Q 142.920 302.460 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (hash c-0) (enc b-0 k n-a n-b ltkac-0))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b-0 (enc a n-a n-b ltkbc))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 136.920 152.460 233.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b ltkbc) (hash c ltkac))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (c c-0) (a a) (b b-0) (ltkac ltkac-0) (ltkbc ltkbc) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>yahalom2 17 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton yahalom2
+  (vars (n-b n-a text) (a b c c-0 b-0 name)
+    (ltkac ltkbc k ltkac-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (precedes ((0 1) (2 0)) ((2 1) (1 0)) ((2 2) (0 2)))
+  (fn-of
+    (&quot;ltk&quot; (ltkac (cat a c)) (ltkbc (cat b c)) (ltkac-0 (cat a c-0))
+      (ltkbc (cat b-0 c-0))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (displaced 3 0 resp 2)
+    (enc a n-a-0 n-b-0 ltkbc) (2 0))
+  (label 17)
+  (parent 16)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (k k)
+        (n-a n-a))))
+  (origs (k (2 1)) (n-b (0 1))))</pre>
+
+<p id="k18">Item <a href="#t15">18</a>, Parent: <a href="#k16">16</a>, Child: <a href="#k19">19</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 292.860 189.960 245.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat b-1 (enc a n-a-0 n-b-0 ltkbc) (hash c-1 ltkac-1))</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.920 302.460 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b-0 (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b ltkbc) (hash c ltkac))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1) (ltkac ltkac-1) (ltkbc ltkbc))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0) (ltkac ltkac-0) (ltkbc ltkbc) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>yahalom2 18</text></svg></div>
+
+<pre>(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 b-1 c-1 name)
+    (ltkac ltkbc k ltkac-0 ltkac-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1)
+    (ltkac ltkac-1) (ltkbc ltkbc))
+  (precedes ((2 1) (1 0)) ((2 2) (0 2)) ((3 1) (2 0)))
+  (fn-of
+    (&quot;ltk&quot; (ltkac-1 (cat a c-1)) (ltkbc (cat b-1 c-1))
+      (ltkac-0 (cat a c-0)) (ltkbc (cat b-0 c-0)) (ltkac (cat a c))
+      (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand resp 2)
+    (enc a n-a-0 n-b-0 ltkbc) (2 0))
+  (label 18)
+  (parent 16)
+  (unrealized (0 3))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k19">Item <a href="#t15">19</a>, Parent: <a href="#k18">18</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 264.960 Q 242.689 301.406 45.578 412.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (hash c-2) (enc b-2 k-0 n-a n-b ltkac-2))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b-2 (enc a n-a n-b ltkbc))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 189.960 Q 292.860 189.960 245.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat b-1 (enc a n-a-0 n-b-0 ltkbc) (hash c-1 ltkac-1))</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.920 302.460 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k ltkbc)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b-0 (enc a n-a-0 n-b-0 ltkbc))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k ltkbc)</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b ltkbc) (hash c ltkac))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (c c-2) (a a) (b b-2) (ltkac ltkac-2) (ltkbc ltkbc) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1) (ltkac ltkac-1) (ltkbc ltkbc))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0) (ltkac ltkac-0) (ltkbc ltkbc) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac) (ltkbc ltkbc) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='239.880' y='39.960'
+   style='text-anchor: middle;'>yahalom2 19 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 b-1 c-1 c-2 b-2 name)
+    (ltkac ltkbc k ltkac-0 ltkac-1 ltkac-2 k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1)
+    (ltkac ltkac-1) (ltkbc ltkbc))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c-2) (a a) (b b-2)
+    (ltkac ltkac-2) (ltkbc ltkbc) (k k-0))
+  (precedes ((0 1) (4 0)) ((2 1) (1 0)) ((2 2) (0 2)) ((3 1) (2 0))
+    ((4 1) (0 3)))
+  (fn-of
+    (&quot;ltk&quot; (ltkac-2 (cat a c-2)) (ltkbc (cat b-2 c-2))
+      (ltkac-1 (cat a c-1)) (ltkbc (cat b-1 c-1)) (ltkac-0 (cat a c-0))
+      (ltkbc (cat b-0 c-0)) (ltkac (cat a c)) (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-strand serv 2) n-b (0 3)
+    (enc a n-a n-b ltkbc))
+  (label 19)
+  (parent 18)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (k k)
+        (n-a n-a))))
+  (origs (k-0 (4 1)) (k (2 1)) (n-b (0 1))))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/goals.scm b/doc/examples/goals.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/goals.scm
@@ -0,0 +1,391 @@
+(herald goals)
+
+;;; Section 1 --- Examples from CPSA and Formal Security Goals
+
+;;; Needham-Schroeder from Section 10 of the CPSA Primer
+
+(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace
+     (send (enc n1 a (pubk b)))
+     (recv (enc n1 n2 (pubk a)))
+     (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace
+     (recv (enc n1 a (pubk b)))
+     (send (enc n1 n2 (pubk a)))
+     (recv (enc n2 (pubk b)))))
+  (comment "Needham-Schroeder with no role origination assumptions"))
+
+(defgoal ns
+  (forall ((b name) (n1 text) (z0 node))
+    (implies
+     (and (p "init" 2 z0)
+      (p "init" "n1" z0 n1) (p "init" "b" z0 b)
+      (non (privk b)) (uniq n1))
+     (exists ((z1 node))
+	     (and (p "resp" 1 z1) (p "resp" "b" z1 b)))))
+  (comment "Initiator point of view")
+  (comment "Authentication goal: agreement on name b"))
+
+(defgoal ns
+  (forall ((b name) (n1 text) (z0 node))
+    (implies
+     (and (p "init" 2 z0)
+      (p "init" "n1" z0 n1) (p "init" "b" z0 b)
+      (non (privk b)) (uniq n1))
+     (exists ((z1 node))
+	     (and (p "resp" 1 z1) (p "resp" "b" z1 b)
+	      (prec z1 z0)))))
+  (comment "Prec example"))
+
+(defgoal ns
+  (forall ((a b name) (n2 text) (z0 node))
+    (implies
+     (and (p "resp" 2 z0) (p "resp" "n2" z0 n2)
+      (p "resp" "a" z0 a) (p "resp" "b" z0 b)
+      (non (privk a)) (uniq n2))
+     (exists ((z1 node))
+      (and (p "init" 1 z1) (p "init" "b" z1 b)))))
+  (comment "Responder point of view")
+  (comment "Failed authentication goal: agreement on name b"))
+
+(defprotocol nsl basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace
+     (send (enc n1 a (pubk b)))
+     (recv (enc n1 n2 b (pubk a)))
+     (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace
+     (recv (enc n1 a (pubk b)))
+     (send (enc n1 n2 b (pubk a)))
+     (recv (enc n2 (pubk b)))))
+  (comment "Needham-Schroeder-Lowe with no role origination assumptions"))
+
+(defgoal nsl
+  (forall ((a b name) (n2 text) (z0 node))
+    (implies
+     (and (p "resp" 2 z0) (p "resp" "n2" z0 n2)
+      (p "resp" "a" z0 a) (p "resp" "b" z0 b)
+      (non (privk a)) (uniq n2))
+     (exists ((z1 node))
+      (and (p "init" 1 z1) (p "init" "b" z1 b)))))
+  (comment "Responder point of view")
+  (comment "Authentication goal: agreement on name b"))
+
+(defgoal ns
+  (forall ((a b name) (n1 text) (z0 z1 node))
+    (implies
+     (and (p "init" 2 z0) (p "init" "n1" z0 n1)
+      (p "init" "a" z0 a) (p "init" "b" z0 b)
+      (p "" 0 z1) (p "" "x" z1 n1)
+      (non (privk a)) (non (privk b)) (uniq n1))
+     (false)))
+  (comment "Initiator point of view")
+  (comment "Secrecy goal: nonce n1 not revealed"))
+
+(defprotocol unilateral basic
+  (defrole init
+    (vars (a name) (n text))
+    (trace
+     (send (enc n (pubk a)))
+     (recv n)))
+  (defrole resp
+    (vars (a name) (n text))
+    (trace
+     (recv (enc n (pubk a)))
+     (send n)))
+  (comment "Unilateral authentication"))
+
+(defgoal unilateral
+  (forall ((a name) (n text)
+           (z0 node))
+   (implies
+    (and (p "init" 1 z0)
+     (p "init" "n" z0 n)
+     (p "init" "a" z0 a)
+     (non (privk a)) (uniq n))
+    (exists ((z1 node))
+     (and (p "resp" 1 z1)
+      (p "resp" "a" z1 a)))))
+  (comment "Unilateral authentication goal"))
+
+;;; Does initiator satisfy the unilateral authentication goal?
+
+;;; Note that the goal requires translation of some of the role
+;;; specific predicates.
+(defgoal ns
+  (forall ((a name) (n text) (z0 node))
+   (implies
+    (and (p "init" 1 z0) (p "init" "n1" z0 n)
+     (p "init" "b" z0 a) (non (privk a)) (uniq n))
+    (exists ((z1 node))
+     (and (p "resp" 1 z1) (p "resp" "b" z1 a)))))
+  (comment "Initiator authentication goal")
+  (comment "Same as unilateral goal under the predicate mapping:")
+  (comment (p "init" "n") "->" (p "init" "n1") "and")
+  (comment (p "init" "a") "->" (p "init" "b") "and")
+  (comment (p "resp" "a") "->" (p "resp" "b")))
+
+;;; Does responder satisfy the unilateral authentication goal?
+
+(defgoal ns
+  (forall ((a name) (n text) (z0 node))
+   (implies
+    (and (p "resp" 2 z0) (p "resp" "n2" z0 n)
+     (p "resp" "a" z0 a) (non (privk a)) (uniq n))
+    (exists ((z1 node))
+     (and (p "init" 2 z1) (p "init" "a" z1 a)))))
+  (comment "Responder authentication goal")
+  (comment "Same as unilateral goal under the predicate mapping:")
+  (comment (p "init" 1) "->" (p "resp" 2) "and")
+  (comment (p "init" "n") "->" (p "resp" "n2") "and")
+  (comment (p "init" "a") "->" (p "resp" "a") "and")
+  (comment (p "resp" 1) "->" (p "init" 2) "and")
+  (comment (p "resp" "a") "->" (p "init" "a")))
+
+(defgoal ns
+  (forall ((a b name) (n text) (z0 node))
+    (implies
+     (and
+      (p "init" 1 z0) (p "init" "n1" z0 n)
+      (p "init" "a" z0 a) (p "init" "b" z0 b)
+      (non (privk a)) (non (privk b)) (uniq n))
+     (exists ((z1 node))
+      (and (p "resp" 1 z1) (p "resp" "b" z1 b)))))
+  (forall ((a b name) (n text) (z0 node))
+   (implies
+     (and
+      (p "init" 1 z0) (p "init" "n1" z0 n)
+      (p "init" "a" z0 a) (p "init" "b" z0 b)
+      (non (privk a)) (non (privk b)) (uniq n))
+     (exists ((z1 node))
+      (and (p "resp" 1 z1) (p "resp" "a" z1 a)))))
+  (comment "Two initiator authentication goals"))
+
+;;; The shape analysis sentence as input (kind of useless)
+
+(defgoal ns
+  (forall ((n1 n2 text) (b a name) (z z-0 node))
+    (implies
+      (and (p "init" 0 z) (p "init" 2 z-0)
+        (p "init" "n1" z-0 n1) (p "init" "n2" z-0 n2)
+        (p "init" "a" z-0 a) (p "init" "b" z-0 b)
+        (str-prec z z-0) (non (privk b)) (uniq-at n1 z))
+      (exists ((n2-0 text) (z-1 z-2 z-3 node))
+        (and (p "init" 1 z-1) (p "resp" 0 z-2)
+          (p "resp" 1 z-3) (p "resp" "n2" z-3 n2-0)
+          (p "resp" "n1" z-3 n1) (p "resp" "b" z-3 b)
+          (p "resp" "a" z-3 a) (prec z z-2) (prec z-3 z-1)
+          (str-prec z z-1) (str-prec z-1 z-0)
+          (str-prec z-2 z-3)))))
+  (comment "Shape analysis sentence"))
+
+;;; Section 2 --- Additional Examples
+
+(defgoal ns
+  (forall ((a b name) (n2 text) (z0 z1 node))
+    (implies
+     (and
+      (p "resp" 2 z0) (p "resp" "n2" z0 n2)
+      (p "resp" "a" z0 a) (p "resp" "b" z0 b)
+      (p "" 0 z1) (p "" "x" z1 n2)
+      (non (privk a)) (non (privk b)) (uniq n2))
+     (false)))
+  (comment "Responder point of view")
+  (comment "Failed secrecy goal: nonce n2 not revealed"))
+
+;;; Double initiator point of view
+(defskeleton ns
+  (vars (a b name) (n1 n1-0 text))
+  (defstrand init 3 (a a) (b b) (n1 n1))
+  (defstrand init 3 (a a) (b b) (n1 n1-0))
+  (non-orig (privk b) (privk a))
+  (uniq-orig n1 n1-0)
+  (goals
+   (forall ((n1 n1-0 n2 n2-0 text) (a b name) (z z-0 z-1 z-2 node))
+    (implies
+     (and
+      (p "init" 0 z) (p "init" 2 z-0) (p "init" 0 z-1)
+      (p "init" 2 z-2) (p "init" "n1" z-0 n1) (p "init" "n2" z-0 n2)
+      (p "init" "a" z-0 a) (p "init" "b" z-0 b)
+      (p "init" "n1" z-2 n1-0) (p "init" "n2" z-2 n2-0)
+      (p "init" "a" z-2 a) (p "init" "b" z-2 b) (str-prec z z-0)
+      (str-prec z-1 z-2) (non (privk a)) (non (privk b))
+      (uniq-at n1 z) (uniq-at n1-0 z-1))
+     (= z-1 z))))
+  (comment "Double initiator point of view"))
+
+(defprotocol nsl-typeless basic
+  (defrole init
+    (vars (a b name) (n1 text) (n2 mesg))
+    (trace
+     (send (enc a n1 (pubk b)))
+     (recv (enc n1 n2 b (pubk a)))
+     (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 text) (n1 mesg))
+    (trace
+     (recv (enc a n1 (pubk b)))
+     (send (enc n1 n2 b (pubk a)))
+     (recv (enc n2 (pubk b)))))
+  (comment "Needham-Schroeder-Lowe with untyped nonces"))
+
+;;; The responder point of view
+(defgoal nsl-typeless
+  (forall ((n2 text) (a b name) (z z-0 node))
+    (implies
+      (and (p "resp" 1 z) (p "" 0 z-0)
+        (p "resp" "n2" z n2) (p "resp" "b" z b) (p "resp" "a" z a)
+        (p "" "x" z-0 n2) (non (privk a)) (non (privk b)) (uniq n2))
+      (false)))
+  (comment "Shows typeflaw in typeless NSL"))
+
+(defskeleton ns
+  (vars (a name) (n2 text))
+  (defstrand resp 3 (a a) (n2 n2))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (goals
+   (forall ((n1 n2 text) (a b name) (z z-0 node))
+    (implies
+      (and (p "init" 0 z) (p "init" 2 z-0)
+        (p "init" "n1" z-0 n1) (p "init" "n2" z-0 n2)
+        (p "init" "a" z-0 a) (p "init" "b" z-0 b)
+        (str-prec z z-0) (non (privk a)) (non (privk b))
+        (uniq-at n1 z))
+      (exists ((z-1 z-2 z-3 node))
+        (and (p "init" 1 z-1) (p "resp" 0 z-2)
+          (p "resp" 1 z-3) (p "resp" "n2" z-3 n2)
+          (p "resp" "n1" z-3 n1) (p "resp" "b" z-3 b)
+          (p "resp" "a" z-3 a) (prec z z-2) (prec z-3 z-1)
+          (str-prec z z-1) (str-prec z-1 z-0)
+          (str-prec z-2 z-3))))))
+  (comment "Responder point of view with SAS"))
+
+(defskeleton ns
+  (vars (a name) (n2 text))
+  (defstrand resp 3 (a a) (n2 n2))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (goals
+   (forall ((n1 n2 text) (a b name) (z z-0 node))
+    (implies
+      (and (p "init" 0 z) (p "init" 2 z-0)
+        (p "init" "n1" z-0 n1) (p "init" "n2" z-0 n2)
+        (p "init" "a" z-0 a) (p "init" "b" z-0 b)
+        (str-prec z z-0) (non (privk a)) (non (privk b))
+        (uniq-at n1 z))
+      (false))))
+  (comment "Responder point of view with false as the conclusion"))
+
+(defskeleton ns
+  (vars (a b name) (n1 text))
+  (defstrand init 3 (a a) (b b) (n1 n1))
+  (non-orig (privk b) (privk a))
+  (uniq-orig n1)
+  (goals
+   (forall ((n1 n2 text) (a b name) (z z-0 node))
+    (implies
+      (and (p "init" 0 z) (p "init" 2 z-0)
+        (p "init" "n1" z-0 n1) (p "init" "n2" z-0 n2)
+        (p "init" "a" z-0 a) (p "init" "b" z-0 b)
+        (str-prec z z-0) (non (privk a)) (non (privk b))
+        (uniq-at n1 z))
+      (false))))
+  (comment "Initiator point of view with false as the conclusion"))
+
+(defgoal ns
+  (forall ((a b name) (n text) (z0 node))
+   (implies
+    (and
+     (p "resp" 2 z0) (p "resp" "n2" z0 n)
+     (p "resp" "a" z0 a) (p "resp" "b" z0 b)
+     (non (privk a)) (non (privk b)) (uniq n))
+    (exists ((z1 node))
+     (and (p "init" 2 z1) (p "init" "a" z1 a)))))
+  (forall ((a b name) (n text) (z0 node))
+   (implies
+    (and
+     (p "resp" 2 z0) (p "resp" "n2" z0 n)
+     (p "resp" "a" z0 a) (p "resp" "b" z0 b)
+     (non (privk a)) (non (privk b)) (uniq n))
+    (exists ((z1 node))
+     (and (p "init" 2 z1) (p "init" "b" z1 b)))))
+  (comment "Two responder authentication goals"))
+
+;;; Needham-Schroeder Protocol with origination assumptions on roles
+
+(defprotocol ns-role-origs basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace
+     (send (enc n1 a (pubk b)))
+     (recv (enc n1 n2 (pubk a)))
+     (send (enc n2 (pubk b))))
+    (non-orig (privk b))
+    (uniq-orig n1))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace
+     (recv (enc n1 a (pubk b)))
+     (send (enc n1 n2 (pubk a)))
+     (recv (enc n2 (pubk b))))
+    (non-orig (privk a))
+    (uniq-orig n2))
+  (comment "Needham-Schroeder with role assumptions that are too strong"))
+
+;;; The initiator point of view
+(defskeleton ns-role-origs
+  (vars)
+  (defstrand init 3))
+
+;;; The responder point of view
+(defskeleton ns-role-origs
+  (vars)
+  (defstrand resp 3))
+
+;;; Needham-Schroeder Protocol with a doubled nonce.  Look at the
+;;; first message in each role.
+
+(defprotocol ns2 basic
+  (defrole init
+    (vars (a b name) (n1 n2 n3 text))
+    (trace
+     (send (enc n1 n3 a (pubk b)))
+     (recv (enc n1 n2 (pubk a)))
+     (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace
+     (recv (enc n1 n1 a (pubk b)))
+     (send (enc n1 n2 (pubk a)))
+     (recv (enc n2 (pubk b))))
+    (note doubled nonce in the first message))
+  (note that this protocol is derived from Needham-Schroeder))
+
+(defskeleton ns2
+  (vars (a b name) (n1 text))
+  (defstrand init 3 (a a) (b b) (n1 n1))
+  (non-orig (privk b) (privk a))
+  (uniq-orig n1)
+  (note the disappearance of this note))
+
+;;; Note that the association list style key-value pairs that follow
+;;; the list of strands can be supplied in any order, and values with
+;;; the same key are appended together.  Check the output to see how
+;;; CPSA interprets this input.
+(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
+  (non-orig (privk b))
+  (precedes ((0 0) (1 0)))
+  (non-orig (privk a))
+  (uniq-orig n1)
+  (precedes ((1 1) (0 1))))
diff --git a/doc/examples/goals.xhtml b/doc/examples/goals.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/goals.xhtml
@@ -0,0 +1,4959 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>goals</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald goals)
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from goals.scm&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t2">2</a> <a href="#t4">4</a> <a href="#t6">6</a> <a href="#t8">8</a> <a href="#t17">17</a> <a href="#t19">19</a> <a href="#t21">21</a> <a href="#t23">23</a> <a href="#t26">26</a> <a href="#t28">28</a> <a href="#t33">33</a> <a href="#t41">41</a> <a href="#t45">45</a> <a href="#t47">47</a> <a href="#t49">49</a> <a href="#t52">52</a> <a href="#t54">54</a> <a href="#t57">57</a> <a href="#t62">62</a> <a href="#t65">65</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Child: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 0</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (b a name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (non-orig (privk b))
+  (uniq-orig n1)
+  (goals
+    (forall ((b name) (n1 text) (z0 node))
+      (implies
+        (and (p &quot;init&quot; 2 z0) (p &quot;init&quot; &quot;n1&quot; z0 n1) (p &quot;init&quot; &quot;b&quot; z0 b)
+          (non (privk b)) (uniq n1))
+        (exists ((z1 node))
+          (and (p &quot;resp&quot; 1 z1) (p &quot;resp&quot; &quot;b&quot; z1 b))))))
+  (comment &quot;Initiator point of view&quot;
+    &quot;Authentication goal: agreement on name b&quot;)
+  (label 0)
+  (unrealized (0 1))
+  (origs (n1 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 1 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 n2-0 text) (b a name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (added-strand resp 2) n1 (0 1)
+    (enc n1 a (pubk b)))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps ((0) ((b b) (n1 n1) (a a) (n2 n2))))
+  (origs (n1 (0 0))))</pre>
+
+<p id="t2">Tree <a href="#top">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k2">Item <a href="#t2">2</a>, Child: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 2</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (b a name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (non-orig (privk b))
+  (uniq-orig n1)
+  (goals
+    (forall ((b name) (n1 text) (z0 node))
+      (implies
+        (and (p &quot;init&quot; 2 z0) (p &quot;init&quot; &quot;n1&quot; z0 n1) (p &quot;init&quot; &quot;b&quot; z0 b)
+          (non (privk b)) (uniq n1))
+        (exists ((z1 node))
+          (and (p &quot;resp&quot; 1 z1) (p &quot;resp&quot; &quot;b&quot; z1 b) (prec z1 z0))))))
+  (comment &quot;Prec example&quot;)
+  (label 2)
+  (unrealized (0 1))
+  (origs (n1 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k3">Item <a href="#t2">3</a>, Parent: <a href="#k2">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 3 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 n2-0 text) (b a name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (added-strand resp 2) n1 (0 1)
+    (enc n1 a (pubk b)))
+  (label 3)
+  (parent 2)
+  (unrealized)
+  (shape)
+  (satisfies (no (b b) (n1 n1) (z0 (0 2))))
+  (maps ((0) ((b b) (n1 n1) (a a) (n2 n2))))
+  (origs (n1 (0 0))))</pre>
+
+<p id="t4">Tree <a href="#top">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k4">Item <a href="#t4">4</a>, Child: <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 4</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (goals
+    (forall ((a b name) (n2 text) (z0 node))
+      (implies
+        (and (p &quot;resp&quot; 2 z0) (p &quot;resp&quot; &quot;n2&quot; z0 n2) (p &quot;resp&quot; &quot;a&quot; z0 a)
+          (p &quot;resp&quot; &quot;b&quot; z0 b) (non (privk a)) (uniq n2))
+        (exists ((z1 node))
+          (and (p &quot;init&quot; 1 z1) (p &quot;init&quot; &quot;b&quot; z1 b))))))
+  (comment &quot;Responder point of view&quot;
+    &quot;Failed authentication goal: agreement on name b&quot;)
+  (label 4)
+  (unrealized (0 2))
+  (origs (n2 (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k5">Item <a href="#t4">5</a>, Parent: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b-0))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 5 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b b-0 name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand init 3) n2 (0 2)
+    (enc n1 n2 (pubk a)))
+  (label 5)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (satisfies (no (a a) (b b) (n2 n2) (z0 (0 2))))
+  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
+  (origs (n2 (0 1))))</pre>
+
+<p id="t6">Tree <a href="#top">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k7&quot;, &quot;_self&quot;)'>7</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k6&quot;, &quot;_self&quot;)'>6</text>
+  </svg></div>
+
+<pre>(defprotocol nsl basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 b (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 b (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment
+    &quot;Needham-Schroeder-Lowe with no role origination assumptions&quot;))</pre>
+
+<p id="k6">Item <a href="#t6">6</a>, Child: <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 b (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>nsl 6</text>
+  </svg></div>
+
+<pre>(defskeleton nsl
+  (vars (n2 n1 text) (a b name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (goals
+    (forall ((a b name) (n2 text) (z0 node))
+      (implies
+        (and (p &quot;resp&quot; 2 z0) (p &quot;resp&quot; &quot;n2&quot; z0 n2) (p &quot;resp&quot; &quot;a&quot; z0 a)
+          (p &quot;resp&quot; &quot;b&quot; z0 b) (non (privk a)) (uniq n2))
+        (exists ((z1 node))
+          (and (p &quot;init&quot; 1 z1) (p &quot;init&quot; &quot;b&quot; z1 b))))))
+  (comment &quot;Responder point of view&quot;
+    &quot;Authentication goal: agreement on name b&quot;)
+  (label 6)
+  (unrealized (0 2))
+  (origs (n2 (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k7">Item <a href="#t6">7</a>, Parent: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 b (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 b (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>nsl 7 (realized)</text></svg></div>
+
+<pre>(defskeleton nsl
+  (vars (n2 n1 text) (a b name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand init 3) n2 (0 2)
+    (enc n1 n2 b (pubk a)))
+  (label 7)
+  (parent 6)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
+  (origs (n2 (0 1))))</pre>
+
+<p id="t8">Tree <a href="#top">8</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.440pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.440 229.920' font-size='12.000'>
+  <text
+   x='289.560' y='176.040'
+   style='font-style: italic; text-anchor: middle; fill: orange;'
+   onclick='window.open(&quot;#k15&quot;, &quot;_self&quot;)'>15</text>
+  <line
+   x1='239.640' y1='189.960' x2='289.560' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='176.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k13&quot;, &quot;_self&quot;)'>13</text>
+  <line
+   x1='189.720' y1='114.960' x2='239.640' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='101.040'
+   style='font-style: italic; text-anchor: middle; fill: orange;'
+   onclick='window.open(&quot;#k16&quot;, &quot;_self&quot;)'>16</text>
+  <line
+   x1='289.560' y1='114.960' x2='339.480' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k15&quot;, &quot;_self&quot;)'>15</text>
+  <line
+   x1='239.640' y1='77.460' x2='289.560' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k16&quot;, &quot;_self&quot;)'>16</text>
+  <line
+   x1='289.560' y1='39.960' x2='339.480' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k14&quot;, &quot;_self&quot;)'>14</text>
+  <line
+   x1='239.640' y1='77.460' x2='289.560' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='63.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k12&quot;, &quot;_self&quot;)'>12</text>
+  <line
+   x1='189.720' y1='114.960' x2='239.640' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k11&quot;, &quot;_self&quot;)'>11</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k10&quot;, &quot;_self&quot;)'>10</text>
+  <line
+   x1='89.880' y1='114.960' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k9&quot;, &quot;_self&quot;)'>9</text>
+  <line
+   x1='39.960' y1='114.960' x2='89.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k8">Item <a href="#t8">8</a>, Child: <a href="#k9">9</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n1</title><circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>n1</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>ns 8</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (deflistener n1)
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (goals
+    (forall ((a b name) (n1 text) (z0 z1 node))
+      (implies
+        (and (p &quot;init&quot; 2 z0) (p &quot;init&quot; &quot;n1&quot; z0 n1) (p &quot;init&quot; &quot;a&quot; z0 a)
+          (p &quot;init&quot; &quot;b&quot; z0 b) (p &quot;&quot; 0 z1) (p &quot;&quot; &quot;x&quot; z1 n1)
+          (non (privk a)) (non (privk b)) (uniq n1)) (false))))
+  (comment &quot;Initiator point of view&quot;
+    &quot;Secrecy goal: nonce n1 not revealed&quot;)
+  (label 8)
+  (unrealized (0 0) (1 1))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k9">Item <a href="#t8">9</a>, Parent: <a href="#k8">8</a>, Child: <a href="#k10">10</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n1</title><circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>n1</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>ns 9</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (deflistener n1)
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (precedes ((1 0) (0 0)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (label 9)
+  (parent 8)
+  (unrealized (0 0) (1 1))
+  (origs (n1 (1 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k10">Item <a href="#t8">10</a>, Parent: <a href="#k9">9</a>, Child: <a href="#k11">11</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n1</title><circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>n1</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='139.920' y='39.960' style='text-anchor: middle;'>ns 10</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 n2-0 text) (a b name))
+  (deflistener n1)
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((1 0) (0 0)) ((1 0) (2 0)) ((2 1) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (added-strand resp 2) n1 (1 1)
+    (enc n1 a (pubk b)))
+  (label 10)
+  (parent 9)
+  (unrealized (0 0) (1 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k11">Item <a href="#t8">11</a>, Parent: <a href="#k10">10</a>, Children: <a href="#k12">12</a> <a href="#k13">13</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n1</title><circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>n1</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='139.920' y='39.960' style='text-anchor: middle;'>ns 11</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (deflistener n1)
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
+  (precedes ((1 0) (0 0)) ((1 0) (2 0)) ((2 1) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (contracted (n2-0 n2)) n1 (1 1)
+    (enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
+  (label 11)
+  (parent 10)
+  (unrealized (0 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k12">Item <a href="#t8">12</a>, Parent: <a href="#k11">11</a>, Children: <a href="#k14">14</a> <a href="#k15">15</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n1</title><circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>n1</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='139.920' y='39.960' style='text-anchor: middle;'>ns 12</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (deflistener n1)
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
+  (precedes ((1 0) (2 0)) ((2 1) (0 0)) ((2 1) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (displaced 3 2 resp 2) n1 (0 0)
+    (enc n1 a (pubk b)))
+  (label 12)
+  (parent 11)
+  (unrealized (0 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k13">Item <a href="#t8">13</a>, Parent: <a href="#k11">11</a>, Seen Child: <a href="#k15">15</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 192.900 152.460 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 114.960 Q 236.880 77.460 333.840 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n1</title><circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>n1</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='189.900' y='39.960' style='text-anchor: middle;'>ns 13</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 n2-0 text) (a b name))
+  (deflistener n1)
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((1 0) (2 0)) ((1 0) (3 0)) ((2 1) (1 1)) ((3 1) (0 0)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (added-strand resp 2) n1 (0 0)
+    (enc n1 a (pubk b)))
+  (label 13)
+  (parent 11)
+  (seen 15)
+  (unrealized (0 0))
+  (comment &quot;1 in cohort - 0 not yet seen&quot;))</pre>
+
+<p id="k14">Item <a href="#t8">14</a>, Parent: <a href="#k12">12</a>, Child: <a href="#k16">16</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='264.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 n2 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n2 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n2 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n2</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n2) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n2) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='139.920' y='39.960' style='text-anchor: middle;'>ns 14</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 text) (a b name))
+  (deflistener n2)
+  (defstrand init 3 (n1 n2) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n2) (b b) (a a))
+  (precedes ((1 0) (2 0)) ((1 2) (0 0)) ((2 1) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (operation nonce-test (displaced 3 1 init 3) n2 (0 0)
+    (enc n2 n2 (pubk a)) (enc n2 a (pubk b)))
+  (label 14)
+  (parent 12)
+  (unrealized (0 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k15">Item <a href="#t8">15</a>, Parent: <a href="#k12">12</a>, Seen Child: <a href="#k16">16</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 192.900 152.460 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 114.960 Q 236.880 77.460 333.840 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n1</title><circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>n1</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='189.900' y='39.960' style='text-anchor: middle;'>ns 15</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 n2-0 text) (a b name))
+  (deflistener n1)
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((1 0) (2 0)) ((1 0) (3 0)) ((2 1) (0 0)) ((2 1) (1 1))
+    ((3 1) (0 0)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (added-strand resp 2) n1 (0 0)
+    (enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
+  (label 15)
+  (parent 12)
+  (seen 16)
+  (unrealized (0 0))
+  (comment &quot;1 in cohort - 0 not yet seen&quot;))</pre>
+
+<p id="k16">Item <a href="#t8">16</a>, Parent: <a href="#k14">14</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='264.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 192.810 189.232 45.781 263.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 n2-0 (pubk a))</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n2 a (pubk b))</title>
+   <circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 n2 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n2 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n2 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 114.960 Q 236.880 77.460 333.840 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n2</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n2) (b b) (a a))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n2 n2) (n1 n2) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n2) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='189.900' y='39.960' style='text-anchor: middle;'>ns 16</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n2-0 text) (a b name))
+  (deflistener n2)
+  (defstrand init 3 (n1 n2) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n2) (b b) (a a))
+  (defstrand resp 2 (n2 n2-0) (n1 n2) (b b) (a a))
+  (precedes ((1 0) (2 0)) ((1 0) (3 0)) ((1 2) (0 0)) ((2 1) (1 1))
+    ((3 1) (0 0)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand resp 2) n2 (0 0) (enc n2 (pubk b))
+    (enc n2 n2 (pubk a)) (enc n2 a (pubk b)))
+  (label 16)
+  (parent 14)
+  (unrealized (0 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t17">Tree <a href="#top">17</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k18&quot;, &quot;_self&quot;)'>18</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k17&quot;, &quot;_self&quot;)'>17</text>
+  </svg></div>
+
+<pre>(defprotocol unilateral basic
+  (defrole init
+    (vars (a name) (n text))
+    (trace (send (enc n (pubk a))) (recv n)))
+  (defrole resp
+    (vars (a name) (n text))
+    (trace (recv (enc n (pubk a))) (send n)))
+  (comment &quot;Unilateral authentication&quot;))</pre>
+
+<p id="k17">Item <a href="#t17">17</a>, Child: <a href="#k18">18</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n (pubk a))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>unilateral 17</text></svg></div>
+
+<pre>(defskeleton unilateral
+  (vars (n text) (a name))
+  (defstrand init 2 (n n) (a a))
+  (non-orig (privk a))
+  (uniq-orig n)
+  (goals
+    (forall ((a name) (n text) (z0 node))
+      (implies
+        (and (p &quot;init&quot; 1 z0) (p &quot;init&quot; &quot;n&quot; z0 n) (p &quot;init&quot; &quot;a&quot; z0 a)
+          (non (privk a)) (uniq n))
+        (exists ((z1 node))
+          (and (p &quot;resp&quot; 1 z1) (p &quot;resp&quot; &quot;a&quot; z1 a))))))
+  (comment &quot;Unilateral authentication goal&quot;)
+  (label 17)
+  (unrealized (0 1))
+  (origs (n (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k18">Item <a href="#t17">18</a>, Parent: <a href="#k17">17</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>n</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n (pubk a))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n n) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>unilateral 18 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton unilateral
+  (vars (n text) (a name))
+  (defstrand init 2 (n n) (a a))
+  (defstrand resp 2 (n n) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a))
+  (uniq-orig n)
+  (operation nonce-test (added-strand resp 2) n (0 1) (enc n (pubk a)))
+  (label 18)
+  (parent 17)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps ((0) ((a a) (n n))))
+  (origs (n (0 0))))</pre>
+
+<p id="t19">Tree <a href="#top">19</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k20&quot;, &quot;_self&quot;)'>20</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k19&quot;, &quot;_self&quot;)'>19</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k19">Item <a href="#t19">19</a>, Child: <a href="#k20">20</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n n2 (pubk a-0))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n a-0 (pubk a))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n) (n2 n2) (a a-0) (b a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 19</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n n2 text) (a a-0 name))
+  (defstrand init 2 (n1 n) (n2 n2) (a a-0) (b a))
+  (non-orig (privk a))
+  (uniq-orig n)
+  (goals
+    (forall ((a name) (n text) (z0 node))
+      (implies
+        (and (p &quot;init&quot; 1 z0) (p &quot;init&quot; &quot;n1&quot; z0 n) (p &quot;init&quot; &quot;b&quot; z0 a)
+          (non (privk a)) (uniq n))
+        (exists ((z1 node))
+          (and (p &quot;resp&quot; 1 z1) (p &quot;resp&quot; &quot;b&quot; z1 a))))))
+  (comment &quot;Initiator authentication goal&quot;
+    &quot;Same as unilateral goal under the predicate mapping:&quot;
+    (p &quot;init&quot; &quot;n&quot;) &quot;-&gt;&quot; (p &quot;init&quot; &quot;n1&quot;) &quot;and&quot; (p &quot;init&quot; &quot;a&quot;) &quot;-&gt;&quot;
+    (p &quot;init&quot; &quot;b&quot;) &quot;and&quot; (p &quot;resp&quot; &quot;a&quot;) &quot;-&gt;&quot; (p &quot;resp&quot; &quot;b&quot;))
+  (label 19)
+  (unrealized (0 1))
+  (origs (n (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k20">Item <a href="#t19">20</a>, Parent: <a href="#k19">19</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n n2-0 (pubk a-0))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n a-0 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n n2 (pubk a-0))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n a-0 (pubk a))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n) (b a) (a a-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n) (n2 n2) (a a-0) (b a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 20 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n n2 n2-0 text) (a a-0 name))
+  (defstrand init 2 (n1 n) (n2 n2) (a a-0) (b a))
+  (defstrand resp 2 (n2 n2-0) (n1 n) (b a) (a a-0))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a))
+  (uniq-orig n)
+  (operation nonce-test (added-strand resp 2) n (0 1)
+    (enc n a-0 (pubk a)))
+  (label 20)
+  (parent 19)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps ((0) ((a a) (n n) (a-0 a-0) (n2 n2))))
+  (origs (n (0 0))))</pre>
+
+<p id="t21">Tree <a href="#top">21</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k22&quot;, &quot;_self&quot;)'>22</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k21&quot;, &quot;_self&quot;)'>21</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k21">Item <a href="#t21">21</a>, Child: <a href="#k22">22</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 21</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n n1 text) (a b name))
+  (defstrand resp 3 (n2 n) (n1 n1) (b b) (a a))
+  (non-orig (privk a))
+  (uniq-orig n)
+  (goals
+    (forall ((a name) (n text) (z0 node))
+      (implies
+        (and (p &quot;resp&quot; 2 z0) (p &quot;resp&quot; &quot;n2&quot; z0 n) (p &quot;resp&quot; &quot;a&quot; z0 a)
+          (non (privk a)) (uniq n))
+        (exists ((z1 node))
+          (and (p &quot;init&quot; 2 z1) (p &quot;init&quot; &quot;a&quot; z1 a))))))
+  (comment &quot;Responder authentication goal&quot;
+    &quot;Same as unilateral goal under the predicate mapping:&quot; (p &quot;init&quot; 1)
+    &quot;-&gt;&quot; (p &quot;resp&quot; 2) &quot;and&quot; (p &quot;init&quot; &quot;n&quot;) &quot;-&gt;&quot; (p &quot;resp&quot; &quot;n2&quot;) &quot;and&quot;
+    (p &quot;init&quot; &quot;a&quot;) &quot;-&gt;&quot; (p &quot;resp&quot; &quot;a&quot;) &quot;and&quot; (p &quot;resp&quot; 1) &quot;-&gt;&quot;
+    (p &quot;init&quot; 2) &quot;and&quot; (p &quot;resp&quot; &quot;a&quot;) &quot;-&gt;&quot; (p &quot;init&quot; &quot;a&quot;))
+  (label 21)
+  (unrealized (0 2))
+  (origs (n (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k22">Item <a href="#t21">22</a>, Parent: <a href="#k21">21</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n (pubk b-0))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n) (a a) (b b-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 22 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n n1 text) (a b b-0 name))
+  (defstrand resp 3 (n2 n) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n) (a a) (b b-0))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (privk a))
+  (uniq-orig n)
+  (operation nonce-test (added-strand init 3) n (0 2)
+    (enc n1 n (pubk a)))
+  (label 22)
+  (parent 21)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps ((0) ((a a) (n n) (b b) (n1 n1))))
+  (origs (n (0 1))))</pre>
+
+<p id="t23">Tree <a href="#top">23</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 79.920' font-size='12.000'>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k25&quot;, &quot;_self&quot;)'>25</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k24&quot;, &quot;_self&quot;)'>24</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k23&quot;, &quot;_self&quot;)'>23</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k23">Item <a href="#t23">23</a>, Child: <a href="#k24">24</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 23</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n n2 text) (a b name))
+  (defstrand init 2 (n1 n) (n2 n2) (a a) (b b))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n)
+  (goals
+    (forall ((a b name) (n text) (z0 node))
+      (implies
+        (and (p &quot;init&quot; 1 z0) (p &quot;init&quot; &quot;n1&quot; z0 n) (p &quot;init&quot; &quot;a&quot; z0 a)
+          (p &quot;init&quot; &quot;b&quot; z0 b) (non (privk a)) (non (privk b)) (uniq n))
+        (exists ((z1 node)) (and (p &quot;resp&quot; 1 z1) (p &quot;resp&quot; &quot;b&quot; z1 b)))))
+    (forall ((a b name) (n text) (z0 node))
+      (implies
+        (and (p &quot;init&quot; 1 z0) (p &quot;init&quot; &quot;n1&quot; z0 n) (p &quot;init&quot; &quot;a&quot; z0 a)
+          (p &quot;init&quot; &quot;b&quot; z0 b) (non (privk a)) (non (privk b)) (uniq n))
+        (exists ((z1 node))
+          (and (p &quot;resp&quot; 1 z1) (p &quot;resp&quot; &quot;a&quot; z1 a))))))
+  (comment &quot;Two initiator authentication goals&quot;)
+  (label 23)
+  (unrealized (0 1))
+  (origs (n (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k24">Item <a href="#t23">24</a>, Parent: <a href="#k23">23</a>, Child: <a href="#k25">25</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n n2-0 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>ns 24</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n n2 n2-0 text) (a b name))
+  (defstrand init 2 (n1 n) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n)
+  (operation nonce-test (added-strand resp 2) n (0 1)
+    (enc n a (pubk b)))
+  (label 24)
+  (parent 23)
+  (unrealized (0 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k25">Item <a href="#t23">25</a>, Parent: <a href="#k24">24</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 25 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n n2 text) (a b name))
+  (defstrand init 2 (n1 n) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n)
+  (operation nonce-test (contracted (n2-0 n2)) n (0 1)
+    (enc n n2 (pubk a)) (enc n a (pubk b)))
+  (label 25)
+  (parent 24)
+  (unrealized)
+  (shape)
+  (satisfies yes yes)
+  (maps ((0) ((a a) (b b) (n n) (n2 n2))))
+  (origs (n (0 0))))</pre>
+
+<p id="t26">Tree <a href="#top">26</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k27&quot;, &quot;_self&quot;)'>27</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k26&quot;, &quot;_self&quot;)'>26</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k26">Item <a href="#t26">26</a>, Child: <a href="#k27">27</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 26</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (b a name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (non-orig (privk b))
+  (uniq-orig n1)
+  (goals
+    (forall ((n1 n2 text) (b a name) (z z-0 node))
+      (implies
+        (and (p &quot;init&quot; 0 z) (p &quot;init&quot; 2 z-0) (p &quot;init&quot; &quot;n1&quot; z-0 n1)
+          (p &quot;init&quot; &quot;n2&quot; z-0 n2) (p &quot;init&quot; &quot;a&quot; z-0 a)
+          (p &quot;init&quot; &quot;b&quot; z-0 b) (str-prec z z-0) (non (privk b))
+          (uniq-at n1 z))
+        (exists ((n2-0 text) (z-1 z-2 z-3 node))
+          (and (p &quot;init&quot; 1 z-1) (p &quot;resp&quot; 0 z-2) (p &quot;resp&quot; 1 z-3)
+            (p &quot;resp&quot; &quot;n2&quot; z-3 n2-0) (p &quot;resp&quot; &quot;n1&quot; z-3 n1)
+            (p &quot;resp&quot; &quot;b&quot; z-3 b) (p &quot;resp&quot; &quot;a&quot; z-3 a) (prec z z-2)
+            (prec z-3 z-1) (str-prec z z-1) (str-prec z-1 z-0)
+            (str-prec z-2 z-3))))))
+  (comment &quot;Shape analysis sentence&quot;)
+  (label 26)
+  (unrealized (0 1))
+  (origs (n1 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k27">Item <a href="#t26">27</a>, Parent: <a href="#k26">26</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 27 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 n2-0 text) (b a name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (added-strand resp 2) n1 (0 1)
+    (enc n1 a (pubk b)))
+  (label 27)
+  (parent 26)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps ((0) ((n1 n1) (n2 n2) (b b) (a a))))
+  (origs (n1 (0 0))))</pre>
+
+<p id="t28">Tree <a href="#top">28</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='229.680pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 229.680 154.920' font-size='12.000'>
+  <text
+   x='189.720' y='101.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k32&quot;, &quot;_self&quot;)'>32</text>
+  <line
+   x1='139.800' y1='77.460' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k31&quot;, &quot;_self&quot;)'>31</text>
+  <line
+   x1='139.800' y1='77.460' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k30&quot;, &quot;_self&quot;)'>30</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k29&quot;, &quot;_self&quot;)'>29</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k28&quot;, &quot;_self&quot;)'>28</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k28">Item <a href="#t28">28</a>, Child: <a href="#k29">29</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: red;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n2</title><circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>ns 28</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b name))
+  (deflistener n2)
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (goals
+    (forall ((a b name) (n2 text) (z0 z1 node))
+      (implies
+        (and (p &quot;resp&quot; 2 z0) (p &quot;resp&quot; &quot;n2&quot; z0 n2) (p &quot;resp&quot; &quot;a&quot; z0 a)
+          (p &quot;resp&quot; &quot;b&quot; z0 b) (p &quot;&quot; 0 z1) (p &quot;&quot; &quot;x&quot; z1 n2)
+          (non (privk a)) (non (privk b)) (uniq n2)) (false))))
+  (comment &quot;Responder point of view&quot;
+    &quot;Failed secrecy goal: nonce n2 not revealed&quot;)
+  (label 28)
+  (unrealized (0 0) (1 2))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k29">Item <a href="#t28">29</a>, Parent: <a href="#k28">28</a>, Child: <a href="#k30">30</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: red;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n2</title><circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>ns 29</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b name))
+  (deflistener n2)
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (precedes ((1 1) (0 0)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (label 29)
+  (parent 28)
+  (unrealized (0 0) (1 2))
+  (origs (n2 (1 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k30">Item <a href="#t28">30</a>, Parent: <a href="#k29">29</a>, Children: <a href="#k31">31</a> <a href="#k32">32</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b-0))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 189.960 Q 186.900 189.960 233.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n2</title><circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b-0))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='139.920' y='39.960' style='text-anchor: middle;'>ns 30</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b b-0 name))
+  (deflistener n2)
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
+  (precedes ((1 1) (0 0)) ((1 1) (2 1)) ((2 2) (1 2)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand init 3) n2 (1 2)
+    (enc n1 n2 (pubk a)))
+  (label 30)
+  (parent 29)
+  (unrealized (0 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k31">Item <a href="#t28">31</a>, Parent: <a href="#k30">30</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='264.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b-0))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 186.900 189.960 233.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n2</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>n2</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b-0))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>ns 31 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b b-0 name))
+  (deflistener n2)
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
+  (precedes ((1 1) (2 1)) ((2 2) (0 0)) ((2 2) (1 2)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (operation nonce-test (displaced 3 2 init 3) n2 (0 0)
+    (enc n1 n2 (pubk a)))
+  (label 31)
+  (parent 30)
+  (unrealized)
+  (shape)
+  (satisfies (no (a a) (b b) (n2 n2) (z0 (1 2)) (z1 (0 0))))
+  (maps ((0 1) ((a a) (b b) (n2 n2) (n1 n1))))
+  (origs (n2 (1 1))))</pre>
+
+<p id="k32">Item <a href="#t28">32</a>, Parent: <a href="#k30">30</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='264.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 264.960 Q 192.900 227.460 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b-1))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b-1))</title>
+   <circle cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b-0))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 186.900 189.960 233.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 189.960 Q 236.880 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n2</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>n2</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b-1))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b-0))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>ns 32 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b b-0 b-1 name))
+  (deflistener n2)
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-1))
+  (precedes ((1 1) (2 1)) ((1 1) (3 1)) ((2 2) (1 2)) ((3 2) (0 0)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand init 3) n2 (0 0)
+    (enc n1 n2 (pubk a)))
+  (label 32)
+  (parent 30)
+  (unrealized)
+  (shape)
+  (satisfies (no (a a) (b b) (n2 n2) (z0 (1 2)) (z1 (0 0))))
+  (maps ((0 1) ((a a) (b b) (n2 n2) (n1 n1))))
+  (origs (n2 (1 1))))</pre>
+
+<p id="t33">Tree <a href="#top">33</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.600pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.600 154.920' font-size='12.000'>
+  <text
+   x='239.640' y='101.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k40&quot;, &quot;_self&quot;)'>40</text>
+  <line
+   x1='189.720' y1='114.960' x2='239.640' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k39&quot;, &quot;_self&quot;)'>39</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k37&quot;, &quot;_self&quot;)'>37</text>
+  <line
+   x1='89.880' y1='114.960' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k35&quot;, &quot;_self&quot;)'>35</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k38&quot;, &quot;_self&quot;)'>38</text>
+  <line
+   x1='139.800' y1='39.960' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k36&quot;, &quot;_self&quot;)'>36</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k34&quot;, &quot;_self&quot;)'>34</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k33&quot;, &quot;_self&quot;)'>33</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k33">Item <a href="#t33">33</a>, Children: <a href="#k34">34</a> <a href="#k35">35</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2-0 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1-0 n2-0 (pubk a))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1-0 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1-0) (n2 n2-0) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>ns 33</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n1-0 n2 n2-0 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand init 3 (n1 n1-0) (n2 n2-0) (a a) (b b))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1 n1-0)
+  (subgoals
+    (forall ((n1 n1-0 n2 n2-0 text) (a b name) (z z-0 z-1 z-2 node))
+      (implies
+        (and (p &quot;init&quot; 0 z) (p &quot;init&quot; 2 z-0) (p &quot;init&quot; 0 z-1)
+          (p &quot;init&quot; 2 z-2) (p &quot;init&quot; &quot;n1&quot; z-0 n1) (p &quot;init&quot; &quot;n2&quot; z-0 n2)
+          (p &quot;init&quot; &quot;a&quot; z-0 a) (p &quot;init&quot; &quot;b&quot; z-0 b)
+          (p &quot;init&quot; &quot;n1&quot; z-2 n1-0) (p &quot;init&quot; &quot;n2&quot; z-2 n2-0)
+          (p &quot;init&quot; &quot;a&quot; z-2 a) (p &quot;init&quot; &quot;b&quot; z-2 b) (str-prec z z-0)
+          (str-prec z-1 z-2) (non (privk a)) (non (privk b))
+          (uniq-at n1 z) (uniq-at n1-0 z-1)) (= z-1 z))))
+  (comment &quot;Double initiator point of view&quot;)
+  (label 33)
+  (unrealized (0 1) (1 1))
+  (origs (n1 (0 0)) (n1-0 (1 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k34">Item <a href="#t33">34</a>, Parent: <a href="#k33">33</a>, Child: <a href="#k36">36</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 34</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation collapsed 1 0)
+  (label 34)
+  (parent 33)
+  (unrealized (0 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k35">Item <a href="#t33">35</a>, Parent: <a href="#k33">33</a>, Child: <a href="#k37">37</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1-0 n2-1 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1-0 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2-0 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1-0 n2-0 (pubk a))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1-0 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-1) (n1 n1-0) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1-0) (n2 n2-0) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='139.920' y='39.960' style='text-anchor: middle;'>ns 35</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n1-0 n2 n2-0 n2-1 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand init 3 (n1 n1-0) (n2 n2-0) (a a) (b b))
+  (defstrand resp 2 (n2 n2-1) (n1 n1-0) (b b) (a a))
+  (precedes ((1 0) (2 0)) ((2 1) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1 n1-0)
+  (operation nonce-test (added-strand resp 2) n1-0 (1 1)
+    (enc n1-0 a (pubk b)))
+  (label 35)
+  (parent 33)
+  (unrealized (0 1) (1 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k36">Item <a href="#t33">36</a>, Parent: <a href="#k34">34</a>, Child: <a href="#k38">38</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>ns 36</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 n2-0 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (added-strand resp 2) n1 (0 1)
+    (enc n1 a (pubk b)))
+  (label 36)
+  (parent 34)
+  (unrealized (0 1))
+  (origs (n1 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k37">Item <a href="#t33">37</a>, Parent: <a href="#k35">35</a>, Child: <a href="#k39">39</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1-0 n2-0 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1-0 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2-0 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1-0 n2-0 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1-0 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1-0) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1-0) (n2 n2-0) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='139.920' y='39.960' style='text-anchor: middle;'>ns 37</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n1-0 n2 n2-0 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand init 3 (n1 n1-0) (n2 n2-0) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n1-0) (b b) (a a))
+  (precedes ((1 0) (2 0)) ((2 1) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1 n1-0)
+  (operation nonce-test (contracted (n2-1 n2-0)) n1-0 (1 1)
+    (enc n1-0 n2-0 (pubk a)) (enc n1-0 a (pubk b)))
+  (label 37)
+  (parent 35)
+  (unrealized (0 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k38">Item <a href="#t33">38</a>, Parent: <a href="#k36">36</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 38 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
+    (enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
+  (label 38)
+  (parent 36)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps ((0 0) ((a a) (b b) (n1 n1) (n1-0 n1) (n2 n2) (n2-0 n2))))
+  (origs (n1 (0 0))))</pre>
+
+<p id="k39">Item <a href="#t33">39</a>, Parent: <a href="#k37">37</a>, Child: <a href="#k40">40</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 192.900 152.460 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-1 (pubk a))</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1-0 n2-0 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1-0 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2-0 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1-0 n2-0 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1-0 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 186.900 77.460 333.840 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-1) (n1 n1) (b b) (a a))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n2 n2-0) (n1 n1-0) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1-0) (n2 n2-0) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='189.900' y='39.960' style='text-anchor: middle;'>ns 39</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n1-0 n2 n2-0 n2-1 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand init 3 (n1 n1-0) (n2 n2-0) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n1-0) (b b) (a a))
+  (defstrand resp 2 (n2 n2-1) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (3 0)) ((1 0) (2 0)) ((2 1) (1 1)) ((3 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1 n1-0)
+  (operation nonce-test (added-strand resp 2) n1 (0 1)
+    (enc n1 a (pubk b)))
+  (label 39)
+  (parent 37)
+  (unrealized (0 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k40">Item <a href="#t33">40</a>, Parent: <a href="#k39">39</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 192.900 152.460 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1-0 n2 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1-0 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1-0 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1-0 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2-0 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 186.900 77.460 333.840 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1-0) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1-0) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2-0) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>ns 40 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n1-0 n2 n2-0 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
+  (defstrand init 3 (n1 n1-0) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n1-0) (b b) (a a))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (3 0)) ((1 0) (2 0)) ((2 1) (1 1)) ((3 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1 n1-0)
+  (operation nonce-test (contracted (n2-1 n2-0)) n1 (0 1)
+    (enc n1 n2-0 (pubk a)) (enc n1 a (pubk b)))
+  (label 40)
+  (parent 39)
+  (unrealized)
+  (shape)
+  (satisfies
+    (no (n1 n1) (n1-0 n1-0) (n2 n2-0) (n2-0 n2) (a a) (b b) (z (0 0))
+      (z-0 (0 2)) (z-1 (1 0)) (z-2 (1 2))))
+  (maps ((0 1) ((a a) (b b) (n1 n1) (n1-0 n1-0) (n2 n2-0) (n2-0 n2))))
+  (origs (n1 (0 0)) (n1-0 (1 0))))</pre>
+
+<p id="t41">Tree <a href="#top">41</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 154.920' font-size='12.000'>
+  <text
+   x='139.800' y='101.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k44&quot;, &quot;_self&quot;)'>44</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k43&quot;, &quot;_self&quot;)'>43</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k42&quot;, &quot;_self&quot;)'>42</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k41&quot;, &quot;_self&quot;)'>41</text>
+  </svg></div>
+
+<pre>(defprotocol nsl-typeless basic
+  (defrole init
+    (vars (a b name) (n1 text) (n2 mesg))
+    (trace (send (enc a n1 (pubk b))) (recv (enc n1 n2 b (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 text) (n1 mesg))
+    (trace (recv (enc a n1 (pubk b))) (send (enc n1 n2 b (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder-Lowe with untyped nonces&quot;))</pre>
+
+<p id="k41">Item <a href="#t41">41</a>, Child: <a href="#k42">42</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n1 n2 b (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc a n1 (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n2</title><circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>nsl-typeless 41</text></svg></div>
+
+<pre>(defskeleton nsl-typeless
+  (vars (n1 mesg) (n2 text) (a b name))
+  (deflistener n2)
+  (defstrand resp 2 (n1 n1) (n2 n2) (b b) (a a))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (goals
+    (forall ((n2 text) (a b name) (z z-0 node))
+      (implies
+        (and (p &quot;resp&quot; 1 z) (p &quot;&quot; 0 z-0) (p &quot;resp&quot; &quot;n2&quot; z n2)
+          (p &quot;resp&quot; &quot;b&quot; z b) (p &quot;resp&quot; &quot;a&quot; z a) (p &quot;&quot; &quot;x&quot; z-0 n2)
+          (non (privk a)) (non (privk b)) (uniq n2)) (false))))
+  (comment &quot;Shows typeflaw in typeless NSL&quot;)
+  (label 41)
+  (unrealized (0 0))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k42">Item <a href="#t41">42</a>, Parent: <a href="#k41">41</a>, Children: <a href="#k43">43</a> <a href="#k44">44</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 b (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc a n1 (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n2</title><circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>nsl-typeless 42</text></svg></div>
+
+<pre>(defskeleton nsl-typeless
+  (vars (n1 mesg) (n2 text) (a b name))
+  (deflistener n2)
+  (defstrand resp 2 (n1 n1) (n2 n2) (b b) (a a))
+  (precedes ((1 1) (0 0)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (label 42)
+  (parent 41)
+  (unrealized (0 0))
+  (origs (n2 (1 1)))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k43">Item <a href="#t41">43</a>, Parent: <a href="#k42">42</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='264.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 b (pubk a))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc a n1 (pubk b))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 186.900 189.960 233.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 b (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc a n1 (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n2</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (a a) (b b))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>nsl-typeless 43</text></svg></div>
+
+<pre>(defskeleton nsl-typeless
+  (vars (n2 n1 text) (a b name))
+  (deflistener n2)
+  (defstrand resp 2 (n1 n1) (n2 n2) (b b) (a a))
+  (defstrand init 3 (n2 n2) (n1 n1) (a a) (b b))
+  (precedes ((1 1) (2 1)) ((2 2) (0 0)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand init 3) n2 (0 0)
+    (enc n1 n2 b (pubk a)))
+  (label 43)
+  (parent 42)
+  (unrealized (0 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k44">Item <a href="#t41">44</a>, Parent: <a href="#k42">42</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='264.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc (cat n2 b) n2-0 a (pubk a-0))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(enc a-0 n2 b (pubk a))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 186.900 189.960 233.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a-0 n2 b (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc a a-0 (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n2</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>n2</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>((n1 (cat n2 b)) (n2 n2-0) (b a) (a a-0))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 a-0) (n2 n2) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>nsl-typeless 44 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton nsl-typeless
+  (vars (n2 n2-0 text) (a b a-0 name))
+  (deflistener n2)
+  (defstrand resp 2 (n1 a-0) (n2 n2) (b b) (a a))
+  (defstrand resp 2 (n1 (cat n2 b)) (n2 n2-0) (b a) (a a-0))
+  (precedes ((1 1) (2 0)) ((2 1) (0 0)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand resp 2) n2 (0 0)
+    (enc a-0 n2 b (pubk a)))
+  (label 44)
+  (parent 42)
+  (unrealized)
+  (shape)
+  (satisfies (no (n2 n2) (a a) (b b) (z (1 1)) (z-0 (0 0))))
+  (maps ((0 1) ((n2 n2) (a a) (b b) (n1 a-0))))
+  (origs (n2 (1 1))))</pre>
+
+<p id="t45">Tree <a href="#top">45</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k46&quot;, &quot;_self&quot;)'>46</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k45&quot;, &quot;_self&quot;)'>45</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k45">Item <a href="#t45">45</a>, Child: <a href="#k46">46</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 45</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (subgoals
+    (forall ((n1 n2 text) (a b name) (z z-0 node))
+      (implies
+        (and (p &quot;init&quot; 0 z) (p &quot;init&quot; 2 z-0) (p &quot;init&quot; &quot;n1&quot; z-0 n1)
+          (p &quot;init&quot; &quot;n2&quot; z-0 n2) (p &quot;init&quot; &quot;a&quot; z-0 a)
+          (p &quot;init&quot; &quot;b&quot; z-0 b) (str-prec z z-0) (non (privk a))
+          (non (privk b)) (uniq-at n1 z))
+        (exists ((z-1 z-2 z-3 node))
+          (and (p &quot;init&quot; 1 z-1) (p &quot;resp&quot; 0 z-2) (p &quot;resp&quot; 1 z-3)
+            (p &quot;resp&quot; &quot;n2&quot; z-3 n2) (p &quot;resp&quot; &quot;n1&quot; z-3 n1)
+            (p &quot;resp&quot; &quot;b&quot; z-3 b) (p &quot;resp&quot; &quot;a&quot; z-3 a) (prec z z-2)
+            (prec z-3 z-1) (str-prec z z-1) (str-prec z-1 z-0)
+            (str-prec z-2 z-3))))))
+  (comment &quot;Responder point of view with SAS&quot;)
+  (label 45)
+  (unrealized (0 2))
+  (origs (n2 (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k46">Item <a href="#t45">46</a>, Parent: <a href="#k45">45</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b-0))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 46 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b b-0 name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand init 3) n2 (0 2)
+    (enc n1 n2 (pubk a)))
+  (label 46)
+  (parent 45)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps ((0) ((a a) (n2 n2) (b b) (n1 n1))))
+  (origs (n2 (0 1))))</pre>
+
+<p id="t47">Tree <a href="#top">47</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k48&quot;, &quot;_self&quot;)'>48</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k47&quot;, &quot;_self&quot;)'>47</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k47">Item <a href="#t47">47</a>, Child: <a href="#k48">48</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 47</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (subgoals
+    (forall ((n1 n2 text) (a b name) (z z-0 node))
+      (implies
+        (and (p &quot;init&quot; 0 z) (p &quot;init&quot; 2 z-0) (p &quot;init&quot; &quot;n1&quot; z-0 n1)
+          (p &quot;init&quot; &quot;n2&quot; z-0 n2) (p &quot;init&quot; &quot;a&quot; z-0 a)
+          (p &quot;init&quot; &quot;b&quot; z-0 b) (str-prec z z-0) (non (privk a))
+          (non (privk b)) (uniq-at n1 z)) (false))))
+  (comment &quot;Responder point of view with false as the conclusion&quot;)
+  (label 47)
+  (unrealized (0 2))
+  (origs (n2 (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k48">Item <a href="#t47">48</a>, Parent: <a href="#k47">47</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b-0))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 48 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b b-0 name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand init 3) n2 (0 2)
+    (enc n1 n2 (pubk a)))
+  (label 48)
+  (parent 47)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps ((0) ((a a) (n2 n2) (b b) (n1 n1))))
+  (origs (n2 (0 1))))</pre>
+
+<p id="t49">Tree <a href="#top">49</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 79.920' font-size='12.000'>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k51&quot;, &quot;_self&quot;)'>51</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k50&quot;, &quot;_self&quot;)'>50</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k49&quot;, &quot;_self&quot;)'>49</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k49">Item <a href="#t49">49</a>, Child: <a href="#k50">50</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 49</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (subgoals
+    (forall ((n1 n2 text) (a b name) (z z-0 node))
+      (implies
+        (and (p &quot;init&quot; 0 z) (p &quot;init&quot; 2 z-0) (p &quot;init&quot; &quot;n1&quot; z-0 n1)
+          (p &quot;init&quot; &quot;n2&quot; z-0 n2) (p &quot;init&quot; &quot;a&quot; z-0 a)
+          (p &quot;init&quot; &quot;b&quot; z-0 b) (str-prec z z-0) (non (privk a))
+          (non (privk b)) (uniq-at n1 z)) (false))))
+  (comment &quot;Initiator point of view with false as the conclusion&quot;)
+  (label 49)
+  (unrealized (0 1))
+  (origs (n1 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k50">Item <a href="#t49">50</a>, Parent: <a href="#k49">49</a>, Child: <a href="#k51">51</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>ns 50</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 n2-0 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (added-strand resp 2) n1 (0 1)
+    (enc n1 a (pubk b)))
+  (label 50)
+  (parent 49)
+  (unrealized (0 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k51">Item <a href="#t49">51</a>, Parent: <a href="#k50">50</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 51 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
+    (enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
+  (label 51)
+  (parent 50)
+  (unrealized)
+  (shape)
+  (satisfies (no (n1 n1) (n2 n2) (a a) (b b) (z (0 0)) (z-0 (0 2))))
+  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
+  (origs (n1 (0 0))))</pre>
+
+<p id="t52">Tree <a href="#top">52</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k53&quot;, &quot;_self&quot;)'>53</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k52&quot;, &quot;_self&quot;)'>52</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k52">Item <a href="#t52">52</a>, Child: <a href="#k53">53</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 52</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n n1 text) (a b name))
+  (defstrand resp 3 (n2 n) (n1 n1) (b b) (a a))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n)
+  (goals
+    (forall ((a b name) (n text) (z0 node))
+      (implies
+        (and (p &quot;resp&quot; 2 z0) (p &quot;resp&quot; &quot;n2&quot; z0 n) (p &quot;resp&quot; &quot;a&quot; z0 a)
+          (p &quot;resp&quot; &quot;b&quot; z0 b) (non (privk a)) (non (privk b)) (uniq n))
+        (exists ((z1 node)) (and (p &quot;init&quot; 2 z1) (p &quot;init&quot; &quot;a&quot; z1 a)))))
+    (forall ((a b name) (n text) (z0 node))
+      (implies
+        (and (p &quot;resp&quot; 2 z0) (p &quot;resp&quot; &quot;n2&quot; z0 n) (p &quot;resp&quot; &quot;a&quot; z0 a)
+          (p &quot;resp&quot; &quot;b&quot; z0 b) (non (privk a)) (non (privk b)) (uniq n))
+        (exists ((z1 node))
+          (and (p &quot;init&quot; 2 z1) (p &quot;init&quot; &quot;b&quot; z1 b))))))
+  (comment &quot;Two responder authentication goals&quot;)
+  (label 52)
+  (unrealized (0 2))
+  (origs (n (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k53">Item <a href="#t52">53</a>, Parent: <a href="#k52">52</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n (pubk b-0))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n) (a a) (b b-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 53 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n n1 text) (a b b-0 name))
+  (defstrand resp 3 (n2 n) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n) (a a) (b b-0))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n)
+  (operation nonce-test (added-strand init 3) n (0 2)
+    (enc n1 n (pubk a)))
+  (label 53)
+  (parent 52)
+  (unrealized)
+  (shape)
+  (satisfies yes (no (a a) (b b) (n n) (z0 (0 2))))
+  (maps ((0) ((a a) (b b) (n n) (n1 n1))))
+  (origs (n (0 1))))</pre>
+
+<p id="t54">Tree <a href="#top">54</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 79.920' font-size='12.000'>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k56&quot;, &quot;_self&quot;)'>56</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k55&quot;, &quot;_self&quot;)'>55</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k54&quot;, &quot;_self&quot;)'>54</text>
+  </svg></div>
+
+<pre>(defprotocol ns-role-origs basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b))))
+    (non-orig (privk b))
+    (uniq-orig n1))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b))))
+    (non-orig (privk a))
+    (uniq-orig n2))
+  (comment
+    &quot;Needham-Schroeder with role assumptions that are too strong&quot;))</pre>
+
+<p id="k54">Item <a href="#t54">54</a>, Child: <a href="#k55">55</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>ns-role-origs 54</text></svg></div>
+
+<pre>(defskeleton ns-role-origs
+  (vars (n1 n2 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (non-orig (privk b))
+  (uniq-orig n1)
+  (label 54)
+  (unrealized (0 1))
+  (origs (n1 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k55">Item <a href="#t54">55</a>, Parent: <a href="#k54">54</a>, Child: <a href="#k56">56</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns-role-origs 55</text></svg></div>
+
+<pre>(defskeleton ns-role-origs
+  (vars (n1 n2 n2-0 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1 n2-0)
+  (operation nonce-test (added-strand resp 2) n1 (0 1)
+    (enc n1 a (pubk b)))
+  (label 55)
+  (parent 54)
+  (unrealized (0 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k56">Item <a href="#t54">56</a>, Parent: <a href="#k55">55</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns-role-origs 56 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton ns-role-origs
+  (vars (n1 n2 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1 n2)
+  (operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
+    (enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
+  (label 56)
+  (parent 55)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
+  (origs (n2 (1 1)) (n1 (0 0))))</pre>
+
+<p id="t57">Tree <a href="#top">57</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.600pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.600 154.920' font-size='12.000'>
+  <text
+   x='239.640' y='101.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k59&quot;, &quot;_self&quot;)'>59</text>
+  <line
+   x1='189.720' y1='114.960' x2='239.640' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='101.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k61&quot;, &quot;_self&quot;)'>61</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k60&quot;, &quot;_self&quot;)'>60</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k59&quot;, &quot;_self&quot;)'>59</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k58&quot;, &quot;_self&quot;)'>58</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k57&quot;, &quot;_self&quot;)'>57</text>
+  </svg></div>
+
+<pre>(defprotocol ns-role-origs basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b))))
+    (non-orig (privk b))
+    (uniq-orig n1))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b))))
+    (non-orig (privk a))
+    (uniq-orig n2))
+  (comment
+    &quot;Needham-Schroeder with role assumptions that are too strong&quot;))</pre>
+
+<p id="k57">Item <a href="#t57">57</a>, Child: <a href="#k58">58</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>ns-role-origs 57</text></svg></div>
+
+<pre>(defskeleton ns-role-origs
+  (vars (n2 n1 text) (b a name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (label 57)
+  (unrealized (0 2))
+  (origs (n2 (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k58">Item <a href="#t57">58</a>, Parent: <a href="#k57">57</a>, Children: <a href="#k59">59</a> <a href="#k60">60</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b-0))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns-role-origs 58</text></svg></div>
+
+<pre>(defskeleton ns-role-origs
+  (vars (n2 n1 text) (b a b-0 name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (non-orig (privk a) (privk b-0))
+  (uniq-orig n2 n1)
+  (operation nonce-test (added-strand init 3) n2 (0 2)
+    (enc n1 n2 (pubk a)))
+  (label 58)
+  (parent 57)
+  (unrealized (0 0) (0 2))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k59">Item <a href="#t57">59</a>, Parent: <a href="#k58">58</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns-role-origs 59 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton ns-role-origs
+  (vars (n2 n1 text) (a b name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2 n1)
+  (operation nonce-test (contracted (b-0 b)) n1 (0 0)
+    (enc n1 a (pubk b)))
+  (label 59)
+  (parent 58)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (a a) (n2 n2) (n1 n1))))
+  (origs (n1 (1 0)) (n2 (0 1))))</pre>
+
+<p id="k60">Item <a href="#t57">60</a>, Parent: <a href="#k58">58</a>, Child: <a href="#k61">61</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b-0))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 86.940 264.960 133.920 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b-0) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>ns-role-origs 60</text></svg></div>
+
+<pre>(defskeleton ns-role-origs
+  (vars (n2 n1 n2-0 text) (b a b-0 name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b-0) (a a))
+  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 2) (0 2)) ((2 1) (0 0)))
+  (non-orig (privk a) (privk b-0))
+  (uniq-orig n2 n1 n2-0)
+  (operation nonce-test (added-strand resp 2) n1 (0 0)
+    (enc n1 a (pubk b-0)))
+  (label 60)
+  (parent 58)
+  (unrealized (0 0) (0 2))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k61">Item <a href="#t57">61</a>, Parent: <a href="#k60">60</a>, Seen Child: <a href="#k59">59</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 86.940 264.960 133.920 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>ns-role-origs 61 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton ns-role-origs
+  (vars (n2 n1 n2-0 text) (a b name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 2) (0 2)) ((2 1) (0 0)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2 n1 n2-0)
+  (operation nonce-test (contracted (b-0 b)) n1 (0 0)
+    (enc n1 n2-0 (pubk a)) (enc n1 a (pubk b)))
+  (label 61)
+  (parent 60)
+  (seen 59)
+  (unrealized)
+  (comment &quot;1 in cohort - 0 not yet seen&quot;))</pre>
+
+<p id="t62">Tree <a href="#top">62</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 79.920' font-size='12.000'>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k64&quot;, &quot;_self&quot;)'>64</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k63&quot;, &quot;_self&quot;)'>63</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k62&quot;, &quot;_self&quot;)'>62</text>
+  </svg></div>
+
+<pre>(defprotocol ns2 basic
+  (defrole init
+    (vars (a b name) (n1 n2 n3 text))
+    (trace (send (enc n1 n3 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b))))
+    (note doubled nonce in the first message))
+  (note that this protocol is derived from Needham-Schroeder))</pre>
+
+<p id="k62">Item <a href="#t62">62</a>, Child: <a href="#k63">63</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 n3 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (n3 n3) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns2 62</text>
+  </svg></div>
+
+<pre>(defskeleton ns2
+  (vars (n1 n2 n3 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (n3 n3) (a a) (b b))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (label 62)
+  (unrealized (0 1))
+  (origs (n1 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k63">Item <a href="#t62">63</a>, Parent: <a href="#k62">62</a>, Child: <a href="#k64">64</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n3 n2-0 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n3 n3 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n3 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n3 n3 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n3) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n3) (n2 n2) (n3 n3) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>ns2 63</text>
+  </svg></div>
+
+<pre>(defskeleton ns2
+  (vars (n2 n3 n2-0 text) (a b name))
+  (defstrand init 3 (n1 n3) (n2 n2) (n3 n3) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n3) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n3)
+  (operation nonce-test (added-strand resp 2) n3 (0 1)
+    (enc n3 n3 a (pubk b)))
+  (label 63)
+  (parent 62)
+  (unrealized (0 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k64">Item <a href="#t62">64</a>, Parent: <a href="#k63">63</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n3 n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n3 n3 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n3 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n3 n3 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n3) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n3) (n2 n2) (n3 n3) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns2 64 (realized)</text></svg></div>
+
+<pre>(defskeleton ns2
+  (vars (n3 n2 text) (a b name))
+  (defstrand init 3 (n1 n3) (n2 n2) (n3 n3) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n3) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n3)
+  (operation nonce-test (contracted (n2-0 n2)) n3 (0 1)
+    (enc n3 n2 (pubk a)) (enc n3 n3 a (pubk b)))
+  (label 64)
+  (parent 63)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (n1 n3) (n2 n2) (n3 n3))))
+  (origs (n3 (0 0))))</pre>
+
+<p id="t65">Tree <a href="#top">65</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 79.920' font-size='12.000'>
+  <text
+   x='39.960' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k65&quot;, &quot;_self&quot;)'>65</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder with no role origination assumptions&quot;))</pre>
+
+<p id="k65">Item <a href="#t65">65</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 65 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (label 65)
+  (unrealized)
+  (shape)
+  (maps ((0 1) ((n1 n1) (n2 n2) (a a) (b b))))
+  (origs (n1 (0 0))))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/kerb.scm b/doc/examples/kerb.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/kerb.scm
@@ -0,0 +1,76 @@
+; Flawed and Fixed Kerberos
+
+; In this example, the initiator is trying to send a private message
+; to the responder.  Each are presumed to share a long-term private key
+; with the key server, which will choose a fresh session key on request
+; and encrypt it for both parties.
+
+; A flaw exists in the protocol intentionally: the initiator will need
+; confirmation that the session key is shared between the initiator and
+; the partner they specified.
+
+; This version of the protocol is not modeled properly and misses the flaw.
+(defprotocol kerb-flawed basic
+  (defrole init
+    (vars (a b s name) (m n text) (k skey))
+    (trace
+       ;; Make the request
+       (send (cat a b n)) 
+       ;; Receive the encrypted key and ticket
+       (recv (cat (enc k n (ltk a s)) (enc k a b (ltk b s)))) 
+       (send (cat (enc m k) (enc k a b (ltk b s)))))
+    (uniq-orig n))
+  (defrole resp
+    (vars (a b s name) (m text) (k skey))
+    (trace
+       (recv (cat (enc m k) (enc k a b (ltk b s))))))
+  (defrole keyserv
+    (vars (a b s name) (m n text) (k skey))
+    (trace
+       ;; Receive the request
+       (recv (cat a b n))
+       ;; Send the encrypted key and ticket
+       (send (cat (enc k n (ltk a s)) (enc k a b (ltk b s)))))
+    (uniq-orig k))
+)
+
+; This skeleton should be dead, even though m can leak
+(defskeleton kerb-flawed
+  (vars (a b s name) (m text))
+  (defstrand init 3 (a a) (b b) (s s) (m m))
+  (deflistener m)
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig m))
+
+; This version of the protocol is not modeled properly, with a generic variable (ticket)
+(defprotocol kerb-flawed2 basic
+  (defrole init
+    (vars (a b s name) (ticket mesg) (m n text) (k skey))
+    (trace
+       ;; Make the request
+       (send (cat a b n)) 
+       ;; Receive the encrypted key and ticket
+       (recv (cat (enc k n (ltk a s)) ticket))
+       (send (cat (enc m k) ticket)))
+    (uniq-orig n))
+  (defrole resp
+    (vars (a b s name) (m text) (k skey))
+    (trace
+       (recv (cat (enc m k) (enc k a b (ltk b s))))))
+  (defrole keyserv
+    (vars (a b s name) (m n text) (k skey))
+    (trace
+       ;; Receive the request
+       (recv (cat a b n))
+       ;; Send the encrypted key and ticket
+       (send (cat (enc k n (ltk a s)) (enc k a b (ltk b s)))))
+    (uniq-orig k))
+)
+
+; This skeleton should have a shape, demonstrating that m may be leaked.  
+(defskeleton kerb-flawed2
+  (vars (a b s name) (m text))
+  (defstrand init 3 (a a) (b b) (s s) (m m))
+  (deflistener m)
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig m))
diff --git a/doc/examples/kerb.xhtml b/doc/examples/kerb.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/kerb.xhtml
@@ -0,0 +1,620 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>kerb-flawed</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from kerb.scm&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t5">5</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.600pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.600 79.920' font-size='12.000'>
+  <text
+   x='239.640' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  <line
+   x1='189.720' y1='39.960' x2='239.640' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  <line
+   x1='139.800' y1='39.960' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol kerb-flawed basic
+  (defrole init
+    (vars (a b s name) (m n text) (k skey))
+    (trace (send (cat a b n))
+      (recv (cat (enc k n (ltk a s)) (enc k a b (ltk b s))))
+      (send (cat (enc m k) (enc k a b (ltk b s)))))
+    (uniq-orig n))
+  (defrole resp
+    (vars (a b s name) (m text) (k skey))
+    (trace (recv (cat (enc m k) (enc k a b (ltk b s))))))
+  (defrole keyserv
+    (vars (a b s name) (n text) (k skey))
+    (trace (recv (cat a b n))
+      (send (cat (enc k n (ltk a s)) (enc k a b (ltk b s)))))
+    (uniq-orig k)))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Child: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>m</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>m</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(cat (enc m k) (enc k a b (ltk b s)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat (enc k n (ltk a s)) (enc k a b (ltk b s)))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a b n)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((m m) (n n) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>kerb-flawed 0</text></svg></div>
+
+<pre>(defskeleton kerb-flawed
+  (vars (m n text) (a b s name) (k skey))
+  (defstrand init 3 (m m) (n n) (a a) (b b) (s s) (k k))
+  (deflistener m)
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig m n)
+  (label 0)
+  (unrealized (0 1) (1 0))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k2">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>m</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>m</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 86.940 264.960 133.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc m k) (enc k a b (ltk b s)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat (enc k n (ltk a s)) (enc k a b (ltk b s)))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a b n)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((m m) (n n) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>kerb-flawed 1</text></svg></div>
+
+<pre>(defskeleton kerb-flawed
+  (vars (m n text) (a b s name) (k skey))
+  (defstrand init 3 (m m) (n n) (a a) (b b) (s s) (k k))
+  (deflistener m)
+  (precedes ((0 2) (1 0)))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig m n)
+  (label 1)
+  (parent 0)
+  (unrealized (0 1))
+  (origs (n (0 0)) (m (0 2)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k1">1</a>, Child: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc k n (ltk a s)) (enc k a b-0 (ltk b-0 s)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a b-0 n)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>m</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>m</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 86.940 264.960 133.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc m k) (enc k a b (ltk b s)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat (enc k n (ltk a s)) (enc k a b (ltk b s)))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat a b n)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (a a) (b b-0) (s s) (k k))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>keyserv</text>
+   </g>
+  <g><title>((m m) (n n) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>kerb-flawed 2</text></svg></div>
+
+<pre>(defskeleton kerb-flawed
+  (vars (m n text) (a b s b-0 name) (k skey))
+  (defstrand init 3 (m m) (n n) (a a) (b b) (s s) (k k))
+  (deflistener m)
+  (defstrand keyserv 2 (n n) (a a) (b b-0) (s s) (k k))
+  (precedes ((0 0) (2 0)) ((0 2) (1 0)) ((2 1) (0 1)))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig m n k)
+  (operation encryption-test (added-strand keyserv 2)
+    (enc k n (ltk a s)) (0 1))
+  (label 2)
+  (parent 1)
+  (unrealized (0 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k3">Item <a href="#t0">3</a>, Parent: <a href="#k2">2</a>, Child: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc k n (ltk a s)) (enc k a b (ltk b s)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a b n)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>m</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>m</title>
+   <circle style='fill: red;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 86.940 264.960 133.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc m k) (enc k a b (ltk b s)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat (enc k n (ltk a s)) (enc k a b (ltk b s)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat a b n)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (a a) (b b) (s s) (k k))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>keyserv</text>
+   </g>
+  <g><title>((m m) (n n) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>kerb-flawed 3</text></svg></div>
+
+<pre>(defskeleton kerb-flawed
+  (vars (m n text) (a s b name) (k skey))
+  (defstrand init 3 (m m) (n n) (a a) (b b) (s s) (k k))
+  (deflistener m)
+  (defstrand keyserv 2 (n n) (a a) (b b) (s s) (k k))
+  (precedes ((0 0) (2 0)) ((0 2) (1 0)) ((2 1) (0 1)))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig m n k)
+  (operation encryption-test (displaced 3 2 keyserv 2)
+    (enc k a b-0 (ltk b-0 s)) (0 1))
+  (label 3)
+  (parent 2)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k4">Item <a href="#t0">4</a>, Parent: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 264.960 Q 242.880 227.460 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 189.960 Q 286.860 189.960 333.840 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc k n (ltk a s)) (enc k a b (ltk b s)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a b n)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>m</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>m</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 86.940 264.960 133.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc m k) (enc k a b (ltk b s)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat (enc k n (ltk a s)) (enc k a b (ltk b s)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat a b n)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (a a) (b b) (s s) (k k))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>keyserv</text>
+   </g>
+  <g><title>((m m) (n n) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>kerb-flawed 4</text></svg></div>
+
+<pre>(defskeleton kerb-flawed
+  (vars (m n text) (a s b name) (k skey))
+  (defstrand init 3 (m m) (n n) (a a) (b b) (s s) (k k))
+  (deflistener m)
+  (defstrand keyserv 2 (n n) (a a) (b b) (s s) (k k))
+  (deflistener k)
+  (precedes ((0 0) (2 0)) ((0 2) (1 0)) ((2 1) (0 1)) ((2 1) (3 0))
+    ((3 1) (1 0)))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig m n k)
+  (operation nonce-test (added-listener k) m (1 0) (enc m k))
+  (label 4)
+  (parent 3)
+  (unrealized (3 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t5">Tree <a href="#top">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 79.920' font-size='12.000'>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k7&quot;, &quot;_self&quot;)'>7</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k6&quot;, &quot;_self&quot;)'>6</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  </svg></div>
+
+<pre>(defprotocol kerb-flawed2 basic
+  (defrole init
+    (vars (a b s name) (ticket mesg) (m n text) (k skey))
+    (trace (send (cat a b n)) (recv (cat (enc k n (ltk a s)) ticket))
+      (send (cat (enc m k) ticket)))
+    (uniq-orig n))
+  (defrole resp
+    (vars (a b s name) (m text) (k skey))
+    (trace (recv (cat (enc m k) (enc k a b (ltk b s))))))
+  (defrole keyserv
+    (vars (a b s name) (n text) (k skey))
+    (trace (recv (cat a b n))
+      (send (cat (enc k n (ltk a s)) (enc k a b (ltk b s)))))
+    (uniq-orig k)))</pre>
+
+<p id="k5">Item <a href="#t5">5</a>, Child: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>m</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>m</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(cat (enc m k) ticket)</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat (enc k n (ltk a s)) ticket)</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a b n)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((ticket ticket) (m m) (n n) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>kerb-flawed2 5</text></svg></div>
+
+<pre>(defskeleton kerb-flawed2
+  (vars (ticket mesg) (m n text) (a b s name) (k skey))
+  (defstrand init 3 (ticket ticket) (m m) (n n) (a a) (b b) (s s) (k k))
+  (deflistener m)
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig m n)
+  (label 5)
+  (unrealized (0 1) (1 0))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k6">Item <a href="#t5">6</a>, Parent: <a href="#k5">5</a>, Child: <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>m</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>m</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 86.940 264.960 133.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc m k) ticket)</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat (enc k n (ltk a s)) ticket)</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a b n)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((ticket ticket) (m m) (n n) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>kerb-flawed2 6</text></svg></div>
+
+<pre>(defskeleton kerb-flawed2
+  (vars (ticket mesg) (m n text) (a b s name) (k skey))
+  (defstrand init 3 (ticket ticket) (m m) (n n) (a a) (b b) (s s) (k k))
+  (deflistener m)
+  (precedes ((0 2) (1 0)))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig m n)
+  (label 6)
+  (parent 5)
+  (unrealized (0 1))
+  (origs (n (0 0)) (m (0 2)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k7">Item <a href="#t5">7</a>, Parent: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 142.920 152.460 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc k n (ltk a s)) (enc k a b-0 (ltk b-0 s)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a b-0 n)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>m</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>m</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 86.940 264.960 133.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc m k) ticket)</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat (enc k n (ltk a s)) ticket)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat a b n)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (a a) (b b-0) (s s) (k k))</title>
+   <text
+    x='239.880' y='77.460' style='text-anchor: middle;'>keyserv</text>
+   </g>
+  <g>
+   <title>((ticket ticket) (m m) (n n) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>kerb-flawed2 7 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton kerb-flawed2
+  (vars (ticket mesg) (m n text) (a b s b-0 name) (k skey))
+  (defstrand init 3 (ticket ticket) (m m) (n n) (a a) (b b) (s s) (k k))
+  (deflistener m)
+  (defstrand keyserv 2 (n n) (a a) (b b-0) (s s) (k k))
+  (precedes ((0 0) (2 0)) ((0 2) (1 0)) ((2 1) (0 1)))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig m n k)
+  (operation encryption-test (added-strand keyserv 2)
+    (enc k n (ltk a s)) (0 1))
+  (label 7)
+  (parent 6)
+  (unrealized)
+  (shape)
+  (maps ((0 1) ((a a) (b b) (s s) (m m) (ticket ticket) (n n) (k k))))
+  (origs (k (2 1)) (n (0 0)) (m (0 2))))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/lt_test.scm b/doc/examples/lt_test.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/lt_test.scm
@@ -0,0 +1,55 @@
+(herald "Less-than constraint test protocol"
+   (comment "First and third skeletons should have a shape,"
+            "second and fourth should be dead."))
+
+(defprotocol lttest basic
+  (defrole init
+     (vars (n1 n2 text) (k skey))
+     (trace
+       (send (cat n1 (enc n1 n2 k)))
+       (recv n2))
+     (non-orig k)
+     (uniq-orig n1 n2)
+  )
+)
+
+;;; With no declaration, a shape
+;;; should be found where n1 = n2.
+(defskeleton lttest
+   (vars (n1 n2 text) (k skey))
+   (defstrand init 2) (n1 n1) (n2 n2) (k k))
+
+;;; With the declaration that n1 < n2,
+;;; no shape should exist, since n1 = n2 would
+;;; be a cycle.
+(defskeleton lttest
+   (vars (n1 n2 text))
+   (defstrand init 2 (n1 n1) (n2 n2))
+   (lt (n1 n2)))
+
+(defprotocol lttest2 basic
+  (defrole init
+     (vars (n1 n2 n text) (k skey))
+     (trace
+       (send n)
+       (send (cat n1 (enc n1 n2 k)))
+       (recv n2))
+     (non-orig k)
+     (uniq-orig n1 n2)
+     (lt (n2 n))
+  )
+)
+
+;;; In this version, the single lt declaration
+;;; should not interfere.
+(defskeleton lttest2
+   (vars (n n1 n2 text) (k skey))
+   (defstrand init 3) (n1 n1) (n2 n2) (k k))
+
+;;; In this version, the additional requirement
+;;; that n1 < n prevents n1 and n2 from being
+;;; unified.
+(defskeleton lttest2
+   (vars (n n1 n2 text) (k skey))
+   (defstrand init 3 (n1 n1) (n2 n2) (k k) (n n))
+   (lt (n n1)))
diff --git a/doc/examples/lt_test.xhtml b/doc/examples/lt_test.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/lt_test.xhtml
@@ -0,0 +1,361 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Less-than constraint test protocol</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Less-than constraint test protocol&quot;
+  (comment &quot;First and third skeletons should have a shape,&quot;
+    &quot;second and fourth should be dead.&quot;))
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from lt_test.scm&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t2">2</a> <a href="#t3">3</a> <a href="#t5">5</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol lttest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Child: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat n1 (enc n1 n2 k))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>lttest 0</text>
+  </svg></div>
+
+<pre>(defskeleton lttest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (label 0)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n1</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat n1 (enc n1 n1 k))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n1) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>lttest 1 (realized)</text></svg></div>
+
+<pre>(defskeleton lttest
+  (vars (n1 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n1) (k k))
+  (non-orig k)
+  (uniq-orig n1)
+  (operation nonce-test (displaced 1 0 init 1) n2 (0 1) (enc n1 n2 k))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n1 n1) (n2 n1) (k k))))
+  (origs (n1 (0 0))))</pre>
+
+<p id="t2">Tree <a href="#top">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 79.920' font-size='12.000'>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  </svg></div>
+
+<pre>(defprotocol lttest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))</pre>
+
+<p id="k2">Item <a href="#t2">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat n1 (enc n1 n2 k))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>lttest 2</text>
+  </svg></div>
+
+<pre>(defskeleton lttest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (lt (n1 n2))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (label 2)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t3">Tree <a href="#top">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  </svg></div>
+
+<pre>(defprotocol lttest2 basic
+  (defrole init
+    (vars (n1 n2 n text) (k skey))
+    (trace (send n) (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)
+    (lt (n2 n))))</pre>
+
+<p id="k3">Item <a href="#t3">3</a>, Child: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat n1 (enc n1 n2 k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>n</title><circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (n n) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>lttest2 3</text>
+  </svg></div>
+
+<pre>(defskeleton lttest2
+  (vars (n1 n2 n text) (k skey))
+  (defstrand init 3 (n1 n1) (n2 n2) (n n) (k k))
+  (lt (n2 n))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (label 3)
+  (unrealized (0 2))
+  (origs (n1 (0 1)) (n2 (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k4">Item <a href="#t3">4</a>, Parent: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n1</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat n1 (enc n1 n1 k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>n</title><circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n1) (n n) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>lttest2 4 (realized)</text></svg></div>
+
+<pre>(defskeleton lttest2
+  (vars (n1 n text) (k skey))
+  (defstrand init 3 (n1 n1) (n2 n1) (n n) (k k))
+  (lt (n1 n))
+  (non-orig k)
+  (uniq-orig n1)
+  (operation nonce-test (displaced 1 0 init 2) n2 (0 2) (enc n1 n2 k))
+  (label 4)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n1 n1) (n2 n1) (n n) (k k))))
+  (origs (n1 (0 1))))</pre>
+
+<p id="t5">Tree <a href="#top">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 79.920' font-size='12.000'>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  </svg></div>
+
+<pre>(defprotocol lttest2 basic
+  (defrole init
+    (vars (n1 n2 n text) (k skey))
+    (trace (send n) (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)
+    (lt (n2 n))))</pre>
+
+<p id="k5">Item <a href="#t5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat n1 (enc n1 n2 k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>n</title><circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (n n) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>lttest2 5</text>
+  </svg></div>
+
+<pre>(defskeleton lttest2
+  (vars (n n1 n2 text) (k skey))
+  (defstrand init 3 (n1 n1) (n2 n2) (n n) (k k))
+  (lt (n n1) (n2 n))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (label 5)
+  (unrealized (0 2))
+  (origs (n1 (0 1)) (n2 (0 1)))
+  (comment &quot;empty cohort&quot;))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/neq_test.scm b/doc/examples/neq_test.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/neq_test.scm
@@ -0,0 +1,46 @@
+(herald "Inequality constraint test protocol"
+   (comment "First skeleton should have a shape,"
+            "second, and hird should be dead."))
+
+(defprotocol neqtest basic
+  (defrole init
+     (vars (n1 n2 text) (k skey))
+     (trace
+       (send (cat n1 (enc n1 n2 k)))
+       (recv n2))
+     (non-orig k)
+     (uniq-orig n1 n2)
+  )
+)
+
+;;; With no inequality declaration, a shape
+;;; should be found where n1 = n2.
+(defskeleton neqtest
+   (vars (n1 n2 text) (k skey))
+   (defstrand init 2 (n1 n1) (n2 n2) (k k)))
+
+;;; With the inequality declaration that n1 != n2,
+;;; no shape should exist.
+(defskeleton neqtest
+   (vars (n1 n2 text))
+   (defstrand init 2 (n1 n1) (n2 n2))
+   (neq (n1 n2)))
+
+(defprotocol neqtest2 basic
+  (defrole init
+     (vars (n1 n2 n3 text) (k skey))
+     (trace
+       (send (cat n1 (enc n1 n2 n3 k)))
+       (recv n2))
+     (non-orig k)
+     (uniq-orig n1 n2)
+  )
+)
+
+;;; Here, we use the neqlist declaration to force
+;;; deadness, as an alternative.
+(defskeleton neqtest2
+   (vars (n1 n2 n3 text) (k skey))
+   (defstrand init 2 (n1 n1) (n2 n2) (n3 n3) (k k))
+   (neqlist ((n1 n2 n3)))
+)
diff --git a/doc/examples/neq_test.xhtml b/doc/examples/neq_test.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/neq_test.xhtml
@@ -0,0 +1,247 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Inequality constraint test protocol</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Inequality constraint test protocol&quot;
+  (comment &quot;First skeleton should have a shape,&quot;
+    &quot;second, and hird should be dead.&quot;))
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from neq_test.scm&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t2">2</a> <a href="#t3">3</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol neqtest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Child: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat n1 (enc n1 n2 k))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>neqtest 0</text>
+  </svg></div>
+
+<pre>(defskeleton neqtest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (label 0)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n1</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat n1 (enc n1 n1 k))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n1) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>neqtest 1 (realized)</text></svg></div>
+
+<pre>(defskeleton neqtest
+  (vars (n1 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n1) (k k))
+  (non-orig k)
+  (uniq-orig n1)
+  (operation nonce-test (displaced 1 0 init 1) n2 (0 1) (enc n1 n2 k))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n1 n1) (n2 n1) (k k))))
+  (origs (n1 (0 0))))</pre>
+
+<p id="t2">Tree <a href="#top">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 79.920' font-size='12.000'>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  </svg></div>
+
+<pre>(defprotocol neqtest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))</pre>
+
+<p id="k2">Item <a href="#t2">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat n1 (enc n1 n2 k))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>neqtest 2</text>
+  </svg></div>
+
+<pre>(defskeleton neqtest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (neq (n1 n2))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (label 2)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t3">Tree <a href="#top">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 79.920' font-size='12.000'>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  </svg></div>
+
+<pre>(defprotocol neqtest2 basic
+  (defrole init
+    (vars (n1 n2 n3 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 n3 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))</pre>
+
+<p id="k3">Item <a href="#t3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n2</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat n1 (enc n1 n2 n3 k))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (n3 n3) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>neqtest2 3</text>
+  </svg></div>
+
+<pre>(defskeleton neqtest2
+  (vars (n1 n2 n3 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (n3 n3) (k k))
+  (neqlist ((n1 n2 n3)))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (label 3)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment &quot;empty cohort&quot;))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/ns.scm b/doc/examples/ns.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/ns.scm
@@ -0,0 +1,37 @@
+(herald "Needham-Schroeder Public-Key Protocol"
+	(comment "This protocol contains a man-in-the-middle"
+		 "attack discovered by Galvin Lowe."))
+
+;;; Used to generate output for inclusion in the primer.
+;;; Use margin = 60 (-m 60) to generate the output.
+
+(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace
+     (send (enc n1 a (pubk b)))
+     (recv (enc n1 n2 (pubk a)))
+     (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace
+     (recv (enc n1 a (pubk b)))
+     (send (enc n1 n2 (pubk a)))
+     (recv (enc n2 (pubk b)))))
+  (comment "Needham-Schroeder"))
+
+;;; The initiator point-of-view
+(defskeleton ns
+  (vars (a b name) (n1 text))
+  (defstrand init 3 (a a) (b b) (n1 n1))
+  (non-orig (privk b) (privk a))
+  (uniq-orig n1)
+  (comment "Initiator point-of-view"))
+
+;;; The responder point-of-view
+(defskeleton ns
+  (vars (a b name) (n2 text))
+  (defstrand resp 3 (a a) (b b) (n2 n2))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (comment "Responder point-of-view"))
diff --git a/doc/examples/ns.xhtml b/doc/examples/ns.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/ns.xhtml
@@ -0,0 +1,358 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Needham-Schroeder Public-Key Protocol</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Needham-Schroeder Public-Key Protocol&quot;
+  (comment &quot;This protocol contains a man-in-the-middle&quot;
+    &quot;attack discovered by Galvin Lowe.&quot;))
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from ns.scm&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t3">3</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 79.920' font-size='12.000'>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder&quot;))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Child: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 0</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (comment &quot;Initiator point-of-view&quot;)
+  (label 0)
+  (unrealized (0 1))
+  (origs (n1 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k2">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2-0 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2-0) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>ns 1</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 n2-0 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (added-strand resp 2) n1 (0 1)
+    (enc n1 a (pubk b)))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 2 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n1 n2 text) (a b name))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
+  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n1)
+  (operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
+    (enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
+  (label 2)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
+  (origs (n1 (0 0))))</pre>
+
+<p id="t3">Tree <a href="#top">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  </svg></div>
+
+<pre>(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
+      (recv (enc n2 (pubk b)))))
+  (comment &quot;Needham-Schroeder&quot;))</pre>
+
+<p id="k3">Item <a href="#t3">3</a>, Child: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>ns 3</text>
+  </svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (comment &quot;Responder point-of-view&quot;)
+  (label 3)
+  (unrealized (0 2))
+  (origs (n2 (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k4">Item <a href="#t3">4</a>, Parent: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n2 (pubk b-0))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b-0))</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n2 (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n1 n2 (pubk a))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 a (pubk b))</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (a a) (b b-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n2 n2) (n1 n1) (b b) (a a))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>ns 4 (realized)</text></svg></div>
+
+<pre>(defskeleton ns
+  (vars (n2 n1 text) (a b b-0 name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand init 3) n2 (0 2)
+    (enc n1 n2 (pubk a)))
+  (label 4)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
+  (origs (n2 (0 1))))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/or.scm b/doc/examples/or.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/or.scm
@@ -0,0 +1,27 @@
+(herald "Otway-Rees Protocol"
+	(comment "Standard version using variables of sort mesg"))
+
+(defprotocol or basic
+  (defrole init (vars (a b s name) (na text) (k skey) (m text))
+    (trace
+     (send (cat m a b (enc na m a b (ltk a s))))
+     (recv (cat m (enc na k (ltk a s))))))
+  (defrole resp
+    (vars (a b s name) (nb text) (k skey) (m text) (x y mesg))
+    (trace
+     (recv (cat m a b x))
+     (send (cat m a b x (enc nb m a b (ltk b s))))
+     (recv (cat m y (enc nb k (ltk b s))))
+     (send y)))
+  (defrole serv (vars (a b s name) (na nb text) (k skey) (m text))
+    (trace
+     (recv (cat m a b (enc na m a b (ltk a s))
+		(enc nb m a b (ltk b s))))
+     (send (cat m (enc na k (ltk a s)) (enc nb k (ltk b s)))))
+    (uniq-orig k)))
+
+(defskeleton or
+  (vars (nb text) (s a b name))
+  (defstrand resp 4 (a a) (b b) (s s) (nb nb))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig nb))
diff --git a/doc/examples/or.xhtml b/doc/examples/or.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/or.xhtml
@@ -0,0 +1,785 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Otway-Rees Protocol</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Otway-Rees Protocol&quot;
+  (comment &quot;Standard version using variables of sort mesg&quot;))
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from or.scm&quot;)</pre>
+
+<p id="t0">Tree 0.</p>
+
+<div>
+ <svg
+  class='diagram' width='229.680pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 229.680 454.920' font-size='12.000'>
+  <text
+   x='189.720' y='401.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k9&quot;, &quot;_self&quot;)'>9</text>
+  <line
+   x1='139.800' y1='339.960' x2='189.720' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='326.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  <line
+   x1='139.800' y1='339.960' x2='189.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='251.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k6&quot;, &quot;_self&quot;)'>6</text>
+  <line
+   x1='139.800' y1='339.960' x2='189.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='326.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  <line
+   x1='89.880' y1='339.960' x2='139.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='326.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  <line
+   x1='39.960' y1='227.460' x2='89.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='176.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k7&quot;, &quot;_self&quot;)'>7</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='101.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k6&quot;, &quot;_self&quot;)'>6</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  <line
+   x1='89.880' y1='114.960' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='227.460' x2='89.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='213.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol or basic
+  (defrole init
+    (vars (a b s name) (na text) (k skey) (m text))
+    (trace (send (cat m a b (enc na m a b (ltk a s))))
+      (recv (cat m (enc na k (ltk a s))))))
+  (defrole resp
+    (vars (a b s name) (nb text) (k skey) (m text) (x y mesg))
+    (trace (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b (ltk b s))))
+      (recv (cat m y (enc nb k (ltk b s)))) (send y)))
+  (defrole serv
+    (vars (a b s name) (na nb text) (k skey) (m text))
+    (trace
+      (recv
+        (cat m a b (enc na m a b (ltk a s)) (enc nb m a b (ltk b s))))
+      (send (cat m (enc na k (ltk a s)) (enc nb k (ltk b s)))))
+    (uniq-orig k)))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Children: <a href="#k1">1</a> <a href="#k2">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (ltk b s)))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat m a b x (enc nb m a b (ltk b s)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='39.960' y='39.960' style='text-anchor: middle;'>or 0</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m text) (s a b name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig nb)
+  (label 0)
+  (unrealized (0 2))
+  (origs (nb (0 1)))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat m-0 (enc na k (ltk a-0 s)) (enc nb k (ltk b s)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m-0 a-0 b (enc na m-0 a-0 b (ltk a-0 s)) (enc nb m-0 a-0 b (ltk b s)))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (ltk b s)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (ltk b s)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na na) (nb nb) (m m-0) (a a-0) (b b) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>or 1</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m na m-0 text) (s a b a-0 name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m-0) (a a-0) (b b) (s s) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand serv 2) (enc nb k (ltk b s))
+    (0 2))
+  (label 1)
+  (parent 0)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat m-0 (enc nb k (ltk b s)) (enc nb-0 k (ltk b-0 s)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m-0 b b-0 (enc nb m-0 b b-0 (ltk b s)) (enc nb-0 m-0 b b-0 (ltk b-0 s)))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (ltk b s)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (ltk b s)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((na nb) (nb nb-0) (m m-0) (a b) (b b-0) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>or 2</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m nb-0 m-0 text) (s a b b-0 name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand serv 2 (na nb) (nb nb-0) (m m-0) (a b) (b b-0) (s s) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand serv 2) (enc nb k (ltk b s))
+    (0 2))
+  (label 2)
+  (parent 0)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k3">Item <a href="#t0">3</a>, Parent: <a href="#k1">1</a>, Children: <a href="#k5">5</a> <a href="#k6">6</a> <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc na k (ltk a s)) (enc nb k (ltk b s)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a b (enc na m a b (ltk a s)) (enc nb m a b (ltk b s)))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (ltk b s)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (ltk b s)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na na) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>or 3</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m na text) (s a b name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc nb m-0 a-0 b (ltk b s)) (1 0))
+  (label 3)
+  (parent 1)
+  (unrealized (1 0))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k4">Item <a href="#t0">4</a>, Parent: <a href="#k2">2</a>, Children: <a href="#k8">8</a> <a href="#k9">9</a>, Seen Child: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc nb k (ltk a s)) (enc nb-0 k (ltk a s)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a a (enc nb m a a (ltk a s)) (enc nb-0 m a a (ltk a s)))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (ltk a s)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x (enc nb m a a (ltk a s)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text x='89.940' y='39.960' style='text-anchor: middle;'>or 4</text>
+  </svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m nb-0 text) (s a name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand serv 2 (na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (ltk a s))
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc nb m-0 b b (ltk b s)) (1 0))
+  (label 4)
+  (parent 2)
+  (seen 6)
+  (unrealized (1 0))
+  (comment &quot;3 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k5">Item <a href="#t0">5</a>, Parent: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 114.960 Q 192.300 150.660 144.719 186.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b (enc na m a b (ltk a s)))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc na k (ltk a s)) (enc nb k (ltk b s)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a b (enc na m a b (ltk a s)) (enc nb m a b (ltk b s)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (ltk b s)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a b x (enc nb m a b (ltk b s)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a b x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na na) (m m) (a a) (b b) (s s))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((na na) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>or 5 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m na text) (s a b name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m) (a a) (b b) (s s) (k k))
+  (defstrand init 1 (na na) (m m) (a a) (b b) (s s))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((2 0) (1 0)))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand init 1)
+    (enc na m a b (ltk a s)) (1 0))
+  (label 5)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s s) (a a) (b b) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+<p id="k6">Item <a href="#t0">6</a>, Parent: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc nb k (ltk a s)) (enc nb k (ltk a s)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a a (enc nb m a a (ltk a s)) (enc nb m a a (ltk a s)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (ltk a s)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x (enc nb m a a (ltk a s)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na nb) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>or 6 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m text) (s a name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand serv 2 (na nb) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (non-orig (ltk a s))
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc na m a a (ltk a s)) (1 0))
+  (label 6)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s s) (a a) (b a) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+<p id="k7">Item <a href="#t0">7</a>, Parent: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x-0 (enc na m a a (ltk a s)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc na k (ltk a s)) (enc nb k (ltk a s)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a a (enc na m a a (ltk a s)) (enc nb m a a (ltk a s)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (ltk a s)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x (enc nb m a a (ltk a s)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((x x-0) (nb na) (m m) (a a) (b a) (s s))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((na na) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>or 7 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y x-0 mesg) (nb m na text) (s a name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand serv 2 (na na) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand resp 2 (x x-0) (nb na) (m m) (a a) (b a) (s s))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((2 1) (1 0)))
+  (non-orig (ltk a s))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand resp 2)
+    (enc na m a a (ltk a s)) (1 0))
+  (label 7)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s s) (a a) (b a) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+<p id="k8">Item <a href="#t0">8</a>, Parent: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 114.960 Q 192.300 150.660 144.719 186.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a (enc nb-0 m a a (ltk a s)))</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc nb k (ltk a s)) (enc nb-0 k (ltk a s)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a a (enc nb m a a (ltk a s)) (enc nb-0 m a a (ltk a s)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (ltk a s)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x (enc nb m a a (ltk a s)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((na nb-0) (m m) (a a) (b a) (s s))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>or 8 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y mesg) (nb m nb-0 text) (s a name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand serv 2 (na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))
+  (defstrand init 1 (na nb-0) (m m) (a a) (b a) (s s))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((2 0) (1 0)))
+  (non-orig (ltk a s))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand init 1)
+    (enc nb-0 m a a (ltk a s)) (1 0))
+  (label 8)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s s) (a a) (b a) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+<p id="k9">Item <a href="#t0">9</a>, Parent: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x-0 (enc nb-0 m a a (ltk a s)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m (enc nb k (ltk a s)) (enc nb-0 k (ltk a s)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat m a a (enc nb m a a (ltk a s)) (enc nb-0 m a a (ltk a s)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>y</title><circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat m y (enc nb k (ltk a s)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat m a a x (enc nb m a a (ltk a s)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat m a a x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((x x-0) (nb nb-0) (m m) (a a) (b a) (s s))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>or 9 (realized)</text></svg></div>
+
+<pre>(defskeleton or
+  (vars (x y x-0 mesg) (nb m nb-0 text) (s a name) (k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k))
+  (defstrand serv 2 (na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k))
+  (defstrand resp 2 (x x-0) (nb nb-0) (m m) (a a) (b a) (s s))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((2 1) (1 0)))
+  (non-orig (ltk a s))
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand resp 2)
+    (enc nb-0 m a a (ltk a s)) (1 0))
+  (label 9)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (maps ((0) ((nb nb) (s s) (a a) (b a) (k k) (m m) (x x) (y y))))
+  (origs (k (1 1)) (nb (0 1))))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/pkinit.scm b/doc/examples/pkinit.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/pkinit.scm
@@ -0,0 +1,211 @@
+(herald "Kerberos PKINIT")
+
+;;; This file includes three versions of the Kerberos PKINIT
+;;; protocol. The first version is the flawed version that Cervesato
+;;; et al. analyzed in "Breaking and Fixing Public-Key Kerberos." The
+;;; other two versions are the two fixes that are explored in the same
+;;; paper.
+
+;;; We also express the goal that the authors identify as a property
+;;; not met by the original flawed version, but which both fixes do
+;;; achieve. Running CPSA with this input demonstrates that the flawed
+;;; version does not satisfy the goal, but both fixed versions do.
+
+;;; How to use this file:
+;;;
+;;; CPSA looks at the goal and creates an initial point of view that
+;;; corresponds to the information contained in the antecedent of the
+;;; implication of the goal. It then outputs a characterization
+;;; (consisting of shapes) of all executions containing at least the
+;;; structure contained in the point of view. It then evaluates the
+;;; goal against each of those shapes. The guarantee CPSA provides is
+;;; that a goal is achieved iff each of the shapes satisfies the goal.
+
+;;; We can look at the output in pkinit.xhtml to determine what CPSA
+;;; discovered. Notice that the shape associated with the first
+;;; analysis (of the flawed version) contains an annotation that says
+;;; (satisfies (no (c c) (as as) (k k) (z (0 1)))). This means that
+;;; the goal is not satisfied. The pairs of terms represent a variable
+;;; assignment for the logical variables of the goal into elements of
+;;; the shape. This is the variable assignment of the antecendant
+;;; which has no extension for which the conclusion is also
+;;; satisfied. The shapes for the other analyses contain the
+;;; annotation (satisfies yes) indicating that the goal is satisfied
+;;; in the shape (and hence in any realized skeleton). 
+
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;                       ;;
+;; Protocol Descriptions ;;
+;;                       ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+;; This is the flawed version of the Kerberos public key initial
+;; round. 
+(defprotocol pkinit-flawed basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig n1 n2))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig k ak)))
+
+
+;; This is the fix the authors proposed to the standards group. It
+;; adds the value c in a new field inside the server's signature.
+(defprotocol pkinit-fix1 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig n1 n2))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig k ak)))
+
+;; This is the fix that the standards group proposed and adopted. It
+;; replaces n2 in the server's with a hash of the entire first
+;; message.
+(defprotocol pkinit-fix2 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k (hash (cat (enc tc n2 (privk c)) c t n1))
+                       (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig n1 n2))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k (hash (cat (enc tc n2 (privk c)) c t n1))
+                       (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig k ak)))
+
+
+;;;;;;;;;;;;;;;;;;;;;
+;;                 ;; 
+;; Goal Statements ;;
+;;                 ;;
+;;;;;;;;;;;;;;;;;;;;;
+
+;; This is the goal that the authors discovered was not met by the
+;; original, flawed version, but which was met by both fixes.
+(defgoal pkinit-flawed
+  (forall ((c as name) (k skey) (z node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (non (privk as))
+                (non (privk c)))
+           (exists ((z-0 node))
+                   (and (p "auth" 1 z-0)
+                        (p "auth" "as" z-0 as)
+                        (p "auth" "k" z-0 k)
+                        (p "auth" "c" z-0 c))))))
+
+;; Since we reference the protocol in the expression of the goal, we
+;; must repeat it once for every protocol against which we would like
+;; to evaluate the goal.
+(defgoal pkinit-fix1
+  (forall ((c as name) (k skey) (z node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (non (privk as))
+                (non (privk c)))
+           (exists ((z-0 node))
+                   (and (p "auth" 1 z-0)
+                        (p "auth" "as" z-0 as)
+                        (p "auth" "k" z-0 k)
+                        (p "auth" "c" z-0 c))))))
+
+;; Repeated once more.
+(defgoal pkinit-fix2
+  (forall ((c as name) (k skey) (z node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (non (privk as))
+                (non (privk c)))
+           (exists ((z-0 node))
+                   (and (p "auth" 1 z-0)
+                        (p "auth" "as" z-0 as)
+                        (p "auth" "k" z-0 k)
+                        (p "auth" "c" z-0 c))))))
+
+
+;;;;;;;;
+
+(defgoal pkinit-flawed
+  (forall ((c c-0 as name) (k skey) (z z-0 node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (p "auth" 1 z-0)
+                (p "auth" "k" z-0 k)
+                (p "auth" "c" z-0 c-0)
+                (non (privk as))
+                (non (privk c)))
+           ;(exists ((z-1 node))
+           ;        (p "client" 1 z-1))
+           (= c c-0)
+           )))
+
+(defgoal pkinit-fix1
+  (forall ((c c-0 as name) (k skey) (z z-0 node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (p "auth" 1 z-0)
+                (p "auth" "k" z-0 k)
+                (p "auth" "c" z-0 c-0)
+                (non (privk as))
+                (non (privk c)))
+           (exists ((z-1 node))
+                   (p "client" 1 z-1))
+           ;(= c c-0)
+           )))
+
+(defgoal pkinit-fix2
+  (forall ((c c-0 as name) (k skey) (z z-0 node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (p "auth" 1 z-0)
+                (p "auth" "k" z-0 k)
+                (p "auth" "c" z-0 c-0)
+                (non (privk as))
+                (non (privk c)))
+           (exists ((z-1 node))
+                   (p "client" 1 z-1)))))
diff --git a/doc/examples/pkinit.xhtml b/doc/examples/pkinit.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/pkinit.xhtml
@@ -0,0 +1,2612 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.1 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Kerberos PKINIT</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Kerberos PKINIT&quot;)
+(comment &quot;CPSA 3.2.1&quot;)
+(comment &quot;All input read from pkinit.scm&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t2">2</a> <a href="#t8">8</a> <a href="#t13">13</a> <a href="#t16">16</a> <a href="#t23">23</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='129.840pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 129.840 79.920' font-size='12.000'>
+  <text
+   x='89.880' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol pkinit-flawed basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig n2 n1))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig k ak)))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Child: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k n2 (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>pkinit-flawed 0</text></svg></div>
+
+<pre>(defskeleton pkinit-flawed
+  (vars (n2 n1 text) (tc tk tgt data) (c as t name) (k ak skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1)
+  (goals
+    (forall ((c as name) (k skey) (z node))
+      (implies
+        (and (p &quot;client&quot; 1 z) (p &quot;client&quot; &quot;c&quot; z c)
+          (p &quot;client&quot; &quot;as&quot; z as) (p &quot;client&quot; &quot;k&quot; z k) (non (privk as))
+          (non (privk c)))
+        (exists ((z-0 node))
+          (and (p &quot;auth&quot; 1 z-0) (p &quot;auth&quot; &quot;as&quot; z-0 as)
+            (p &quot;auth&quot; &quot;k&quot; z-0 k) (p &quot;auth&quot; &quot;c&quot; z-0 c))))))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k)))))
+  (label 0)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 (privk as)) (pubk c-0)) c-0 tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc-0 n2 (privk c-0)) c-0 t-0 n1-0)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k n2 (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c-0) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-flawed 1 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton pkinit-flawed
+  (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c as t c-0 t-0 name) (k ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0)
+    (c c-0) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak-0)
+  (operation encryption-test (added-strand auth 2) (enc k n2 (privk as))
+    (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((recv (cat (enc tc-0 n2 (privk c-0)) c-0 t-0 n1-0))
+      (send
+        (cat (enc (enc k n2 (privk as)) (pubk c-0)) c-0 tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (satisfies (no (c c) (as as) (k k) (z (0 1))))
+  (maps
+    ((0)
+      ((c c) (as as) (k k) (t t) (n2 n2) (n1 n1) (tc tc) (tk tk)
+        (tgt tgt) (ak ak))))
+  (origs (k (1 1)) (ak-0 (1 1)) (n1 (0 0)) (n2 (0 0))))</pre>
+
+<p id="t2">Tree <a href="#top">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.600pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.600 154.920' font-size='12.000'>
+  <text
+   x='239.640' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k7&quot;, &quot;_self&quot;)'>7</text>
+  <line
+   x1='189.720' y1='114.960' x2='239.640' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k6&quot;, &quot;_self&quot;)'>6</text>
+  <line
+   x1='139.800' y1='77.460' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  <line
+   x1='139.800' y1='77.460' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  </svg></div>
+
+<pre>(defprotocol pkinit-fix1 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig n2 n1))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig k ak)))</pre>
+
+<p id="k2">Item <a href="#t2">2</a>, Child: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 2</text></svg></div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 text) (tc tk tgt data) (c as t name) (k ak skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1)
+  (goals
+    (forall ((c as name) (k skey) (z node))
+      (implies
+        (and (p &quot;client&quot; 1 z) (p &quot;client&quot; &quot;c&quot; z c)
+          (p &quot;client&quot; &quot;as&quot; z as) (p &quot;client&quot; &quot;k&quot; z k) (non (privk as))
+          (non (privk c)))
+        (exists ((z-0 node))
+          (and (p &quot;auth&quot; 1 z-0) (p &quot;auth&quot; &quot;as&quot; z-0 as)
+            (p &quot;auth&quot; &quot;k&quot; z-0 k) (p &quot;auth&quot; &quot;c&quot; z-0 c))))))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k)))))
+  (label 2)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k3">Item <a href="#t2">3</a>, Parent: <a href="#k2">2</a>, Child: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc-0 n2 (privk c)) c t-0 n1-0)</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 3</text></svg></div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c as t t-0 name) (k ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak-0)
+  (operation encryption-test (added-strand auth 2)
+    (enc k n2 c (privk as)) (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((recv (cat (enc tc-0 n2 (privk c)) c t-0 n1-0))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 3)
+  (parent 2)
+  (unrealized (0 1) (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k4">Item <a href="#t2">4</a>, Parent: <a href="#k3">3</a>, Children: <a href="#k5">5</a> <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t-0 n1-0)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1-0) (tc tc) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 4</text></svg></div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tk-0 tgt-0 data) (c as t t-0 name)
+    (k ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1-0) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak-0)
+  (operation encryption-test (displaced 2 0 client 1)
+    (enc tc-0 n2 (privk c)) (1 0))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t-0 n1-0))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 4)
+  (parent 3)
+  (unrealized (0 1))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k5">Item <a href="#t2">5</a>, Parent: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0 (enc ak n1 tk t k))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 5 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 text) (tc tgt tk tgt-0 data) (c as t name) (k ak skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 1 auth 2)
+    (enc ak-0 n1-0 tk-0 t-0 k) (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak n1 tk t k)))))
+  (label 5)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps
+    ((0)
+      ((c c) (as as) (k k) (t t) (n2 n2) (n1 n1) (tc tc) (tk tk)
+        (tgt tgt) (ak ak))))
+  (origs (k (1 1)) (ak (1 1)) (n1 (0 0)) (n2 (0 0))))</pre>
+
+<p id="k6">Item <a href="#t2">6</a>, Parent: <a href="#k4">4</a>, Child: <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 186.900 189.960 233.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t-0 n1-0)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1-0) (tc tc) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 6</text></svg></div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tk-0 tgt-0 data) (c as t t-0 name)
+    (k ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1-0) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (deflistener k)
+  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak-0)
+  (operation encryption-test (added-listener k) (enc ak n1 tk t k)
+    (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t-0 n1-0))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))) ((recv k) (send k)))
+  (label 6)
+  (parent 4)
+  (unrealized (2 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k7">Item <a href="#t2">7</a>, Parent: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>ak-0</title><circle cx='239.880' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>ak-0</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 186.900 189.960 233.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc ak-0 n2 c (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 ak-0))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t-0 n1-0)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc ak-0 n2 c (privk as)) (pubk c)) c tgt (enc ak n1 tk t ak-0))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1-0) (tc tc) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k ak-0) (ak ak-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k ak-0) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 7</text></svg></div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tk-0 tgt-0 data) (c as t t-0 name)
+    (ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k ak-0) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1-0) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k ak-0) (ak ak-0))
+  (deflistener ak-0)
+  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 ak-0)
+  (operation nonce-test (displaced 3 1 auth 2) k (2 0)
+    (enc (enc k n2 c (privk as)) (pubk c)))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc ak-0 n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t ak-0))))
+    ((recv (cat (enc tc n2 (privk c)) c t-0 n1-0))
+      (send
+        (cat (enc (enc ak-0 n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 ak-0)))) ((recv ak-0) (send ak-0)))
+  (label 7)
+  (parent 6)
+  (unrealized (2 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t8">Tree <a href="#top">8</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='229.680pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 229.680 154.920' font-size='12.000'>
+  <text
+   x='189.720' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k12&quot;, &quot;_self&quot;)'>12</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k11&quot;, &quot;_self&quot;)'>11</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k10&quot;, &quot;_self&quot;)'>10</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k9&quot;, &quot;_self&quot;)'>9</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  </svg></div>
+
+<pre>(defprotocol pkinit-fix2 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig n2 n1))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig k ak)))</pre>
+
+<p id="k8">Item <a href="#t8">8</a>, Child: <a href="#k9">9</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix2 8</text></svg></div>
+
+<pre>(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt data) (c as t name) (k ak skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1)
+  (goals
+    (forall ((c as name) (k skey) (z node))
+      (implies
+        (and (p &quot;client&quot; 1 z) (p &quot;client&quot; &quot;c&quot; z c)
+          (p &quot;client&quot; &quot;as&quot; z as) (p &quot;client&quot; &quot;k&quot; z k) (non (privk as))
+          (non (privk c)))
+        (exists ((z-0 node))
+          (and (p &quot;auth&quot; 1 z-0) (p &quot;auth&quot; &quot;as&quot; z-0 as)
+            (p &quot;auth&quot; &quot;k&quot; z-0 k) (p &quot;auth&quot; &quot;c&quot; z-0 c))))))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k)))))
+  (label 8)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k9">Item <a href="#t8">9</a>, Parent: <a href="#k8">8</a>, Children: <a href="#k10">10</a> <a href="#k11">11</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c) (t t) (as as) (k k) (ak ak-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix2 9</text></svg></div>
+
+<pre>(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c as t name)
+    (k ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak-0))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak-0)
+  (operation encryption-test (added-strand auth 2)
+    (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k)))))
+  (label 9)
+  (parent 8)
+  (unrealized (0 1))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k10">Item <a href="#t8">10</a>, Parent: <a href="#k9">9</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt-0 (enc ak n1 tk t k))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix2 10 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tgt tk tgt-0 data) (c as t name) (k ak skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 1 auth 2)
+    (enc ak-0 n1 tk-0 t k) (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak n1 tk t k)))))
+  (label 10)
+  (parent 9)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps
+    ((0)
+      ((c c) (as as) (k k) (t t) (n2 n2) (n1 n1) (tc tc) (tk tk)
+        (tgt tgt) (ak ak))))
+  (origs (k (1 1)) (ak (1 1)) (n1 (0 0)) (n2 (0 0))))</pre>
+
+<p id="k11">Item <a href="#t8">11</a>, Parent: <a href="#k9">9</a>, Child: <a href="#k12">12</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 186.900 189.960 233.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c) (t t) (as as) (k k) (ak ak-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix2 11</text></svg></div>
+
+<pre>(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c as t name)
+    (k ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak-0))
+  (deflistener k)
+  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak-0)
+  (operation encryption-test (added-listener k) (enc ak n1 tk t k)
+    (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k))))
+    ((recv k) (send k)))
+  (label 11)
+  (parent 9)
+  (unrealized (2 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k12">Item <a href="#t8">12</a>, Parent: <a href="#k11">11</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>ak-0</title><circle cx='239.880' cy='264.960' r='6.000'/>
+   </g>
+  <g><title>ak-0</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 186.900 189.960 233.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc ak-0 (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t ak-0))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc ak-0 (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt (enc ak n1 tk t ak-0))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c) (t t) (as as) (k ak-0) (ak ak-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k ak-0) (ak ak))</title>
+   <text
+    x='39.960' y='77.460' style='text-anchor: middle;'>client</text></g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix2 12</text></svg></div>
+
+<pre>(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c as t name)
+    (ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k ak-0) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c)
+    (t t) (as as) (k ak-0) (ak ak-0))
+  (deflistener ak-0)
+  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 ak-0)
+  (operation nonce-test (displaced 3 1 auth 2) k (2 0)
+    (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+      (pubk c)))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc ak-0 (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t ak-0))))
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc ak-0 (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t ak-0))))
+    ((recv ak-0) (send ak-0)))
+  (label 12)
+  (parent 11)
+  (unrealized (2 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t13">Tree <a href="#top">13</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 79.920' font-size='12.000'>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k15&quot;, &quot;_self&quot;)'>15</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k14&quot;, &quot;_self&quot;)'>14</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k13&quot;, &quot;_self&quot;)'>13</text>
+  </svg></div>
+
+<pre>(defprotocol pkinit-flawed basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig n2 n1))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig k ak)))</pre>
+
+<p id="k13">Item <a href="#t13">13</a>, Child: <a href="#k14">14</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k n2-0 (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k n2 (privk as-0)) (pubk c-0)) c-0 tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c-0)) c-0 t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0) (t t) (as as-0) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-flawed 13</text></svg></div>
+
+<pre>(defskeleton pkinit-flawed
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (goals
+    (forall ((c c-0 as name) (k skey) (z z-0 node))
+      (implies
+        (and (p &quot;client&quot; 1 z) (p &quot;client&quot; &quot;c&quot; z c)
+          (p &quot;client&quot; &quot;as&quot; z as) (p &quot;client&quot; &quot;k&quot; z k) (p &quot;auth&quot; 1 z-0)
+          (p &quot;auth&quot; &quot;k&quot; z-0 k) (p &quot;auth&quot; &quot;c&quot; z-0 c-0) (non (privk as))
+          (non (privk c))) (= c c-0))))
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat (enc (enc k n2 (privk as-0)) (pubk c-0)) c-0 tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2-0 (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 13)
+  (unrealized (1 1))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k14">Item <a href="#t13">14</a>, Parent: <a href="#k13">13</a>, Child: <a href="#k15">15</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k n2-0 (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 (privk as-0)) (pubk c-0)) c-0 tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c-0)) c-0 t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0) (t t) (as as-0) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-flawed 14</text></svg></div>
+
+<pre>(defskeleton pkinit-flawed
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat (enc (enc k n2 (privk as-0)) (pubk c-0)) c-0 tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2-0 (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 14)
+  (parent 13)
+  (unrealized (1 1))
+  (origs (n1-0 (1 0)) (n2-0 (1 0)) (k (0 1)) (ak (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k15">Item <a href="#t13">15</a>, Parent: <a href="#k14">14</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k n2 (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc-0 n2 (privk c)) c t-0 n1-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 (privk as)) (pubk c-0)) c-0 tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c-0)) c-0 t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0) (t t) (as as) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-flawed 15 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton pkinit-flawed
+  (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 t as t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1-0 k ak)
+  (operation encryption-test (displaced 2 0 auth 2)
+    (enc k n2-0 (privk as-0)) (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat (enc (enc k n2 (privk as)) (pubk c-0)) c-0 tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 15)
+  (parent 14)
+  (unrealized)
+  (shape)
+  (satisfies (no (c c) (c-0 c-0) (as as) (k k) (z (1 1)) (z-0 (0 1))))
+  (maps
+    ((0 1)
+      ((c c) (c-0 c-0) (as as) (k k) (t t) (as-0 as) (n2 n2) (n1 n1)
+        (tc tc) (tk tk) (tgt tgt) (ak ak) (t-0 t-0) (n2-0 n2)
+        (n1-0 n1-0) (tc-0 tc-0) (tk-0 tk-0) (tgt-0 tgt-0) (ak-0 ak-0))))
+  (origs (k (0 1)) (ak (0 1)) (n1-0 (1 0)) (n2 (1 0))))</pre>
+
+<p id="t16">Tree <a href="#top">16</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.600pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.600 154.920' font-size='12.000'>
+  <text
+   x='239.640' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k22&quot;, &quot;_self&quot;)'>22</text>
+  <line
+   x1='189.720' y1='114.960' x2='239.640' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k20&quot;, &quot;_self&quot;)'>20</text>
+  <line
+   x1='139.800' y1='77.460' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k21&quot;, &quot;_self&quot;)'>21</text>
+  <line
+   x1='189.720' y1='39.960' x2='239.640' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k19&quot;, &quot;_self&quot;)'>19</text>
+  <line
+   x1='139.800' y1='77.460' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k18&quot;, &quot;_self&quot;)'>18</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k17&quot;, &quot;_self&quot;)'>17</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k16&quot;, &quot;_self&quot;)'>16</text>
+  </svg></div>
+
+<pre>(defprotocol pkinit-fix1 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig n2 n1))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig k ak)))</pre>
+
+<p id="k16">Item <a href="#t16">16</a>, Child: <a href="#k17">17</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k n2-0 c (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k n2 c-0 (privk as-0)) (pubk c-0)) c-0 tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c-0)) c-0 t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0) (t t) (as as-0) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 16</text></svg></div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (goals
+    (forall ((c c-0 as name) (k skey) (z z-0 node))
+      (implies
+        (and (p &quot;client&quot; 1 z) (p &quot;client&quot; &quot;c&quot; z c)
+          (p &quot;client&quot; &quot;as&quot; z as) (p &quot;client&quot; &quot;k&quot; z k) (p &quot;auth&quot; 1 z-0)
+          (p &quot;auth&quot; &quot;k&quot; z-0 k) (p &quot;auth&quot; &quot;c&quot; z-0 c-0) (non (privk as))
+          (non (privk c))) (exists ((z-1 node)) (p &quot;client&quot; 1 z-1)))))
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat (enc (enc k n2 c-0 (privk as-0)) (pubk c-0)) c-0 tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2-0 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 16)
+  (unrealized (1 1))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k17">Item <a href="#t16">17</a>, Parent: <a href="#k16">16</a>, Child: <a href="#k18">18</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k n2-0 c (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c-0 (privk as-0)) (pubk c-0)) c-0 tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c-0)) c-0 t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0) (t t) (as as-0) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 17</text></svg></div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat (enc (enc k n2 c-0 (privk as-0)) (pubk c-0)) c-0 tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2-0 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 17)
+  (parent 16)
+  (unrealized (1 1))
+  (origs (n1-0 (1 0)) (n2-0 (1 0)) (k (0 1)) (ak (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k18">Item <a href="#t16">18</a>, Parent: <a href="#k17">17</a>, Children: <a href="#k19">19</a> <a href="#k20">20</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc-0 n2 (privk c)) c t-0 n1-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 18</text></svg></div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c t as t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1-0 k ak)
+  (operation encryption-test (displaced 2 0 auth 2)
+    (enc k n2-0 c-0 (privk as-0)) (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 18)
+  (parent 17)
+  (unrealized (0 0) (1 1))
+  (origs (k (0 1)) (ak (0 1)) (n1-0 (1 0)) (n2 (1 0)))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k19">Item <a href="#t16">19</a>, Parent: <a href="#k18">18</a>, Child: <a href="#k21">21</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0 (enc ak n1 tk t k))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc-0 n2 (privk c)) c t n1)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc-0) (tk tk) (tgt tgt-0) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 19</text></svg></div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 text) (tc tk tgt tc-0 tgt-0 data) (c t as name)
+    (k ak skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc-0) (tk tk) (tgt tgt-0)
+    (c c) (t t) (as as) (k k) (ak ak))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 0 auth 2)
+    (enc ak-0 n1-0 tk-0 t-0 k) (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak n1 tk t k)))))
+  (label 19)
+  (parent 18)
+  (unrealized (0 0))
+  (origs (k (0 1)) (ak (0 1)) (n1 (1 0)) (n2 (1 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k20">Item <a href="#t16">20</a>, Parent: <a href="#k18">18</a>, Child: <a href="#k22">22</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc-0 n2 (privk c)) c t-0 n1-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 136.920 152.460 233.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 20</text></svg></div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c t as t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (deflistener k)
+  (precedes ((0 1) (2 0)) ((1 0) (0 0)) ((2 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1-0 k ak)
+  (operation encryption-test (added-listener k)
+    (enc ak-0 n1-0 tk-0 t-0 k) (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))) ((recv k) (send k)))
+  (label 20)
+  (parent 18)
+  (unrealized (0 0) (2 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k21">Item <a href="#t16">21</a>, Parent: <a href="#k19">19</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0 (enc ak n1 tk t k))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 21 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 text) (tk tgt tc tgt-0 data) (c t as name) (k ak skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 1 client 1)
+    (enc tc-0 n2 (privk c)) (0 0))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak n1 tk t k)))))
+  (label 21)
+  (parent 19)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps
+    ((0 1)
+      ((c c) (c-0 c) (as as) (k k) (t t) (as-0 as) (n2 n2) (n1 n1)
+        (tc tc) (tk tk) (tgt tgt) (ak ak) (t-0 t) (n2-0 n2) (n1-0 n1)
+        (tc-0 tc) (tk-0 tk) (tgt-0 tgt-0) (ak-0 ak))))
+  (origs (n1 (1 0)) (n2 (1 0)) (k (0 1)) (ak (0 1))))</pre>
+
+<p id="k22">Item <a href="#t16">22</a>, Parent: <a href="#k20">20</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>ak</title><circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>ak</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc ak n2 c (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 ak))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc-0 n2 (privk c)) c t-0 n1-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 136.920 152.460 233.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc ak n2 c (privk as)) (pubk c)) c tgt (enc ak n1 tk t ak))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: red;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k ak) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k ak) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix1 22</text></svg></div>
+
+<pre>(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c t as t-0 name) (ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k ak) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k ak) (ak ak-0))
+  (deflistener ak)
+  (precedes ((0 1) (2 0)) ((1 0) (0 0)) ((2 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1-0 ak)
+  (operation nonce-test (displaced 3 0 auth 2) k (2 0)
+    (enc (enc k n2 c (privk as)) (pubk c)))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc ak n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t ak))))
+    ((send (cat (enc tc-0 n2 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc ak n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 ak)))) ((recv ak) (send ak)))
+  (label 22)
+  (parent 20)
+  (unrealized (0 0) (2 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t23">Tree <a href="#top">23</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.600pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.600 154.920' font-size='12.000'>
+  <text
+   x='239.640' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k28&quot;, &quot;_self&quot;)'>28</text>
+  <line
+   x1='189.720' y1='114.960' x2='239.640' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k27&quot;, &quot;_self&quot;)'>27</text>
+  <line
+   x1='139.800' y1='77.460' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k26&quot;, &quot;_self&quot;)'>26</text>
+  <line
+   x1='139.800' y1='77.460' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k25&quot;, &quot;_self&quot;)'>25</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k24&quot;, &quot;_self&quot;)'>24</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k23&quot;, &quot;_self&quot;)'>23</text>
+  </svg></div>
+
+<pre>(defprotocol pkinit-fix2 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig n2 n1))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig k ak)))</pre>
+
+<p id="k23">Item <a href="#t23">23</a>, Child: <a href="#k24">24</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc-0 n2-0 (privk c)) c t-0 n1-0) (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c-0)) c-0 t n1) (privk as-0)) (pubk c-0)) c-0 tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c-0)) c-0 t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0) (t t) (as as-0) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix2 23</text></svg></div>
+
+<pre>(defskeleton pkinit-fix2
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (goals
+    (forall ((c c-0 as name) (k skey) (z z-0 node))
+      (implies
+        (and (p &quot;client&quot; 1 z) (p &quot;client&quot; &quot;c&quot; z c)
+          (p &quot;client&quot; &quot;as&quot; z as) (p &quot;client&quot; &quot;k&quot; z k) (p &quot;auth&quot; 1 z-0)
+          (p &quot;auth&quot; &quot;k&quot; z-0 k) (p &quot;auth&quot; &quot;c&quot; z-0 c-0) (non (privk as))
+          (non (privk c))) (exists ((z-1 node)) (p &quot;client&quot; 1 z-1)))))
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat
+          (enc
+            (enc k (hash (enc tc n2 (privk c-0)) c-0 t n1) (privk as-0))
+            (pubk c-0)) c-0 tgt (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat
+          (enc
+            (enc k (hash (enc tc-0 n2-0 (privk c)) c t-0 n1-0)
+              (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 23)
+  (unrealized (1 1))
+  (preskeleton)
+  (comment &quot;Not a skeleton&quot;))</pre>
+
+<p id="k24">Item <a href="#t23">24</a>, Parent: <a href="#k23">23</a>, Child: <a href="#k25">25</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc-0 n2-0 (privk c)) c t-0 n1-0) (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1-0 tk-0 t-0 k))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c-0)) c-0 t n1) (privk as-0)) (pubk c-0)) c-0 tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c-0)) c-0 t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0) (t t) (as as-0) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix2 24</text></svg></div>
+
+<pre>(defskeleton pkinit-fix2
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat
+          (enc
+            (enc k (hash (enc tc n2 (privk c-0)) c-0 t n1) (privk as-0))
+            (pubk c-0)) c-0 tgt (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat
+          (enc
+            (enc k (hash (enc tc-0 n2-0 (privk c)) c t-0 n1-0)
+              (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 24)
+  (parent 23)
+  (unrealized (1 1))
+  (origs (n1-0 (1 0)) (n2-0 (1 0)) (k (0 1)) (ak (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k25">Item <a href="#t23">25</a>, Parent: <a href="#k24">24</a>, Children: <a href="#k26">26</a> <a href="#k27">27</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c) (t t) (as as) (k k) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix2 25</text></svg></div>
+
+<pre>(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c t as name)
+    (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 0 auth 2)
+    (enc k (hash (enc tc-0 n2-0 (privk c-0)) c-0 t-0 n1-0) (privk as-0))
+    (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k)))))
+  (label 25)
+  (parent 24)
+  (unrealized (1 1))
+  (origs (k (0 1)) (ak (0 1)) (n1 (1 0)) (n2 (1 0)))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k26">Item <a href="#t23">26</a>, Parent: <a href="#k25">25</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='229.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 229.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt-0 (enc ak n1 tk t k))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix2 26 (realized)</text></svg>
+ </div>
+
+<pre>(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tgt-0 data) (c t as name) (k ak skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 0 auth 2)
+    (enc ak-0 n1 tk-0 t k) (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak n1 tk t k)))))
+  (label 26)
+  (parent 25)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps
+    ((0 1)
+      ((c c) (c-0 c) (as as) (k k) (t t) (as-0 as) (n2 n2) (n1 n1)
+        (tc tc) (tk tk) (tgt tgt) (ak ak) (t-0 t) (n2-0 n2) (n1-0 n1)
+        (tc-0 tc) (tk-0 tk) (tgt-0 tgt-0) (ak-0 ak))))
+  (origs (k (0 1)) (ak (0 1)) (n1 (1 0)) (n2 (1 0))))</pre>
+
+<p id="k27">Item <a href="#t23">27</a>, Parent: <a href="#k25">25</a>, Child: <a href="#k28">28</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 136.920 152.460 233.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c) (t t) (as as) (k k) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k k) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix2 27</text></svg></div>
+
+<pre>(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c t as name)
+    (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t) (as as) (k k) (ak ak-0))
+  (deflistener k)
+  (precedes ((0 1) (2 0)) ((1 0) (0 0)) ((2 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (added-listener k) (enc ak-0 n1 tk-0 t k)
+    (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k))))
+    ((recv k) (send k)))
+  (label 27)
+  (parent 25)
+  (unrealized (2 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k28">Item <a href="#t23">28</a>, Parent: <a href="#k27">27</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>ak</title><circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>ak</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(cat (enc (enc ak (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t ak))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 136.920 152.460 233.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (enc (enc ak (hash (enc tc n2 (privk c)) c t n1) (privk as)) (pubk c)) c tgt (enc ak n1 tk t ak))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat (enc tc n2 (privk c)) c t n1)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c) (t t) (as as) (k ak) (ak ak-0))</title>
+   <text
+    x='139.920' y='77.460' style='text-anchor: middle;'>client</text>
+   </g>
+  <g>
+   <title>((n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c) (t t) (as as) (k ak) (ak ak))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>auth</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>pkinit-fix2 28</text></svg></div>
+
+<pre>(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c t as name)
+    (ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k ak) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t) (as as) (k ak) (ak ak-0))
+  (deflistener ak)
+  (precedes ((0 1) (2 0)) ((1 0) (0 0)) ((2 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 ak)
+  (operation nonce-test (displaced 3 0 auth 2) k (2 0)
+    (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+      (pubk c)))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc ak (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t ak))))
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc ak (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t ak))))
+    ((recv ak) (send ak)))
+  (label 28)
+  (parent 27)
+  (unrealized (2 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/plaindh.scm b/doc/examples/plaindh.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/plaindh.scm
@@ -0,0 +1,26 @@
+(herald "Plain diffie-hellman protocol with challenge-response" (algebra diffie-hellman)
+; (limit 1)
+)
+
+(defprotocol plaindh diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (n text))
+    (trace (send (exp (gen) x)) 
+           (recv h) 
+           (send (enc n (exp h x)))
+           (recv n))
+    (uniq-orig n)
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (n text))
+    (trace (recv h) 
+           (send (exp (gen) y)) 
+           (recv (enc n (exp h y)))
+           (send n))
+    (uniq-gen y))
+  (comment "Diffie-hellman key exchange followed by an encryption"))
+
+
+(defskeleton plaindh
+  (vars )
+  (defstrand init 4))
diff --git a/doc/examples/plaindh.xhtml b/doc/examples/plaindh.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/plaindh.xhtml
@@ -0,0 +1,457 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.1 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Plain diffie-hellman protocol with challenge-response</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Plain diffie-hellman protocol with challenge-response&quot;
+  (algebra diffie-hellman))
+(comment &quot;CPSA 3.2.1&quot;)
+(comment &quot;All input read from plaindh.scm&quot;)</pre>
+
+<p id="t0">Tree 0.</p>
+
+<div>
+ <svg
+  class='diagram' width='229.680pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 229.680 154.920' font-size='12.000'>
+  <text
+   x='189.720' y='101.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  <line
+   x1='89.880' y1='114.960' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='101.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol plaindh diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (n text))
+    (trace (send (exp (gen) x)) (recv h) (send (enc n (exp h x)))
+      (recv n))
+    (uniq-orig n)
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (n text))
+    (trace (recv h) (send (exp (gen) y)) (recv (enc n (exp h y)))
+      (send n))
+    (uniq-gen y)
+    (ind-zero-in (y h)))
+  (comment &quot;Diffie-hellman key exchange followed by an encryption&quot;))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Children: <a href="#k1">1</a> <a href="#k2">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n (exp h x))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>h</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (h h) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>plaindh 0</text>
+  </svg></div>
+
+<pre>(defskeleton plaindh
+  (vars (n text) (h base) (x expn))
+  (defstrand init 4 (n n) (h h) (x x))
+  (uniq-gen x)
+  (uniq-orig n)
+  (traces
+    ((send (exp (gen) x)) (recv h) (send (enc n (exp h x))) (recv n)))
+  (label 0)
+  (unrealized (0 3))
+  (origs (n (0 2)))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>n</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n (exp h (mul x y)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) y)</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(exp h x)</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 86.940 264.960 133.920 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n (exp h (mul x y)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(exp h y)</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (h (exp h x)) (y y))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n n) (h (exp h y)) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>plaindh 1</text>
+  </svg></div>
+
+<pre>(defskeleton plaindh
+  (vars (n text) (h base) (x y expn))
+  (defstrand init 4 (n n) (h (exp h y)) (x x))
+  (defstrand resp 4 (n n) (h (exp h x)) (y y))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)) ((1 3) (0 3)))
+  (ind-zero-in (y (exp h x)))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test (added-strand resp 4) n (0 3)
+    (enc n (exp h (mul x y))))
+  (traces
+    ((send (exp (gen) x)) (recv (exp h y))
+      (send (enc n (exp h (mul x y)))) (recv n))
+    ((recv (exp h x)) (send (exp (gen) y))
+      (recv (enc n (exp h (mul x y)))) (send n)))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1) (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 91.604 262.464 43.287 334.967'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp h x)</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(exp h x)</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n (exp h x))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>h</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (h h) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>plaindh 2</text>
+  </svg></div>
+
+<pre>(defskeleton plaindh
+  (vars (n text) (h base) (x expn))
+  (defstrand init 4 (n n) (h h) (x x))
+  (deflistener (exp h x))
+  (precedes ((0 0) (1 0)) ((1 1) (0 3)))
+  (uniq-gen x)
+  (uniq-orig n)
+  (operation nonce-test (added-listener (exp h x)) n (0 3)
+    (enc n (exp h x)))
+  (traces
+    ((send (exp (gen) x)) (recv h) (send (enc n (exp h x))) (recv n))
+    ((recv (exp h x)) (send (exp h x))))
+  (label 2)
+  (parent 0)
+  (unrealized (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k3">Item <a href="#t0">3</a>, Parent: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>n</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n (exp (gen) (mul x y x-0)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) y)</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 86.940 264.960 133.920 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n (exp (gen) (mul x y x-0)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul y x-0))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (h (exp (gen) (mul x x-0))) (y y))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n n) (h (exp (gen) (mul y x-0))) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>plaindh 3 (realized)</text></svg></div>
+
+<pre>(defskeleton plaindh
+  (vars (n text) (x y expn) (x-0 expr))
+  (defstrand init 4 (n n) (h (exp (gen) (mul y x-0))) (x x))
+  (defstrand resp 4 (n n) (h (exp (gen) (mul x x-0))) (y y))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)) ((1 3) (0 3)))
+  (ind-zero-in (y (exp (gen) (mul x x-0))))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test (algebra-contracted (h (exp (gen) x-0)))
+    (exp (gen) (mul x x-0)) (1 0) (exp (gen) x))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) (mul y x-0)))
+      (send (enc n (exp (gen) (mul x y x-0)))) (recv n))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul x y x-0)))) (send n)))
+  (label 3)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps ((0) ((x x) (h (exp (gen) (mul y x-0))) (n n))))
+  (origs (n (0 2))))</pre>
+
+<p id="k4">Item <a href="#t0">4</a>, Parent: <a href="#k2">2</a>, Child: <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 91.604 262.464 43.287 334.967'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>n</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n (exp (gen) (mul x x-0)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(exp (gen) x-0)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (h (exp (gen) x-0)) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>plaindh 4 (realized)</text></svg></div>
+
+<pre>(defskeleton plaindh
+  (vars (n text) (x expn) (x-0 expr))
+  (defstrand init 4 (n n) (h (exp (gen) x-0)) (x x))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (1 0)) ((1 1) (0 3)))
+  (uniq-gen x)
+  (uniq-orig n)
+  (operation nonce-test (algebra-contracted (h (exp (gen) x-0)))
+    (exp (gen) (mul x x-0)) (1 0) (exp (gen) x))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) x-0))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0)))))
+  (label 4)
+  (parent 2)
+  (unrealized)
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k5">Item <a href="#t0">5</a>, Parent: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>n</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n (exp (gen) (mul x x-0)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(exp (gen) x-0)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n n) (h (exp (gen) x-0)) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>plaindh 5 (realized)</text></svg></div>
+
+<pre>(defskeleton plaindh
+  (vars (n text) (x expn) (x-0 expr))
+  (defstrand init 4 (n n) (h (exp (gen) x-0)) (x x))
+  (uniq-gen x)
+  (uniq-orig n)
+  (operation generalization deleted (1 0))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) x-0))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n)))
+  (label 5)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (maps ((0) ((x x) (h (exp (gen) x-0)) (n n))))
+  (origs (n (0 2))))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/priority_test.scm b/doc/examples/priority_test.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/priority_test.scm
@@ -0,0 +1,28 @@
+(herald "Receive priority test protocol"
+  )
+
+(defprotocol priority_test basic
+  (defrole init
+     (vars (n1 n2 n3 n4 text) (k skey))
+     (trace
+       (send (enc n1 n1 k))
+       (recv (enc n1 n2 k))
+       (recv (enc n1 n3 k))
+       (recv (enc n1 n4 k)))
+     (priority (2 0) (3 10))
+     (non-orig k)
+     (uniq-orig n1)
+  )
+)
+
+
+; Node 4 should realize first, then node 2, then node 3.
+(defskeleton priority_test
+   (vars (n1 text))
+   (defstrand init 4 (n1 n1)))
+
+; Node 3 should realize first, then node 2, then node 4.
+(defskeleton priority_test
+   (vars (n1 text))
+   (defstrand init 4 (n1 n1))
+   (priority ((0 2) 10) ((0 3) 0)))
diff --git a/doc/examples/priority_test.xhtml b/doc/examples/priority_test.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/priority_test.xhtml
@@ -0,0 +1,356 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Receive priority test protocol</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Receive priority test protocol&quot;)
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from priority_test.scm&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t3">3</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 79.920' font-size='12.000'>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol priority_test basic
+  (defrole init
+    (vars (n1 n2 n3 n4 text) (k skey))
+    (trace (send (enc n1 n1 k)) (recv (enc n1 n2 k))
+      (recv (enc n1 n3 k)) (recv (enc n1 n4 k)))
+    (non-orig k)
+    (uniq-orig n1)
+    (priority (2 0) (3 10))))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Child: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n1 n4 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n1 n3 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 n1 k)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (n3 n3) (n4 n4) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>priority_test 0</text></svg></div>
+
+<pre>(defskeleton priority_test
+  (vars (n1 n2 n3 n4 text) (k skey))
+  (defstrand init 4 (n1 n1) (n2 n2) (n3 n3) (n4 n4) (k k))
+  (priority ((0 2) 0) ((0 3) 10))
+  (non-orig k)
+  (uniq-orig n1)
+  (label 0)
+  (unrealized (0 1) (0 2) (0 3))
+  (origs (n1 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k2">2</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n4 n4 k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n4 n3 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n4 n2 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n4 n4 k)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n4) (n2 n2) (n3 n3) (n4 n4) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>priority_test 1</text></svg></div>
+
+<pre>(defskeleton priority_test
+  (vars (n2 n3 n4 text) (k skey))
+  (defstrand init 4 (n1 n4) (n2 n2) (n3 n3) (n4 n4) (k k))
+  (priority ((0 2) 0) ((0 3) 10))
+  (non-orig k)
+  (uniq-orig n4)
+  (operation encryption-test (displaced 1 0 init 1) (enc n4 n4 k) (0 3))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1) (0 2))
+  (origs (n4 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 n2 k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n2 n3 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n2 n2 k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n2 n2 k)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n2) (n2 n2) (n3 n3) (n4 n2) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>priority_test 2</text></svg></div>
+
+<pre>(defskeleton priority_test
+  (vars (n2 n3 text) (k skey))
+  (defstrand init 4 (n1 n2) (n2 n2) (n3 n3) (n4 n2) (k k))
+  (priority ((0 2) 0) ((0 3) 10))
+  (non-orig k)
+  (uniq-orig n2)
+  (operation encryption-test (displaced 1 0 init 1) (enc n2 n2 k) (0 1))
+  (label 2)
+  (parent 1)
+  (unrealized (0 2))
+  (origs (n2 (0 0))))</pre>
+
+<p id="t3">Tree <a href="#top">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.760pt' height='79.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.760 79.920' font-size='12.000'>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  <line
+   x1='39.960' y1='39.960' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='26.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  </svg></div>
+
+<pre>(defprotocol priority_test basic
+  (defrole init
+    (vars (n1 n2 n3 n4 text) (k skey))
+    (trace (send (enc n1 n1 k)) (recv (enc n1 n2 k))
+      (recv (enc n1 n3 k)) (recv (enc n1 n4 k)))
+    (non-orig k)
+    (uniq-orig n1)
+    (priority (2 0) (3 10))))</pre>
+
+<p id="k3">Item <a href="#t3">3</a>, Child: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n1 n4 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n1 n3 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n1 n2 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n1 n1 k)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n1) (n2 n2) (n3 n3) (n4 n4) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>priority_test 3</text></svg></div>
+
+<pre>(defskeleton priority_test
+  (vars (n1 n2 n3 n4 text) (k skey))
+  (defstrand init 4 (n1 n1) (n2 n2) (n3 n3) (n4 n4) (k k))
+  (priority ((0 2) 10) ((0 3) 0))
+  (non-orig k)
+  (uniq-orig n1)
+  (label 3)
+  (unrealized (0 1) (0 2) (0 3))
+  (origs (n1 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k4">Item <a href="#t3">4</a>, Parent: <a href="#k3">3</a>, Child: <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n3 n4 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n3 n3 k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n3 n2 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n3 n3 k)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n3) (n2 n2) (n3 n3) (n4 n4) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>priority_test 4</text></svg></div>
+
+<pre>(defskeleton priority_test
+  (vars (n2 n3 n4 text) (k skey))
+  (defstrand init 4 (n1 n3) (n2 n2) (n3 n3) (n4 n4) (k k))
+  (priority ((0 2) 10) ((0 3) 0))
+  (non-orig k)
+  (uniq-orig n3)
+  (operation encryption-test (displaced 1 0 init 1) (enc n3 n3 k) (0 2))
+  (label 4)
+  (parent 3)
+  (unrealized (0 1) (0 3))
+  (origs (n3 (0 0)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k5">Item <a href="#t3">5</a>, Parent: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n2 n4 k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n2 n2 k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n2 n2 k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n2 n2 k)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n1 n2) (n2 n2) (n3 n2) (n4 n4) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>priority_test 5</text></svg></div>
+
+<pre>(defskeleton priority_test
+  (vars (n2 n4 text) (k skey))
+  (defstrand init 4 (n1 n2) (n2 n2) (n3 n2) (n4 n4) (k k))
+  (priority ((0 2) 10) ((0 3) 0))
+  (non-orig k)
+  (uniq-orig n2)
+  (operation encryption-test (displaced 1 0 init 1) (enc n2 n2 k) (0 1))
+  (label 5)
+  (parent 4)
+  (unrealized (0 3))
+  (origs (n2 (0 0))))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/station.scm b/doc/examples/station.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/station.scm
@@ -0,0 +1,33 @@
+(herald "Station-to-station protocol" (algebra diffie-hellman)
+; (limit 1)
+)
+
+(defprotocol station-to-station diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace 
+     (send (exp (gen) x)) 
+     (recv (cat h (enc (enc h (exp (gen) x) (privk b)) (exp h x))))
+     (send (enc (enc (exp (gen) x) h (privk a)) (exp h x))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace 
+     (recv h) 
+     (send (cat (exp (gen) y) (enc (enc (exp (gen) y) h (privk b)) (exp h y))))
+     (recv (enc (enc h (exp (gen) y) (privk a)) (exp h y))))
+    (uniq-gen y))
+)
+
+(defskeleton station-to-station
+  (vars (a b name))
+  (defstrand init 3 (a a) (b b))
+  (non-orig (privk b) (privk a))
+)
+
+(defskeleton station-to-station
+  (vars (a b name))
+  (defstrand resp 3 (a a) (b b))
+  (non-orig (privk a) (privk b))
+)
+
diff --git a/doc/examples/station.xhtml b/doc/examples/station.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/station.xhtml
@@ -0,0 +1,1484 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Station-to-station protocol</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Station-to-station protocol&quot; (algebra diffie-hellman))
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from station_to_station.scm&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t9">9</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.600pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.600 304.920' font-size='12.000'>
+  <text
+   x='189.720' y='251.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k7&quot;, &quot;_self&quot;)'>7</text>
+  <line
+   x1='139.800' y1='227.460' x2='189.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='176.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  <line
+   x1='189.720' y1='189.960' x2='239.640' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='176.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k6&quot;, &quot;_self&quot;)'>6</text>
+  <line
+   x1='139.800' y1='227.460' x2='189.720' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='213.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  <line
+   x1='89.880' y1='227.460' x2='139.800' y2='227.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='213.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  <line
+   x1='39.960' y1='152.460' x2='89.880' y2='227.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='101.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  <line
+   x1='39.960' y1='152.460' x2='89.880' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  <line
+   x1='89.880' y1='39.960' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='152.460' x2='89.880' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='138.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol station-to-station diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace (send (exp (gen) x))
+      (recv (cat h (enc (enc h (exp (gen) x) (privk b)) (exp h x))))
+      (send (enc (enc (exp (gen) x) h (privk a)) (exp h x))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace (recv h)
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) h (privk b)) (exp h y))))
+      (recv (enc (enc h (exp (gen) y) (privk a)) (exp h y))))
+    (uniq-gen y)
+    (ind-zero-in (y h))))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Children: <a href="#k1">1</a> <a href="#k2">2</a> <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc (enc (exp (gen) x) h (privk a)) (exp h x))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat h (enc (enc h (exp (gen) x) (privk b)) (exp h x)))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b) (h h) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>station-to-station 0</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b name) (h base) (x expn))
+  (defstrand init 3 (a a) (b b) (h h) (x x))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (label 0)
+  (unrealized (0 1))
+  (origs)
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc (enc (exp (gen) x-0) (exp (gen) x) (privk b)) (exp (gen) (mul x x-0)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) x) (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0)) (exp (gen) (mul x x-0))))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) x-0) (privk a)) (exp (gen) (mul x x-0)))</title>
+   <circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) x-0) (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b)) (exp (gen) (mul x x-0))))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((a b) (b b-0) (h (exp (gen) x)) (x x-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) x-0)) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>station-to-station 1</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b b-0 name) (x x-0 expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) x-0)) (x x))
+  (defstrand init 3 (a b) (b b-0) (h (exp (gen) x)) (x x-0))
+  (precedes ((0 0) (1 1)) ((1 2) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x x-0)
+  (operation encryption-test (added-strand init 3)
+    (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b))
+      (exp (gen) (mul x x-0))) (0 1))
+  (label 1)
+  (parent 0)
+  (unrealized (1 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k0">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul x y))))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x)</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul x y)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul x y))))</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((b b) (h (exp (gen) x)) (y y))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) y)) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>station-to-station 2 (realized)</text>
+  </svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b name) (x y expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (defstrand resp 2 (b b) (h (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand resp 2)
+    (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+      (exp (gen) (mul x y))) (0 1))
+  (label 2)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (x x) (h (exp (gen) y)))))
+  (origs))</pre>
+
+<p id="k3">Item <a href="#t0">3</a>, Parent: <a href="#k0">0</a>, Child: <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp h x)</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(exp h x)</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc (enc (exp (gen) x) h (privk a)) (exp h x))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat h (enc (enc h (exp (gen) x) (privk b)) (exp h x)))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b) (h h) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>station-to-station 3</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b name) (h base) (x expn))
+  (defstrand init 3 (a a) (b b) (h h) (x x))
+  (deflistener (exp h x))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (operation encryption-test (added-listener (exp h x))
+    (enc (enc h (exp (gen) x) (privk b)) (exp h x)) (0 1))
+  (label 3)
+  (parent 0)
+  (unrealized (0 1) (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k4">Item <a href="#t0">4</a>, Parent: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc (enc (exp (gen) x-0) (exp (gen) x) (privk b)) (exp (gen) (mul x x-0)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) x) (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0)) (exp (gen) (mul x x-0))))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 186.900 114.960 233.880 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x-0)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) x-0) (privk a)) (exp (gen) (mul x x-0)))</title>
+   <circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) x-0) (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b)) (exp (gen) (mul x x-0))))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a b) (b b-0) (h (exp (gen) x)) (x x-0))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) x-0)) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>station-to-station 4</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b b-0 name) (x x-0 expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) x-0)) (x x))
+  (defstrand init 3 (a b) (b b-0) (h (exp (gen) x)) (x x-0))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (2 0)) ((1 0) (2 0)) ((1 2) (0 1)) ((2 1) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x x-0)
+  (operation encryption-test (added-listener (exp (gen) (mul x x-0)))
+    (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0))
+      (exp (gen) (mul x x-0))) (1 1))
+  (label 4)
+  (parent 1)
+  (unrealized (2 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k5">Item <a href="#t0">5</a>, Parent: <a href="#k3">3</a>, Children: <a href="#k6">6</a> <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 189.960 Q 92.940 189.960 45.960 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) x-0) (privk a)) (exp (gen) (mul x x-0)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) x-0) (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b)) (exp (gen) (mul x x-0))))</title>
+   <circle style='fill: red;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b) (h (exp (gen) x-0)) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>station-to-station 5</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b name) (x expn) (x-0 expr))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) x-0)) (x x))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (operation nonce-test (algebra-contracted (h (exp (gen) x-0)))
+    (exp (gen) (mul x x-0)) (1 0) (exp (gen) x))
+  (label 5)
+  (parent 3)
+  (unrealized (0 1))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k6">Item <a href="#t0">6</a>, Parent: <a href="#k5">5</a>, Child: <a href="#k8">8</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc (enc (exp (gen) x-0) (exp (gen) x) (privk b)) (exp (gen) (mul x x-0)))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) x) (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0)) (exp (gen) (mul x x-0))))</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 192.900 114.960 145.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x-0)</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 92.340 225.660 44.759 261.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) x-0) (privk a)) (exp (gen) (mul x x-0)))</title>
+   <circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) x-0) (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b)) (exp (gen) (mul x x-0))))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 114.960 Q 137.111 113.906 234.262 187.853'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a b) (b b-0) (h (exp (gen) x)) (x x-0))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) x-0)) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>station-to-station 6</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b b-0 name) (x x-0 expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) x-0)) (x x))
+  (deflistener (exp (gen) (mul x x-0)))
+  (defstrand init 3 (a b) (b b-0) (h (exp (gen) x)) (x x-0))
+  (precedes ((0 0) (1 0)) ((0 0) (2 1)) ((1 1) (0 1)) ((2 0) (1 0))
+    ((2 2) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x x-0)
+  (operation encryption-test (added-strand init 3)
+    (enc (exp (gen) x-0) (exp (gen) x) (privk b)) (0 1))
+  (label 6)
+  (parent 5)
+  (unrealized (1 0) (2 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k7">Item <a href="#t0">7</a>, Parent: <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul x y))))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul x y))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul x y))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul x y)))</title>
+   <circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul x y))))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 136.920 77.460 233.880 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((b b) (h (exp (gen) x)) (y y))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) y)) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>station-to-station 7</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b name) (x y expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (deflistener (exp (gen) (mul x y)))
+  (defstrand resp 2 (b b) (h (exp (gen) x)) (y y))
+  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand resp 2)
+    (enc (exp (gen) y) (exp (gen) x) (privk b)) (0 1))
+  (label 7)
+  (parent 5)
+  (unrealized (1 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k8">Item <a href="#t0">8</a>, Parent: <a href="#k6">6</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 292.860 189.960 245.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle style='fill: red;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc (enc (exp (gen) x-0) (exp (gen) x) (privk b)) (exp (gen) (mul x x-0)))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) x) (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0)) (exp (gen) (mul x x-0))))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 192.900 114.960 145.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 114.960 Q 286.860 114.960 333.840 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x-0)</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 189.960 Q 92.340 225.660 44.759 261.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul x x-0))</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) x-0) (privk a)) (exp (gen) (mul x x-0)))</title>
+   <circle cx='39.960' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) x-0) (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b)) (exp (gen) (mul x x-0))))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 114.960 Q 86.940 114.960 133.920 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 114.960 Q 186.900 77.460 333.840 114.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a b) (b b-0) (h (exp (gen) x)) (x x-0))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) x-0)) (x x))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>station-to-station 8</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b b-0 name) (x x-0 expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) x-0)) (x x))
+  (deflistener (exp (gen) (mul x x-0)))
+  (defstrand init 3 (a b) (b b-0) (h (exp (gen) x)) (x x-0))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 0) (1 0))
+    ((2 0) (3 0)) ((2 2) (0 1)) ((3 1) (2 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x x-0)
+  (operation encryption-test (added-listener (exp (gen) (mul x x-0)))
+    (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0))
+      (exp (gen) (mul x x-0))) (2 1))
+  (label 8)
+  (parent 6)
+  (unrealized (1 0) (3 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="t9">Tree <a href="#top">9</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.600pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.600 304.920' font-size='12.000'>
+  <text
+   x='239.640' y='251.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k17&quot;, &quot;_self&quot;)'>17</text>
+  <line
+   x1='189.720' y1='227.460' x2='239.640' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='176.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k16&quot;, &quot;_self&quot;)'>16</text>
+  <line
+   x1='189.720' y1='227.460' x2='239.640' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='213.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k15&quot;, &quot;_self&quot;)'>15</text>
+  <line
+   x1='139.800' y1='227.460' x2='189.720' y2='227.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='213.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k14&quot;, &quot;_self&quot;)'>14</text>
+  <line
+   x1='89.880' y1='227.460' x2='139.800' y2='227.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='213.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k11&quot;, &quot;_self&quot;)'>11</text>
+  <line
+   x1='39.960' y1='152.460' x2='89.880' y2='227.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k13&quot;, &quot;_self&quot;)'>13</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k12&quot;, &quot;_self&quot;)'>12</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k10&quot;, &quot;_self&quot;)'>10</text>
+  <line
+   x1='39.960' y1='152.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='138.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k9&quot;, &quot;_self&quot;)'>9</text>
+  </svg></div>
+
+<pre>(defprotocol station-to-station diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace (send (exp (gen) x))
+      (recv (cat h (enc (enc h (exp (gen) x) (privk b)) (exp h x))))
+      (send (enc (enc (exp (gen) x) h (privk a)) (exp h x))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace (recv h)
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) h (privk b)) (exp h y))))
+      (recv (enc (enc h (exp (gen) y) (privk a)) (exp h y))))
+    (uniq-gen y)
+    (ind-zero-in (y h))))</pre>
+
+<p id="k9">Item <a href="#t9">9</a>, Children: <a href="#k10">10</a> <a href="#k11">11</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc (enc h (exp (gen) y) (privk a)) (exp h y))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) h (privk b)) (exp h y)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>h</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b) (h h) (y y))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='39.960' y='39.960'
+   style='text-anchor: middle;'>station-to-station 9</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b name) (h base) (y expn))
+  (defstrand resp 3 (a a) (b b) (h h) (y y))
+  (ind-zero-in (y h))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (label 9)
+  (unrealized (0 2))
+  (origs)
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k10">Item <a href="#t9">10</a>, Parent: <a href="#k9">9</a>, Children: <a href="#k12">12</a> <a href="#k13">13</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul y x)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0)) (exp (gen) (mul y x))))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul y x)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul y x))))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b-0) (h (exp (gen) y)) (x x))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) x)) (y y))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>station-to-station 10</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b b-0 name) (y x expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b-0) (h (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (operation encryption-test (added-strand init 3)
+    (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+      (exp (gen) (mul y x))) (0 2))
+  (label 10)
+  (parent 9)
+  (unrealized (1 1))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k11">Item <a href="#t9">11</a>, Parent: <a href="#k9">9</a>, Child: <a href="#k14">14</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp h y)</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(exp h y)</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc (enc h (exp (gen) y) (privk a)) (exp h y))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) h (privk b)) (exp h y)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>h</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b) (h h) (y y))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>station-to-station 11</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b name) (h base) (y expn))
+  (defstrand resp 3 (a a) (b b) (h h) (y y))
+  (deflistener (exp h y))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (ind-zero-in (y h))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (operation encryption-test (added-listener (exp h y))
+    (enc (enc h (exp (gen) y) (privk a)) (exp h y)) (0 2))
+  (label 11)
+  (parent 9)
+  (unrealized (0 2) (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k12">Item <a href="#t9">12</a>, Parent: <a href="#k10">10</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul x y)))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul x y))))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul x y)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul x y))))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b) (h (exp (gen) y)) (x x))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) x)) (y y))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>station-to-station 12 (realized)</text>
+  </svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b name) (x y expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+      (exp (gen) (mul x y))) (1 1))
+  (label 12)
+  (parent 10)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (y y) (h (exp (gen) x)))))
+  (origs))</pre>
+
+<p id="k13">Item <a href="#t9">13</a>, Parent: <a href="#k10">10</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul y x))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul y x))</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul y x)))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0)) (exp (gen) (mul y x))))</title>
+   <circle style='fill: blue;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 114.960 Q 92.940 114.960 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='139.920' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul y x)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 136.920 152.460 233.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul y x))))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b-0) (h (exp (gen) y)) (x x))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) x)) (y y))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>station-to-station 13</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b b-0 name) (y x expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b-0) (h (exp (gen) y)) (x x))
+  (deflistener (exp (gen) (mul y x)))
+  (precedes ((0 1) (2 0)) ((1 0) (0 0)) ((1 2) (0 2)) ((2 1) (1 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (operation encryption-test (added-listener (exp (gen) (mul y x)))
+    (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+      (exp (gen) (mul y x))) (1 1))
+  (label 13)
+  (parent 10)
+  (unrealized (2 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k14">Item <a href="#t9">14</a>, Parent: <a href="#k11">11</a>, Child: <a href="#k15">15</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul y y-0))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul y y-0))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) y-0) (exp (gen) y) (privk a)) (exp (gen) (mul y y-0)))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) y-0) (privk b)) (exp (gen) (mul y y-0))))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) y-0)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b) (h (exp (gen) y-0)) (y y))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960'
+   style='text-anchor: middle;'>station-to-station 14</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b name) (y expn) (y-0 expr))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (operation nonce-test (algebra-contracted (h (exp (gen) y-0)))
+    (exp (gen) (mul y y-0)) (1 0) (exp (gen) y)
+    (enc (enc (exp (gen) y) (exp (gen) y-0) (privk b))
+      (exp (gen) (mul y y-0))))
+  (label 14)
+  (parent 11)
+  (unrealized (0 2))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k15">Item <a href="#t9">15</a>, Parent: <a href="#k14">14</a>, Children: <a href="#k16">16</a> <a href="#k17">17</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul y x)))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0)) (exp (gen) (mul y x))))</title>
+   <circle style='fill: red;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 142.920 77.460 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul y x))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul y x))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul y x)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 136.920 152.460 233.880 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul y x))))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b-0) (h (exp (gen) y)) (x x))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) x)) (y y))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>station-to-station 15</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b b-0 name) (y x expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (deflistener (exp (gen) (mul y x)))
+  (defstrand init 3 (a a) (b b-0) (h (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 0)) ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0))
+    ((2 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (operation encryption-test (added-strand init 3)
+    (enc (exp (gen) x) (exp (gen) y) (privk a)) (0 2))
+  (label 15)
+  (parent 14)
+  (unrealized (1 0) (2 1))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k16">Item <a href="#t9">16</a>, Parent: <a href="#k15">15</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='304.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 304.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul x y)))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul x y))))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 142.920 77.460 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul x y))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul x y))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul x y)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 136.920 152.460 233.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul x y))))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b) (h (exp (gen) y)) (x x))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) x)) (y y))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>station-to-station 16</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b name) (x y expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (deflistener (exp (gen) (mul x y)))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 0)) ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0))
+    ((2 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (displaced 3 0 resp 2)
+    (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+      (exp (gen) (mul x y))) (2 1))
+  (label 16)
+  (parent 15)
+  (unrealized (1 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k17">Item <a href="#t9">17</a>, Parent: <a href="#k15">15</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 264.960 Q 292.860 264.960 245.880 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul y x))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul y x))</title>
+   <circle style='fill: red;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.920 302.460 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul y x)))</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0)) (exp (gen) (mul y x))))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 239.880 114.960 Q 142.920 77.460 45.960 114.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) x)</title>
+   <circle cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 92.340 300.660 44.759 336.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(exp (gen) (mul y x))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(exp (gen) (mul y x))</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>(enc (enc (exp (gen) x) (exp (gen) y) (privk a)) (exp (gen) (mul y x)))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g>
+   <title>(cat (exp (gen) y) (enc (enc (exp (gen) y) (exp (gen) x) (privk b)) (exp (gen) (mul y x))))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(exp (gen) x)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((a a) (b b-0) (h (exp (gen) y)) (x x))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((a a) (b b) (h (exp (gen) x)) (y y))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>station-to-station 17</text></svg></div>
+
+<pre>(defskeleton station-to-station
+  (vars (a b b-0 name) (y x expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (deflistener (exp (gen) (mul y x)))
+  (defstrand init 3 (a a) (b b-0) (h (exp (gen) y)) (x x))
+  (deflistener (exp (gen) (mul y x)))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 0) (0 0))
+    ((2 2) (0 2)) ((3 1) (2 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (operation encryption-test (added-listener (exp (gen) (mul y x)))
+    (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+      (exp (gen) (mul y x))) (2 1))
+  (label 17)
+  (parent 15)
+  (unrealized (1 0) (3 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+</body>
+</html>
diff --git a/doc/examples/subsort_test.scm b/doc/examples/subsort_test.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/subsort_test.scm
@@ -0,0 +1,43 @@
+(herald "Subsort constraint test protocol"
+   (comment "First, third, and fourth skeletons should have a shape,"
+            "second should be dead."))
+
+(defprotocol subsorttest basic
+  (defrole init
+     (vars (n1 n2 text) (k skey))
+     (trace
+       (send (cat n1 (enc n1 n2 k)))
+       (recv n2))
+     (non-orig k)
+     (uniq-orig n1 n2)
+  )
+)
+
+;;; With no declaration, a shape should be found where n1 = n2.
+(defskeleton subsorttest
+   (vars (n1 n2 text) (k skey))
+   (defstrand init 2) (n1 n1) (n2 n2) (k k))
+
+;;; By declaring n1 to be of subsort A and n2 to be of subsort B, the
+;;; unification of n1 and n2 is prevented, so no shape should exist.
+(defskeleton subsorttest
+   (vars (n1 n2 text))
+   (defstrand init 2 (n1 n1) (n2 n2))
+   (subsort (A n1) (B n2))
+)
+
+;;; Here, only n1 is declared to be of a subsort.  Unification with n2
+;;; is allowed, so a shape should be found.
+(defskeleton subsorttest
+   (vars (n1 n2 text))
+   (defstrand init 2 (n1 n1) (n2 n2))
+   (subsort (A n1))
+)
+
+;;; Here, both n1 and n2 are declared to be of the same subsort (A),
+;;; which should allow their unification.
+(defskeleton subsorttest
+   (vars (n1 n2 text))
+   (defstrand init 2 (n1 n1) (n2 n2))
+   (subsort (A n1 n2))
+)
diff --git a/doc/examples/woolam.scm b/doc/examples/woolam.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/woolam.scm
@@ -0,0 +1,26 @@
+(herald "Woo-Lam Protocol")
+
+(defprotocol woolam basic
+  (defrole init (vars (a s name) (n text))
+    (trace
+     (send a)
+     (recv n)
+     (send (enc n (ltk a s))))
+    (non-orig (ltk a s)))
+  (defrole resp (vars (a s b name) (n text))
+    (trace
+     (recv a)
+     (send n)
+     (recv (enc n (ltk a s)))
+     (send (enc a (enc n (ltk a s)) (ltk b s)))
+     (recv (enc a n (ltk b s))))
+    (non-orig (ltk b s))
+    (uniq-orig n))
+  (defrole serv (vars (a s b name) (n text))
+    (trace
+     (recv (enc a (enc n (ltk a s)) (ltk b s)))
+     (send (enc a n (ltk b s))))))
+
+(defskeleton woolam (vars (n text) (a s name))
+  (defstrand resp 5 (a a) (s s))
+  (non-orig (ltk a s)))
diff --git a/doc/examples/yahalom.scm b/doc/examples/yahalom.scm
new file mode 100644
--- /dev/null
+++ b/doc/examples/yahalom.scm
@@ -0,0 +1,36 @@
+(herald "Yahalom Protocol with Forwarding Removed"
+	(algebra diffie-hellman)
+   (bound 12))
+
+(defprotocol yahalom diffie-hellman
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (k skey))
+    (trace (send (cat a n-a))
+	   (recv (enc b k n-a n-b (ltk a c)))
+	   (send (enc n-b k))))
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (k skey))
+    (trace (recv (cat a n-a))
+	   (send (cat b (enc a n-a n-b (ltk b c))))
+	   (recv (enc a k (ltk b c)))
+	   (recv (enc n-b k))))
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (k skey))
+    (trace (recv (cat b (enc a n-a n-b (ltk b c))))
+	   (send (enc b k n-a n-b (ltk a c)))
+	   (send (enc a k (ltk b c))))
+    (uniq-orig k)))
+
+(defskeleton yahalom
+  (vars (a b c name) (n-b text))
+  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b))
+  (non-orig (ltk b c) (ltk a c))
+  (uniq-orig n-b))
+
+;;; Ensure encryption key remains secret.
+(defskeleton yahalom
+  (vars (a b c name) (n-b text) (k skey))
+  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b) (k k))
+  (deflistener k)
+  (non-orig (ltk b c) (ltk a c))
+  (uniq-orig n-b))
diff --git a/doc/examples/yahalom.xhtml b/doc/examples/yahalom.xhtml
new file mode 100644
--- /dev/null
+++ b/doc/examples/yahalom.xhtml
@@ -0,0 +1,7364 @@
+<?xml version="1.0"?>
+<!-- CPSA 3.2.2 -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Yahalom Protocol with Forwarding Removed</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+ <style>
+  svg.diagram { border-width: 1px; border-style: solid }
+ </style>
+</head>
+<body>
+
+<pre>(herald &quot;Yahalom Protocol with Forwarding Removed&quot;
+  (algebra diffie-hellman) (bound 12))
+(comment &quot;CPSA 3.2.2&quot;)
+(comment &quot;All input read from yahalom.scm&quot;)</pre>
+
+<p id="top">Trees: <a href="#t0">0</a> <a href="#t52">52</a>.</p>
+
+<p id="t0">Tree <a href="#top">0</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='629.040pt' height='1729.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 629.040 1729.920' font-size='12.000'>
+  <text
+   x='239.640' y='1676.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k13&quot;, &quot;_self&quot;)'>13</text>
+  <line
+   x1='189.720' y1='1689.960' x2='239.640' y2='1689.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='1676.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k7&quot;, &quot;_self&quot;)'>7</text>
+  <line
+   x1='139.800' y1='1614.960' x2='189.720' y2='1689.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='1601.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k38&quot;, &quot;_self&quot;)'>38</text>
+  <line
+   x1='339.480' y1='1614.960' x2='389.400' y2='1614.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='1601.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k27&quot;, &quot;_self&quot;)'>27</text>
+  <line
+   x1='289.560' y1='1577.460' x2='339.480' y2='1614.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='1526.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k47&quot;, &quot;_self&quot;)'>47</text>
+  <line
+   x1='389.400' y1='1539.960' x2='439.320' y2='1539.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='1526.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k37&quot;, &quot;_self&quot;)'>37</text>
+  <line
+   x1='339.480' y1='1539.960' x2='389.400' y2='1539.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='1526.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k26&quot;, &quot;_self&quot;)'>26</text>
+  <line
+   x1='289.560' y1='1577.460' x2='339.480' y2='1539.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='1563.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k18&quot;, &quot;_self&quot;)'>18</text>
+  <line
+   x1='239.640' y1='1577.460' x2='289.560' y2='1577.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='1563.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k12&quot;, &quot;_self&quot;)'>12</text>
+  <line
+   x1='189.720' y1='1577.460' x2='239.640' y2='1577.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='1563.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k6&quot;, &quot;_self&quot;)'>6</text>
+  <line
+   x1='139.800' y1='1614.960' x2='189.720' y2='1577.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='1601.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k3&quot;, &quot;_self&quot;)'>3</text>
+  <line
+   x1='89.880' y1='864.960' x2='139.800' y2='1614.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='1451.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k11&quot;, &quot;_self&quot;)'>11</text>
+  <line
+   x1='189.720' y1='1464.960' x2='239.640' y2='1464.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='1451.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k5&quot;, &quot;_self&quot;)'>5</text>
+  <line
+   x1='139.800' y1='752.460' x2='189.720' y2='1464.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='1376.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k36&quot;, &quot;_self&quot;)'>36</text>
+  <line
+   x1='339.480' y1='1389.960' x2='389.400' y2='1389.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='1376.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k25&quot;, &quot;_self&quot;)'>25</text>
+  <line
+   x1='289.560' y1='1202.460' x2='339.480' y2='1389.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='1301.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k46&quot;, &quot;_self&quot;)'>46</text>
+  <line
+   x1='389.400' y1='1314.960' x2='439.320' y2='1314.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='1301.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k35&quot;, &quot;_self&quot;)'>35</text>
+  <line
+   x1='339.480' y1='1239.960' x2='389.400' y2='1314.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='1226.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k16&quot;, &quot;_self&quot;)'>16</text>
+  <line
+   x1='439.320' y1='1239.960' x2='489.240' y2='1239.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='1226.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k45&quot;, &quot;_self&quot;)'>45</text>
+  <line
+   x1='389.400' y1='1239.960' x2='439.320' y2='1239.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='1226.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k34&quot;, &quot;_self&quot;)'>34</text>
+  <line
+   x1='339.480' y1='1239.960' x2='389.400' y2='1239.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='1151.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k30&quot;, &quot;_self&quot;)'>30</text>
+  <line
+   x1='339.480' y1='1239.960' x2='389.400' y2='1164.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='1226.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k24&quot;, &quot;_self&quot;)'>24</text>
+  <line
+   x1='289.560' y1='1202.460' x2='339.480' y2='1239.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='1076.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k16&quot;, &quot;_self&quot;)'>16</text>
+  <line
+   x1='339.480' y1='1089.960' x2='389.400' y2='1089.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='1076.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k23&quot;, &quot;_self&quot;)'>23</text>
+  <line
+   x1='289.560' y1='1202.460' x2='339.480' y2='1089.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='1001.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k20&quot;, &quot;_self&quot;)'>20</text>
+  <line
+   x1='289.560' y1='1202.460' x2='339.480' y2='1014.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='1188.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k17&quot;, &quot;_self&quot;)'>17</text>
+  <line
+   x1='239.640' y1='1127.460' x2='289.560' y2='1202.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='926.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  <line
+   x1='289.560' y1='939.960' x2='339.480' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='926.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k16&quot;, &quot;_self&quot;)'>16</text>
+  <line
+   x1='239.640' y1='1127.460' x2='289.560' y2='939.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='851.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k14&quot;, &quot;_self&quot;)'>14</text>
+  <line
+   x1='239.640' y1='1127.460' x2='289.560' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='1113.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k10&quot;, &quot;_self&quot;)'>10</text>
+  <line
+   x1='189.720' y1='714.960' x2='239.640' y2='1127.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='776.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k22&quot;, &quot;_self&quot;)'>22</text>
+  <line
+   x1='289.560' y1='789.960' x2='339.480' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='776.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k15&quot;, &quot;_self&quot;)'>15</text>
+  <line
+   x1='239.640' y1='452.460' x2='289.560' y2='789.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='701.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k33&quot;, &quot;_self&quot;)'>33</text>
+  <line
+   x1='339.480' y1='714.960' x2='389.400' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='701.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k21&quot;, &quot;_self&quot;)'>21</text>
+  <line
+   x1='289.560' y1='452.460' x2='339.480' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='626.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k44&quot;, &quot;_self&quot;)'>44</text>
+  <line
+   x1='389.400' y1='639.960' x2='439.320' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='626.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k32&quot;, &quot;_self&quot;)'>32</text>
+  <line
+   x1='339.480' y1='452.460' x2='389.400' y2='639.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='551.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k43&quot;, &quot;_self&quot;)'>43</text>
+  <line
+   x1='389.400' y1='564.960' x2='439.320' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='551.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k31&quot;, &quot;_self&quot;)'>31</text>
+  <line
+   x1='339.480' y1='452.460' x2='389.400' y2='564.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='476.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k50&quot;, &quot;_self&quot;)'>50</text>
+  <line
+   x1='439.320' y1='489.960' x2='489.240' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='476.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k42&quot;, &quot;_self&quot;)'>42</text>
+  <line
+   x1='389.400' y1='414.960' x2='439.320' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='401.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k49&quot;, &quot;_self&quot;)'>49</text>
+  <line
+   x1='439.320' y1='414.960' x2='489.240' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='401.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k41&quot;, &quot;_self&quot;)'>41</text>
+  <line
+   x1='389.400' y1='414.960' x2='439.320' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='589.080' y='326.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k28&quot;, &quot;_self&quot;)'>28</text>
+  <line
+   x1='539.160' y1='339.960' x2='589.080' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='539.160' y='326.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k51&quot;, &quot;_self&quot;)'>51</text>
+  <line
+   x1='489.240' y1='339.960' x2='539.160' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='326.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k48&quot;, &quot;_self&quot;)'>48</text>
+  <line
+   x1='439.320' y1='339.960' x2='489.240' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='326.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k40&quot;, &quot;_self&quot;)'>40</text>
+  <line
+   x1='389.400' y1='414.960' x2='439.320' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='401.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k30&quot;, &quot;_self&quot;)'>30</text>
+  <line
+   x1='339.480' y1='452.460' x2='389.400' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='489.240' y='251.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k28&quot;, &quot;_self&quot;)'>28</text>
+  <line
+   x1='439.320' y1='264.960' x2='489.240' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='251.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k39&quot;, &quot;_self&quot;)'>39</text>
+  <line
+   x1='389.400' y1='264.960' x2='439.320' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='251.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k29&quot;, &quot;_self&quot;)'>29</text>
+  <line
+   x1='339.480' y1='452.460' x2='389.400' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='438.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k20&quot;, &quot;_self&quot;)'>20</text>
+  <line
+   x1='289.560' y1='452.460' x2='339.480' y2='452.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='439.320' y='176.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  <line
+   x1='389.400' y1='189.960' x2='439.320' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='389.400' y='176.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k28&quot;, &quot;_self&quot;)'>28</text>
+  <line
+   x1='339.480' y1='189.960' x2='389.400' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='339.480' y='176.040' style='text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k19&quot;, &quot;_self&quot;)'>19</text>
+  <line
+   x1='289.560' y1='452.460' x2='339.480' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='438.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k14&quot;, &quot;_self&quot;)'>14</text>
+  <line
+   x1='239.640' y1='452.460' x2='289.560' y2='452.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='289.560' y='101.040'
+   style='font-style: italic; text-anchor: middle; fill: green;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  <line
+   x1='239.640' y1='452.460' x2='289.560' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='438.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k9&quot;, &quot;_self&quot;)'>9</text>
+  <line
+   x1='189.720' y1='714.960' x2='239.640' y2='452.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='239.640' y='26.040'
+   style='font-weight: bold; text-anchor: middle; fill: blue;'
+   onclick='window.open(&quot;#k8&quot;, &quot;_self&quot;)'>8</text>
+  <line
+   x1='189.720' y1='714.960' x2='239.640' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='701.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k4&quot;, &quot;_self&quot;)'>4</text>
+  <line
+   x1='139.800' y1='752.460' x2='189.720' y2='714.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='738.540' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k2&quot;, &quot;_self&quot;)'>2</text>
+  <line
+   x1='89.880' y1='864.960' x2='139.800' y2='752.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='851.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k1&quot;, &quot;_self&quot;)'>1</text>
+  <line
+   x1='39.960' y1='864.960' x2='89.880' y2='864.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='851.040' style='text-anchor: middle; fill: black;'
+   onclick='window.open(&quot;#k0&quot;, &quot;_self&quot;)'>0</text>
+  </svg></div>
+
+<pre>(defprotocol yahalom diffie-hellman
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (k skey))
+    (trace (send (cat a n-a)) (recv (enc b k n-a n-b (ltk a c)))
+      (send (enc n-b k))))
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (k skey))
+    (trace (recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b c))))
+      (recv (enc a k (ltk b c))) (recv (enc n-b k))))
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (k skey))
+    (trace (recv (cat b (enc a n-a n-b (ltk b c))))
+      (send (enc b k n-a n-b (ltk a c))) (send (enc a k (ltk b c))))
+    (uniq-orig k)))</pre>
+
+<p id="k0">Item <a href="#t0">0</a>, Child: <a href="#k1">1</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='79.920pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 79.920 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='39.960' y='39.960' style='text-anchor: middle;'>yahalom 0</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b)
+  (label 0)
+  (unrealized (0 2) (0 3))
+  (origs (n-b (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k1">Item <a href="#t0">1</a>, Parent: <a href="#k0">0</a>, Children: <a href="#k2">2</a> <a href="#k3">3</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 264.960 Q 92.940 264.960 45.960 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: red;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>yahalom 1</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (precedes ((1 2) (0 2)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand serv 3) (enc a k (ltk b c))
+    (0 2))
+  (label 1)
+  (parent 0)
+  (unrealized (0 3) (1 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k2">Item <a href="#t0">2</a>, Parent: <a href="#k1">1</a>, Children: <a href="#k4">4</a> <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>yahalom 2</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (precedes ((0 1) (1 0)) ((1 2) (0 2)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc a n-a-0 n-b-0 (ltk b c)) (1 0))
+  (label 2)
+  (parent 1)
+  (unrealized (0 3))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k3">Item <a href="#t0">3</a>, Parent: <a href="#k1">1</a>, Children: <a href="#k6">6</a> <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>yahalom 3</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (precedes ((1 2) (0 2)) ((2 1) (1 0)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand resp 2)
+    (enc a n-a-0 n-b-0 (ltk b c)) (1 0))
+  (label 3)
+  (parent 1)
+  (unrealized (0 3))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k4">Item <a href="#t0">4</a>, Parent: <a href="#k2">2</a>, Children: <a href="#k8">8</a> <a href="#k9">9</a> <a href="#k10">10</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 339.960 Q 142.729 338.906 45.578 412.852'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 186.900 264.960 233.880 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>yahalom 4</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (2 1)) ((1 2) (0 2)) ((2 2) (0 3)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand init 3) (enc n-b k) (0 3))
+  (label 4)
+  (parent 2)
+  (unrealized (2 1))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k5">Item <a href="#t0">5</a>, Parent: <a href="#k2">2</a>, Child: <a href="#k11">11</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 339.960 Q 142.729 338.906 45.578 412.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 186.900 264.960 233.880 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>yahalom 5</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (deflistener k)
+  (precedes ((0 1) (1 0)) ((1 1) (2 0)) ((1 2) (0 2)) ((2 1) (0 3)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation encryption-test (added-listener k) (enc n-b k) (0 3))
+  (label 5)
+  (parent 2)
+  (unrealized (0 3) (2 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k6">Item <a href="#t0">6</a>, Parent: <a href="#k3">3</a>, Child: <a href="#k12">12</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 339.960 Q 192.810 339.232 45.781 413.504'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-1 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-1)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 264.960 Q 186.900 227.460 333.840 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g>
+   <title>((n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>yahalom 6</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 n-a-1 text) (a b c a-0 b-0 c-0 name)
+    (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (defstrand init 3 (n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (precedes ((0 1) (3 1)) ((1 1) (3 1)) ((1 2) (0 2)) ((2 1) (1 0))
+    ((3 2) (0 3)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand init 3) (enc n-b k) (0 3))
+  (label 6)
+  (parent 3)
+  (unrealized (3 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k7">Item <a href="#t0">7</a>, Parent: <a href="#k3">3</a>, Child: <a href="#k13">13</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='264.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 339.960 Q 192.810 339.232 45.781 413.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>yahalom 7</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (deflistener k)
+  (precedes ((1 1) (3 0)) ((1 2) (0 2)) ((2 1) (1 0)) ((3 1) (0 3)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation encryption-test (added-listener k) (enc n-b k) (0 3))
+  (label 7)
+  (parent 3)
+  (unrealized (0 3) (3 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k8">Item <a href="#t0">8</a>, Parent: <a href="#k4">4</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 339.960 Q 142.729 338.906 45.578 412.852'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 186.900 264.960 233.880 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960'
+   style='text-anchor: middle;'>yahalom 8 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (2 1)) ((1 2) (0 2)) ((2 2) (0 3)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation nonce-test (contracted (a-0 a) (b-0 b) (c-0 c) (n-a-0 n-a))
+    n-b (2 1) (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c)))
+  (label 8)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (c c) (n-b n-b) (n-a n-a) (k k))))
+  (origs (k (1 1)) (n-b (0 1))))</pre>
+
+<p id="k9">Item <a href="#t0">9</a>, Parent: <a href="#k4">4</a>, Children: <a href="#k14">14</a> <a href="#k15">15</a>, Seen Child: <a href="#k8">8</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>yahalom 9</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (precedes ((0 1) (1 0)) ((1 1) (3 1)) ((1 2) (0 2)) ((2 2) (0 3))
+    ((3 2) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation nonce-test (added-strand init 3) n-b (2 1)
+    (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c)))
+  (label 9)
+  (parent 4)
+  (seen 8)
+  (unrealized (2 1))
+  (comment &quot;3 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k10">Item <a href="#t0">10</a>, Parent: <a href="#k4">4</a>, Children: <a href="#k16">16</a> <a href="#k17">17</a>, Seen Child: <a href="#k14">14</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 264.960 Q 292.860 264.960 245.880 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.729 338.906 45.578 412.852'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 186.900 264.960 233.880 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>yahalom 10</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((1 1) (2 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-strand serv 2) n-b (2 1)
+    (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c)))
+  (label 10)
+  (parent 4)
+  (seen 14)
+  (unrealized (2 1))
+  (comment &quot;3 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k11">Item <a href="#t0">11</a>, Parent: <a href="#k5">5</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='339.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 339.960 Q 186.900 339.960 233.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>yahalom 11</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (deflistener k)
+  (precedes ((0 1) (1 0)) ((1 2) (0 2)) ((1 2) (2 0)) ((2 1) (0 3)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation nonce-test (displaced 3 1 serv 3) k (2 0)
+    (enc b k n-a n-b (ltk a c)))
+  (label 11)
+  (parent 5)
+  (unrealized (0 3) (2 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k12">Item <a href="#t0">12</a>, Parent: <a href="#k6">6</a>, Child: <a href="#k18">18</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 264.960 Q 392.820 264.960 345.840 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 192.810 339.232 45.781 413.504'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-1 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-1)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='239.880' y='39.960' style='text-anchor: middle;'>yahalom 12</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 n-a-1 text) (a b c a-0 b-0 c-0 name)
+    (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (defstrand init 3 (n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (4 0)) ((1 1) (3 1)) ((1 2) (0 2)) ((2 1) (1 0))
+    ((3 2) (0 3)) ((4 1) (3 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-strand serv 2) n-b (3 1)
+    (enc a n-a n-b (ltk b c)))
+  (label 12)
+  (parent 6)
+  (unrealized (3 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k13">Item <a href="#t0">13</a>, Parent: <a href="#k7">7</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='339.960' x2='339.840' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 414.960 Q 192.900 377.460 45.960 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='339.840' cy='414.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='339.840' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 339.960 Q 236.880 302.460 333.840 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>yahalom 13</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (deflistener k)
+  (precedes ((1 2) (0 2)) ((1 2) (3 0)) ((2 1) (1 0)) ((3 1) (0 3)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation nonce-test (displaced 4 1 serv 3) k (3 0)
+    (enc b k n-a-0 n-b-0 (ltk a c)))
+  (label 13)
+  (parent 7)
+  (unrealized (0 3) (3 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k14">Item <a href="#t0">14</a>, Parent: <a href="#k9">9</a>, Children: <a href="#k19">19</a> <a href="#k20">20</a> <a href="#k21">21</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 264.960 Q 342.649 263.906 245.498 337.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='239.880' y='39.960' style='text-anchor: middle;'>yahalom 14</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((1 1) (3 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-strand serv 2) n-b (2 1) (enc n-b k)
+    (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c)))
+  (label 14)
+  (parent 9)
+  (unrealized (2 1))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k15">Item <a href="#t0">15</a>, Parent: <a href="#k9">9</a>, Child: <a href="#k22">22</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='264.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 339.960 Q 342.840 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 264.960 Q 286.860 227.460 433.800 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='239.880' y='39.960' style='text-anchor: middle;'>yahalom 15</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (deflistener k)
+  (precedes ((0 1) (1 0)) ((1 1) (3 1)) ((1 1) (4 0)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation nonce-test (added-listener k) n-b (2 1) (enc n-b k)
+    (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c)))
+  (label 15)
+  (parent 9)
+  (unrealized (4 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k16">Item <a href="#t0">16</a>, Parent: <a href="#k10">10</a>, Seen Child: <a href="#k8">8</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 264.960 Q 292.860 264.960 245.880 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.729 338.906 45.578 412.852'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 186.900 264.960 233.880 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>yahalom 16 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((1 1) (2 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (contracted (a-0 a) (b-0 b) (c-0 c) (n-a-0 n-a))
+    n-b (2 1) (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 16)
+  (parent 10)
+  (seen 8)
+  (unrealized)
+  (comment &quot;1 in cohort - 0 not yet seen&quot;))</pre>
+
+<p id="k17">Item <a href="#t0">17</a>, Parent: <a href="#k10">10</a>, Children: <a href="#k23">23</a> <a href="#k24">24</a> <a href="#k25">25</a>, Seen Child: <a href="#k20">20</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 339.960 Q 342.840 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 264.960 Q 386.820 264.960 433.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 187.500 300.660 235.081 336.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='239.880' y='39.960' style='text-anchor: middle;'>yahalom 17</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((1 1) (2 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 1) (4 1)) ((4 2) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-strand init 3) n-b (2 1)
+    (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 17)
+  (parent 10)
+  (seen 20)
+  (unrealized (2 1))
+  (comment &quot;4 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k18">Item <a href="#t0">18</a>, Parent: <a href="#k12">12</a>, Children: <a href="#k26">26</a> <a href="#k27">27</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='264.960' x2='339.840' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 339.960 Q 442.800 302.460 345.840 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 414.960 Q 192.900 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-1 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-1)</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 237.071 263.906 334.222 337.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='289.860' y='39.960' style='text-anchor: middle;'>yahalom 18</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 n-a-1 text) (a b c a-0 b-0 c-0 name)
+    (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (defstrand init 3 (n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (precedes ((0 1) (4 0)) ((1 1) (3 1)) ((1 2) (0 2)) ((2 1) (1 0))
+    ((3 2) (0 3)) ((4 1) (5 1)) ((5 2) (3 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-strand init 3) n-b (3 1)
+    (enc a n-a n-b (ltk b c)) (enc b k-0 n-a n-b (ltk a c)))
+  (label 18)
+  (parent 12)
+  (unrealized (3 1))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k19">Item <a href="#t0">19</a>, Parent: <a href="#k14">14</a>, Child: <a href="#k28">28</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 264.960 Q 342.649 263.906 245.498 337.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='239.880' y='39.960'
+   style='text-anchor: middle;'>yahalom 19 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((1 1) (3 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (contracted (a-0 a) (b-0 b) (c-0 c) (n-a-0 n-a))
+    n-b (2 1) (enc n-b k) (enc a n-a n-b (ltk b c))
+    (enc b k n-a n-b (ltk a c)) (enc b k-0 n-a n-b (ltk a c)))
+  (label 19)
+  (parent 14)
+  (unrealized)
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k20">Item <a href="#t0">20</a>, Parent: <a href="#k14">14</a>, Children: <a href="#k29">29</a> <a href="#k30">30</a> <a href="#k31">31</a> <a href="#k32">32</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 339.960 Q 392.820 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='289.860' y='39.960' style='text-anchor: middle;'>yahalom 20</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((1 1) (3 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (5 1)) ((5 2) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-strand init 3) n-b (2 1) (enc n-b k)
+    (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 20)
+  (parent 14)
+  (unrealized (2 1))
+  (comment &quot;4 in cohort - 4 not yet seen&quot;))</pre>
+
+<p id="k21">Item <a href="#t0">21</a>, Parent: <a href="#k14">14</a>, Child: <a href="#k33">33</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='264.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 339.960 Q 392.820 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 342.649 263.906 245.498 337.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 264.960 Q 336.840 227.460 533.760 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='289.860' y='39.960' style='text-anchor: middle;'>yahalom 21</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (deflistener k)
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((1 1) (3 1)) ((1 1) (5 0))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (2 1))
+    ((5 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-listener k) n-b (2 1) (enc n-b k)
+    (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 21)
+  (parent 14)
+  (unrealized (5 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k22">Item <a href="#t0">22</a>, Parent: <a href="#k15">15</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='339.960' x2='439.800' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='339.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 414.960 Q 342.840 377.460 245.880 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='439.800' cy='414.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.260 375.660 244.679 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 142.920 452.460 45.960 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.340 375.660 44.759 411.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 339.960 Q 286.860 302.460 433.800 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='489.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='239.880' y='39.960' style='text-anchor: middle;'>yahalom 22</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (deflistener k)
+  (precedes ((0 1) (1 0)) ((1 1) (3 1)) ((1 2) (0 2)) ((1 2) (4 0))
+    ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation nonce-test (displaced 5 1 serv 3) k (4 0)
+    (enc b k n-a n-b (ltk a c)))
+  (label 22)
+  (parent 15)
+  (unrealized (4 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k23">Item <a href="#t0">23</a>, Parent: <a href="#k17">17</a>, Seen Child: <a href="#k16">16</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 339.960 Q 342.840 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 264.960 Q 386.820 264.960 433.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 187.500 300.660 235.081 336.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='239.880' y='39.960'
+   style='text-anchor: middle;'>yahalom 23 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((1 1) (2 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 1) (4 1)) ((4 2) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (contracted (a-0 a) (b-0 b) (c-0 c) (n-a-0 n-a))
+    n-b (2 1) (enc n-b k-0) (enc a n-a n-b (ltk b c))
+    (enc b k n-a n-b (ltk a c)) (enc b k-0 n-a n-b (ltk a c)))
+  (label 23)
+  (parent 17)
+  (seen 16)
+  (unrealized)
+  (comment &quot;1 in cohort - 0 not yet seen&quot;))</pre>
+
+<p id="k24">Item <a href="#t0">24</a>, Parent: <a href="#k17">17</a>, Children: <a href="#k34">34</a> <a href="#k35">35</a>, Seen Child: <a href="#k30">30</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 264.960 Q 392.730 264.232 245.701 338.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 342.840 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 264.960 Q 386.820 264.960 433.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 187.500 300.660 235.081 336.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 286.860 152.460 533.760 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='289.860' y='39.960' style='text-anchor: middle;'>yahalom 24</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((0 1) (5 0)) ((1 1) (2 1))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 1) (4 1)) ((4 2) (2 1))
+    ((5 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (added-strand serv 2) n-b (2 1) (enc n-b k-0)
+    (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 24)
+  (parent 17)
+  (seen 30)
+  (unrealized (2 1))
+  (comment &quot;3 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k25">Item <a href="#t0">25</a>, Parent: <a href="#k17">17</a>, Child: <a href="#k36">36</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='264.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 339.960 Q 392.820 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 342.840 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 264.960 Q 386.820 264.960 433.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 339.840 264.960 Q 436.800 227.460 533.760 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 187.500 300.660 235.081 336.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='289.860' y='39.960' style='text-anchor: middle;'>yahalom 25</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (deflistener k-0)
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((1 1) (2 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 1) (4 1)) ((3 1) (5 0)) ((4 2) (2 1))
+    ((5 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-listener k-0) n-b (2 1) (enc n-b k-0)
+    (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 25)
+  (parent 17)
+  (unrealized (2 1) (5 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k26">Item <a href="#t0">26</a>, Parent: <a href="#k18">18</a>, Child: <a href="#k37">37</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='264.960' x2='339.840' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 264.960 Q 492.690 264.232 345.661 338.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 442.800 302.460 345.840 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 414.960 Q 192.900 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-1 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-1)</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 237.071 263.906 334.222 337.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 336.840 152.460 633.720 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='639.720' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='339.840' y='39.960' style='text-anchor: middle;'>yahalom 26</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 n-a-1 text) (a b c a-0 b-0 c-0 name)
+    (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (defstrand init 3 (n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (precedes ((0 1) (4 0)) ((0 1) (6 0)) ((1 1) (3 1)) ((1 2) (0 2))
+    ((2 1) (1 0)) ((3 2) (0 3)) ((4 1) (5 1)) ((5 2) (3 1))
+    ((6 1) (3 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (added-strand serv 2) n-b (3 1) (enc n-b k-0)
+    (enc a n-a n-b (ltk b c)) (enc b k-0 n-a n-b (ltk a c)))
+  (label 26)
+  (parent 18)
+  (unrealized (3 1))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k27">Item <a href="#t0">27</a>, Parent: <a href="#k18">18</a>, Child: <a href="#k38">38</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='264.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='264.960' x2='339.840' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 339.960 Q 492.780 302.460 345.840 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 442.800 302.460 345.840 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 439.800 264.960 Q 536.760 227.460 633.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 414.960 Q 192.900 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-1 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-1)</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 237.071 263.906 334.222 337.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='339.840' y='39.960' style='text-anchor: middle;'>yahalom 27</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 n-a-1 text) (a b c a-0 b-0 c-0 name)
+    (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (defstrand init 3 (n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (deflistener k-0)
+  (precedes ((0 1) (4 0)) ((1 1) (3 1)) ((1 2) (0 2)) ((2 1) (1 0))
+    ((3 2) (0 3)) ((4 1) (5 1)) ((4 1) (6 0)) ((5 2) (3 1))
+    ((6 1) (3 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-listener k-0) n-b (3 1) (enc n-b k-0)
+    (enc a n-a n-b (ltk b c)) (enc b k-0 n-a n-b (ltk a c)))
+  (label 27)
+  (parent 18)
+  (unrealized (3 1) (6 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k28">Item <a href="#t0">28</a>, Parent: <a href="#k19">19</a>, Seen Child: <a href="#k8">8</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 264.960 Q 192.583 301.118 45.326 412.276'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.729 338.906 45.578 412.852'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 186.900 264.960 233.880 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960'
+   style='text-anchor: middle;'>yahalom 28 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((1 1) (2 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 1) (0 3)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation generalization deleted (2 0))
+  (label 28)
+  (parent 19)
+  (seen 8)
+  (unrealized)
+  (comment &quot;1 in cohort - 0 not yet seen&quot;))</pre>
+
+<p id="k29">Item <a href="#t0">29</a>, Parent: <a href="#k20">20</a>, Child: <a href="#k39">39</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 339.960 Q 392.820 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='289.860' y='39.960'
+   style='text-anchor: middle;'>yahalom 29 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((1 1) (3 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (5 1)) ((5 2) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (contracted (a-0 a) (b-0 b) (c-0 c) (n-a-0 n-a))
+    n-b (2 1) (enc n-b k) (enc n-b k-0) (enc a n-a n-b (ltk b c))
+    (enc b k n-a n-b (ltk a c)) (enc b k-0 n-a n-b (ltk a c)))
+  (label 29)
+  (parent 20)
+  (unrealized)
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k30">Item <a href="#t0">30</a>, Parent: <a href="#k20">20</a>, Children: <a href="#k40">40</a> <a href="#k41">41</a> <a href="#k42">42</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 264.960 Q 442.749 264.407 245.777 338.854'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 392.820 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 336.840 152.460 633.720 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='639.720' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='339.840' y='39.960' style='text-anchor: middle;'>yahalom 30</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((0 1) (6 0)) ((1 1) (3 1))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (5 1))
+    ((5 2) (2 1)) ((6 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (added-strand serv 2) n-b (2 1) (enc n-b k)
+    (enc n-b k-0) (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 30)
+  (parent 20)
+  (unrealized (2 1))
+  (comment &quot;3 in cohort - 3 not yet seen&quot;))</pre>
+
+<p id="k31">Item <a href="#t0">31</a>, Parent: <a href="#k20">20</a>, Child: <a href="#k43">43</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='264.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 339.960 Q 442.800 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 392.820 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 264.960 Q 386.820 227.460 633.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='339.840' y='39.960' style='text-anchor: middle;'>yahalom 31</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (deflistener k)
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((1 1) (3 1)) ((1 1) (6 0))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (5 1))
+    ((5 2) (2 1)) ((6 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-listener k) n-b (2 1) (enc n-b k)
+    (enc n-b k-0) (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 31)
+  (parent 20)
+  (unrealized (6 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k32">Item <a href="#t0">32</a>, Parent: <a href="#k20">20</a>, Child: <a href="#k44">44</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='264.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 339.960 Q 442.800 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 392.820 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 439.800 264.960 Q 536.760 227.460 633.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='339.840' y='39.960' style='text-anchor: middle;'>yahalom 32</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (deflistener k-0)
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((1 1) (3 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (5 1)) ((4 1) (6 0))
+    ((5 2) (2 1)) ((6 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-listener k-0) n-b (2 1) (enc n-b k)
+    (enc n-b k-0) (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 32)
+  (parent 20)
+  (unrealized (2 1) (6 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k33">Item <a href="#t0">33</a>, Parent: <a href="#k21">21</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='339.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 414.960 Q 392.820 377.460 245.880 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 342.240 300.660 244.679 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.260 375.660 244.679 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 142.920 452.460 45.960 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.340 375.660 44.759 411.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 339.960 Q 336.840 302.460 533.760 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='489.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='289.860' y='39.960' style='text-anchor: middle;'>yahalom 33</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (deflistener k)
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((1 1) (3 1)) ((1 2) (0 2))
+    ((1 2) (5 0)) ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (2 1))
+    ((5 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (displaced 6 1 serv 3) k (5 0)
+    (enc b k n-a n-b (ltk a c)))
+  (label 33)
+  (parent 21)
+  (unrealized (5 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k34">Item <a href="#t0">34</a>, Parent: <a href="#k24">24</a>, Child: <a href="#k45">45</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 264.960 Q 392.730 264.232 245.701 338.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 342.840 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 264.960 Q 386.820 264.960 433.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 187.500 300.660 235.081 336.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 286.860 152.460 533.760 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='289.860' y='39.960'
+   style='text-anchor: middle;'>yahalom 34 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((0 1) (5 0)) ((1 1) (2 1))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 1) (4 1)) ((4 2) (2 1))
+    ((5 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (contracted (a-0 a) (b-0 b) (c-0 c) (n-a-0 n-a))
+    n-b (2 1) (enc n-b k-0) (enc a n-a n-b (ltk b c))
+    (enc b k n-a n-b (ltk a c)) (enc b k-0 n-a n-b (ltk a c))
+    (enc b k-1 n-a n-b (ltk a c)))
+  (label 34)
+  (parent 24)
+  (unrealized)
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k35">Item <a href="#t0">35</a>, Parent: <a href="#k24">24</a>, Child: <a href="#k46">46</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='264.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 339.960 Q 442.800 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='639.720' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 539.760 264.960 Q 392.730 264.232 245.701 338.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 342.840 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 264.960 Q 386.820 264.960 433.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 339.840 264.960 Q 486.780 227.460 633.720 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 187.500 300.660 235.081 336.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 286.860 152.460 533.760 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='339.840' y='39.960' style='text-anchor: middle;'>yahalom 35</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (deflistener k-0)
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((0 1) (5 0)) ((1 1) (2 1))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 1) (4 1)) ((3 1) (6 0))
+    ((4 2) (2 1)) ((5 1) (2 1)) ((6 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (added-listener k-0) n-b (2 1) (enc n-b k-0)
+    (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)) (enc b k-1 n-a n-b (ltk a c)))
+  (label 35)
+  (parent 24)
+  (unrealized (2 1) (6 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k36">Item <a href="#t0">36</a>, Parent: <a href="#k25">25</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='339.960' x2='439.800' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='339.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 339.960 Q 492.780 339.960 445.800 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k-0 (ltk b c))</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 264.960 Q 442.800 227.460 345.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 414.960 Q 342.840 377.460 245.880 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='439.800' cy='414.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='439.800' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.260 375.660 244.679 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 142.920 452.460 45.960 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.340 375.660 44.759 411.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 188.236 337.464 236.553 409.967'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='489.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 286.860 152.460 533.760 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='289.860' y='39.960' style='text-anchor: middle;'>yahalom 36</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (deflistener k-0)
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (5 0)) ((1 1) (2 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (2 1)) ((5 1) (3 1))
+    ((5 2) (4 0)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (displaced 3 6 serv 3) k-0 (5 0)
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 36)
+  (parent 25)
+  (unrealized (2 1) (4 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k37">Item <a href="#t0">37</a>, Parent: <a href="#k26">26</a>, Child: <a href="#k47">47</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='264.960' x2='739.680' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='264.960' x2='339.840' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 339.960 Q 542.760 302.460 345.840 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='739.680' cy='339.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='739.680' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 264.960 Q 492.690 264.232 345.661 338.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 442.800 302.460 345.840 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 439.800 264.960 Q 586.740 227.460 733.680 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 414.960 Q 192.900 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-1 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-1)</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 237.071 263.906 334.222 337.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 336.840 152.460 633.720 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='639.720' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g>
+   <title>((n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='389.820' y='39.960' style='text-anchor: middle;'>yahalom 37</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 n-a-1 text) (a b c a-0 b-0 c-0 name)
+    (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (defstrand init 3 (n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (deflistener k-0)
+  (precedes ((0 1) (4 0)) ((0 1) (6 0)) ((1 1) (3 1)) ((1 2) (0 2))
+    ((2 1) (1 0)) ((3 2) (0 3)) ((4 1) (5 1)) ((4 1) (7 0))
+    ((5 2) (3 1)) ((6 1) (3 1)) ((7 1) (3 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (added-listener k-0) n-b (3 1) (enc n-b k-0)
+    (enc a n-a n-b (ltk b c)) (enc b k-0 n-a n-b (ltk a c))
+    (enc b k-1 n-a n-b (ltk a c)))
+  (label 37)
+  (parent 26)
+  (unrealized (3 1) (7 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k38">Item <a href="#t0">38</a>, Parent: <a href="#k27">27</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='339.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k-0 (ltk b c))</title>
+   <circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 264.960 Q 542.760 227.460 445.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 442.800 377.460 345.840 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 392.220 375.660 344.639 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 192.900 452.460 45.960 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-1 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-1)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.340 375.660 44.759 411.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 237.480 300.660 335.041 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='489.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 336.840 152.460 633.720 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='639.720' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='339.840' y='39.960' style='text-anchor: middle;'>yahalom 38</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 n-a-1 text) (a b c a-0 b-0 c-0 name)
+    (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (defstrand init 3 (n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (deflistener k-0)
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (6 0)) ((1 1) (3 1)) ((1 2) (0 2)) ((2 1) (1 0))
+    ((3 2) (0 3)) ((4 2) (3 1)) ((5 1) (3 1)) ((6 1) (4 1))
+    ((6 2) (5 0)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (displaced 4 7 serv 3) k-0 (6 0)
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 38)
+  (parent 27)
+  (unrealized (3 1) (5 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k39">Item <a href="#t0">39</a>, Parent: <a href="#k29">29</a>, Seen Child: <a href="#k28">28</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 339.960 Q 242.829 339.407 45.857 413.854'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 264.960 Q 386.820 264.960 433.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.729 338.906 45.578 412.852'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 186.900 264.960 233.880 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='239.880' y='39.960'
+   style='text-anchor: middle;'>yahalom 39 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((1 1) (2 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 1) (4 1)) ((4 2) (0 3)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation generalization deleted (2 0))
+  (label 39)
+  (parent 29)
+  (seen 28)
+  (unrealized)
+  (comment &quot;1 in cohort - 0 not yet seen&quot;))</pre>
+
+<p id="k40">Item <a href="#t0">40</a>, Parent: <a href="#k30">30</a>, Child: <a href="#k48">48</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 264.960 Q 442.749 264.407 245.777 338.854'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 392.820 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 336.840 152.460 633.720 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='639.720' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='339.840' y='39.960'
+   style='text-anchor: middle;'>yahalom 40 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((0 1) (6 0)) ((1 1) (3 1))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (5 1))
+    ((5 2) (2 1)) ((6 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (contracted (a-0 a) (b-0 b) (c-0 c) (n-a-0 n-a))
+    n-b (2 1) (enc n-b k) (enc n-b k-0) (enc a n-a n-b (ltk b c))
+    (enc b k n-a n-b (ltk a c)) (enc b k-0 n-a n-b (ltk a c))
+    (enc b k-1 n-a n-b (ltk a c)))
+  (label 40)
+  (parent 30)
+  (unrealized)
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k41">Item <a href="#t0">41</a>, Parent: <a href="#k30">30</a>, Child: <a href="#k49">49</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='264.960' x2='739.680' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 339.960 Q 492.780 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='739.680' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='739.680' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 264.960 Q 442.749 264.407 245.777 338.854'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 392.820 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: blue;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 264.960 Q 436.800 227.460 733.680 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 336.840 152.460 633.720 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='639.720' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='389.820' y='39.960' style='text-anchor: middle;'>yahalom 41</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (deflistener k)
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((0 1) (6 0)) ((1 1) (3 1))
+    ((1 1) (7 0)) ((1 2) (0 2)) ((2 2) (0 3)) ((3 2) (2 1))
+    ((4 1) (5 1)) ((5 2) (2 1)) ((6 1) (2 1)) ((7 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (added-listener k) n-b (2 1) (enc n-b k)
+    (enc n-b k-0) (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)) (enc b k-1 n-a n-b (ltk a c)))
+  (label 41)
+  (parent 30)
+  (unrealized (7 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k42">Item <a href="#t0">42</a>, Parent: <a href="#k30">30</a>, Child: <a href="#k50">50</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='264.960' x2='739.680' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='264.960' x2='239.880' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 339.960 Q 492.780 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='739.680' cy='339.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='739.680' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 639.720 264.960 Q 442.749 264.407 245.777 338.854'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 392.820 302.460 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 439.800 264.960 Q 586.740 227.460 733.680 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.860 339.960 245.880 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 414.960 Q 142.920 377.460 45.960 414.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 336.840 152.460 633.720 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='639.720' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='389.820' y='39.960' style='text-anchor: middle;'>yahalom 42</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (deflistener k-0)
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((0 1) (6 0)) ((1 1) (3 1))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (5 1))
+    ((4 1) (7 0)) ((5 2) (2 1)) ((6 1) (2 1)) ((7 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (added-listener k-0) n-b (2 1) (enc n-b k)
+    (enc n-b k-0) (enc a n-a n-b (ltk b c)) (enc b k n-a n-b (ltk a c))
+    (enc b k-0 n-a n-b (ltk a c)) (enc b k-1 n-a n-b (ltk a c)))
+  (label 42)
+  (parent 30)
+  (unrealized (2 1) (7 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k43">Item <a href="#t0">43</a>, Parent: <a href="#k31">31</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='339.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 414.960 Q 442.800 377.460 245.880 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 392.730 339.232 245.701 413.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.260 375.660 244.679 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 142.920 452.460 45.960 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.340 375.660 44.759 411.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 339.960 Q 386.820 302.460 633.720 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='489.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='339.840' y='39.960' style='text-anchor: middle;'>yahalom 43</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (deflistener k)
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((1 1) (3 1)) ((1 2) (0 2))
+    ((1 2) (6 0)) ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (5 1))
+    ((5 2) (2 1)) ((6 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (displaced 7 1 serv 3) k (6 0)
+    (enc b k n-a n-b (ltk a c)))
+  (label 43)
+  (parent 31)
+  (unrealized (6 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k44">Item <a href="#t0">44</a>, Parent: <a href="#k32">32</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='339.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k-0 (ltk b c))</title>
+   <circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 264.960 Q 542.760 227.460 445.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 392.820 377.460 245.880 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 342.649 338.906 245.498 412.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.260 375.660 244.679 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 142.920 452.460 45.960 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.340 375.660 44.759 411.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='489.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 336.840 152.460 633.720 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='639.720' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='339.840' y='39.960' style='text-anchor: middle;'>yahalom 44</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (deflistener k-0)
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (6 0)) ((1 1) (3 1)) ((1 2) (0 2))
+    ((2 2) (0 3)) ((3 2) (2 1)) ((4 2) (2 1)) ((5 1) (2 1))
+    ((6 1) (4 1)) ((6 2) (5 0)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (displaced 4 7 serv 3) k-0 (6 0)
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 44)
+  (parent 32)
+  (unrealized (2 1) (5 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k45">Item <a href="#t0">45</a>, Parent: <a href="#k34">34</a>, Seen Child: <a href="#k16">16</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 264.960 Q 342.840 227.460 245.880 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 264.960 Q 292.860 264.960 245.880 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.729 338.906 45.578 412.852'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 186.900 264.960 233.880 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='239.880' y='39.960'
+   style='text-anchor: middle;'>yahalom 45 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((0 1) (4 0)) ((1 1) (2 1))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 1) (2 1)) ((4 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation generalization deleted (4 0))
+  (label 45)
+  (parent 34)
+  (seen 16)
+  (unrealized)
+  (comment &quot;1 in cohort - 0 not yet seen&quot;))</pre>
+
+<p id="k46">Item <a href="#t0">46</a>, Parent: <a href="#k35">35</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='679.680pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 679.680 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='339.960' x2='539.760' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='339.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 639.720 339.960 Q 592.740 339.960 545.760 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k-0 (ltk b c))</title>
+   <circle cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 264.960 Q 492.780 227.460 345.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 414.960 Q 392.820 377.460 245.880 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='539.760' cy='414.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='539.760' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 342.240 300.660 244.679 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.260 375.660 244.679 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 142.920 452.460 45.960 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.340 375.660 44.759 411.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 188.236 337.464 236.553 409.967'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='489.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 336.840 152.460 633.720 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='639.720' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='339.840' y='39.960' style='text-anchor: middle;'>yahalom 46</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (deflistener k-0)
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((0 1) (6 0)) ((1 1) (2 1))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 2) (2 1)) ((4 1) (2 1))
+    ((5 1) (2 1)) ((6 1) (3 1)) ((6 2) (5 0)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (displaced 3 7 serv 3) k-0 (6 0)
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 46)
+  (parent 35)
+  (unrealized (2 1) (5 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k47">Item <a href="#t0">47</a>, Parent: <a href="#k37">37</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='189.960' x2='739.680' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='339.960' x2='339.840' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 339.960 Q 692.700 339.960 645.720 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k-0 (ltk b c))</title>
+   <circle cx='739.680' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 264.960 Q 592.740 227.460 445.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='739.680' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 492.780 377.460 345.840 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 264.960 Q 442.200 300.660 344.639 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 392.220 375.660 344.639 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 489.960 Q 192.900 452.460 45.960 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='489.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-1 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='339.840' cy='414.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-1)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.340 375.660 44.759 411.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 237.480 300.660 335.041 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='489.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 286.860 152.460 533.760 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 386.820 152.460 733.680 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='739.680' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='389.820' y='39.960' style='text-anchor: middle;'>yahalom 47</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 n-a-1 text) (a b c a-0 b-0 c-0 name)
+    (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (defstrand init 3 (n-a n-a-1) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (deflistener k-0)
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (5 0)) ((0 1) (7 0)) ((1 1) (3 1)) ((1 2) (0 2))
+    ((2 1) (1 0)) ((3 2) (0 3)) ((4 2) (3 1)) ((5 1) (3 1))
+    ((6 1) (3 1)) ((7 1) (4 1)) ((7 2) (6 0)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (displaced 4 8 serv 3) k-0 (7 0)
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 47)
+  (parent 37)
+  (unrealized (3 1) (6 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k48">Item <a href="#t0">48</a>, Parent: <a href="#k40">40</a>, Child: <a href="#k51">51</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='579.720pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 579.720 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 539.760 264.960 Q 292.733 301.598 45.707 413.235'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 242.829 339.407 45.857 413.854'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 264.960 Q 386.820 264.960 433.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.729 338.906 45.578 412.852'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 186.900 264.960 233.880 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 286.860 152.460 533.760 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='289.860' y='39.960'
+   style='text-anchor: middle;'>yahalom 48 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((0 1) (5 0)) ((1 1) (2 1))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 1) (4 1)) ((4 2) (0 3))
+    ((5 1) (0 3)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation generalization deleted (2 0))
+  (label 48)
+  (parent 40)
+  (unrealized)
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k49">Item <a href="#t0">49</a>, Parent: <a href="#k41">41</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='339.960' x2='739.680' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='189.960' x2='639.720' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='339.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 414.960 Q 492.780 377.460 245.880 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k</title><circle cx='739.680' cy='414.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='739.680' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 639.720 264.960 Q 442.609 301.406 245.498 412.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='639.720' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='639.720' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 539.760 339.960 Q 392.730 339.232 245.701 413.504'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='539.760' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 264.960 Q 486.780 264.960 533.760 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.260 375.660 244.679 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 142.920 452.460 45.960 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: blue;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.340 375.660 44.759 411.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 139.920 339.960 Q 436.800 302.460 733.680 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='489.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 336.840 152.460 633.720 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='639.720' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='389.820' y='39.960' style='text-anchor: middle;'>yahalom 49</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (deflistener k)
+  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((0 1) (6 0)) ((1 1) (3 1))
+    ((1 2) (0 2)) ((1 2) (7 0)) ((2 2) (0 3)) ((3 2) (2 1))
+    ((4 1) (5 1)) ((5 2) (2 1)) ((6 1) (2 1)) ((7 1) (2 1)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (displaced 8 1 serv 3) k (7 0)
+    (enc b k n-a n-b (ltk a c)))
+  (label 49)
+  (parent 41)
+  (unrealized (7 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k50">Item <a href="#t0">50</a>, Parent: <a href="#k42">42</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='779.640pt' height='529.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 779.640 529.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='739.680' y1='189.960' x2='739.680' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='639.720' y1='339.960' x2='639.720' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='539.760' y1='189.960' x2='539.760' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='339.960' x2='239.880' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='489.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 739.680 339.960 Q 692.700 339.960 645.720 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k-0 (ltk b c))</title>
+   <circle cx='739.680' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 739.680 264.960 Q 592.740 227.460 445.800 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='739.680' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='739.680' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 639.720 414.960 Q 442.800 377.460 245.880 414.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>k-0</title><circle cx='639.720' cy='414.960' r='6.000'/></g>
+  <g><title>k-0</title>
+   <circle style='fill: red;' cx='639.720' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 539.760 264.960 Q 392.503 301.118 245.246 412.276'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='539.760' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='539.760' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 439.800 339.960 Q 342.649 338.906 245.498 412.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k-0)</title>
+   <circle cx='439.800' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 339.960 Q 292.260 375.660 244.679 411.359'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='339.840' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 489.960 Q 142.920 452.460 45.960 489.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='489.960' r='6.000'/></g>
+  <g><title>(enc b-0 k n-a-0 n-b (ltk a-0 c-0))</title>
+   <circle style='fill: red;' cx='239.880' cy='414.960' r='6.000'/></g>
+  <g><title>(cat a-0 n-a-0)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.340 375.660 44.759 411.359'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 236.880 227.460 333.840 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='489.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 286.860 152.460 533.760 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 386.820 152.460 733.680 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='739.680' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='539.760' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g>
+   <title>((n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='389.820' y='39.960' style='text-anchor: middle;'>yahalom 50</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 text) (a b c a-0 b-0 c-0 name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a-0) (n-b n-b) (a a-0) (b b-0) (c c-0) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (deflistener k-0)
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (precedes ((0 1) (1 0)) ((0 1) (5 0)) ((0 1) (7 0)) ((1 1) (3 1))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 2) (2 1)) ((4 2) (2 1))
+    ((5 1) (2 1)) ((6 1) (2 1)) ((7 1) (4 1)) ((7 2) (6 0)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation nonce-test (displaced 4 8 serv 3) k-0 (7 0)
+    (enc b k-0 n-a n-b (ltk a c)))
+  (label 50)
+  (parent 42)
+  (unrealized (2 1) (6 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k51">Item <a href="#t0">51</a>, Parent: <a href="#k48">48</a>, Seen Child: <a href="#k28">28</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='479.760pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 479.760 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='439.800' y1='189.960' x2='439.800' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='339.840' y1='189.960' x2='339.840' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 439.800 264.960 Q 242.689 301.406 45.578 412.852'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-1 n-a n-b (ltk a c))</title>
+   <circle cx='439.800' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='439.800' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 339.840 264.960 Q 192.583 301.118 45.326 412.276'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k-0 n-a n-b (ltk a c))</title>
+   <circle cx='339.840' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='339.840' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.729 338.906 45.578 412.852'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc n-b k)</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle style='fill: blue;' cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <path
+   d='M 139.920 339.960 Q 92.940 339.960 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 139.920 264.960 Q 186.900 264.960 233.880 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: blue;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 86.940 189.960 133.920 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 186.900 152.460 333.840 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 39.960 189.960 Q 236.880 152.460 433.800 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))</title>
+   <text x='439.800' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>init</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='139.920' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='239.880' y='39.960'
+   style='text-anchor: middle;'>yahalom 51 (realized)</text></svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k k-0 k-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (defstrand init 3 (n-a n-a) (n-b n-b) (a a) (b b) (c c) (k k))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-0))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k-1))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((0 1) (4 0)) ((1 1) (2 1))
+    ((1 2) (0 2)) ((2 2) (0 3)) ((3 1) (0 3)) ((4 1) (0 3)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k k-0 k-1)
+  (operation generalization deleted (4 0))
+  (label 51)
+  (parent 48)
+  (seen 28)
+  (unrealized)
+  (comment &quot;1 in cohort - 0 not yet seen&quot;))</pre>
+
+<p id="t52">Tree <a href="#top">52</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='229.680pt' height='154.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 229.680 154.920' font-size='12.000'>
+  <text
+   x='189.720' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k57&quot;, &quot;_self&quot;)'>57</text>
+  <line
+   x1='139.800' y1='114.960' x2='189.720' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='101.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k55&quot;, &quot;_self&quot;)'>55</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='114.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='189.720' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k56&quot;, &quot;_self&quot;)'>56</text>
+  <line
+   x1='139.800' y1='39.960' x2='189.720' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='139.800' y='26.040' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k54&quot;, &quot;_self&quot;)'>54</text>
+  <line
+   x1='89.880' y1='77.460' x2='139.800' y2='39.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='89.880' y='63.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k53&quot;, &quot;_self&quot;)'>53</text>
+  <line
+   x1='39.960' y1='77.460' x2='89.880' y2='77.460'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <text
+   x='39.960' y='63.540' style='text-anchor: middle; fill: red;'
+   onclick='window.open(&quot;#k52&quot;, &quot;_self&quot;)'>52</text>
+  </svg></div>
+
+<pre>(defprotocol yahalom diffie-hellman
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (k skey))
+    (trace (send (cat a n-a)) (recv (enc b k n-a n-b (ltk a c)))
+      (send (enc n-b k))))
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (k skey))
+    (trace (recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b c))))
+      (recv (enc a k (ltk b c))) (recv (enc n-b k))))
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (k skey))
+    (trace (recv (cat b (enc a n-a n-b (ltk b c))))
+      (send (enc b k n-a n-b (ltk a c))) (send (enc a k (ltk b c))))
+    (uniq-orig k)))</pre>
+
+<p id="k52">Item <a href="#t52">52</a>, Child: <a href="#k53">53</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='179.880pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 179.880 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='139.920' y1='114.960' x2='139.920' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <g><title>k</title><circle cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: blue;' cx='139.920' cy='114.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: red;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='89.940' y='39.960' style='text-anchor: middle;'>yahalom 52</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (deflistener k)
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b)
+  (label 52)
+  (unrealized (0 2) (0 3))
+  (origs (n-b (0 1)))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k53">Item <a href="#t52">53</a>, Parent: <a href="#k52">52</a>, Children: <a href="#k54">54</a> <a href="#k55">55</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='379.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 379.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='114.960' x2='239.880' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='189.960' x2='139.920' y2='264.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 264.960 Q 142.920 227.460 45.960 264.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <path
+   d='M 239.880 189.960 Q 192.900 189.960 145.920 189.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: red;' cx='239.880' cy='114.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='139.920' cy='189.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>yahalom 53</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (precedes ((2 1) (1 0)) ((2 2) (0 2)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand serv 3) (enc a k (ltk b c))
+    (0 2))
+  (label 53)
+  (parent 52)
+  (unrealized (0 3) (1 0) (2 0))
+  (comment &quot;2 in cohort - 2 not yet seen&quot;))</pre>
+
+<p id="k54">Item <a href="#t52">54</a>, Parent: <a href="#k53">53</a>, Child: <a href="#k56">56</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 339.960 Q 142.920 302.460 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 136.920 152.460 233.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>yahalom 54</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (precedes ((0 1) (2 0)) ((2 1) (1 0)) ((2 2) (0 2)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation encryption-test (displaced 3 0 resp 2)
+    (enc a n-a-0 n-b-0 (ltk b c)) (2 0))
+  (label 54)
+  (parent 53)
+  (unrealized (0 3) (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k55">Item <a href="#t52">55</a>, Parent: <a href="#k53">53</a>, Child: <a href="#k57">57</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='264.960' x2='139.920' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 292.860 189.960 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.920 302.460 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 239.880 264.960 Q 192.900 264.960 145.920 264.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='139.920' cy='264.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>yahalom 55</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (precedes ((2 1) (1 0)) ((2 2) (0 2)) ((3 1) (2 0)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand resp 2)
+    (enc a n-a-0 n-b-0 (ltk b c)) (2 0))
+  (label 55)
+  (parent 53)
+  (unrealized (0 3) (1 0))
+  (comment &quot;1 in cohort - 1 not yet seen&quot;))</pre>
+
+<p id="k56">Item <a href="#t52">56</a>, Parent: <a href="#k54">54</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='279.840pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 279.840 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='339.960' x2='139.920' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='114.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 239.880 339.960 Q 142.920 302.460 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 339.960 Q 192.900 339.960 145.920 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a n-b (ltk a c))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <path
+   d='M 39.960 189.960 Q 136.920 152.460 233.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='114.960' r='6.000'/></g>
+  <g><title>((n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='139.920' y='39.960' style='text-anchor: middle;'>yahalom 56</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (k k))
+  (precedes ((0 1) (2 0)) ((2 2) (0 2)) ((2 2) (1 0)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation nonce-test (displaced 3 2 serv 3) k (1 0)
+    (enc b k n-a n-b (ltk a c)))
+  (label 56)
+  (parent 54)
+  (unrealized (0 3) (1 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+<p id="k57">Item <a href="#t52">57</a>, Parent: <a href="#k55">55</a>.</p>
+
+<div>
+ <svg
+  class='diagram' width='379.800pt' height='454.920pt'
+  xmlns='http://www.w3.org/2000/svg' version='1.1'
+  viewBox='0 0 379.800 454.920' font-size='12.000'>
+  <defs>
+   <marker
+    id='arrow' orient='auto' markerWidth='5' markerHeight='10' refX='5'
+    refY='5'>
+    <path
+     d='M 0 0 5 5 0 10'
+     style='stroke-width: 2; fill: none; stroke: black;'/></marker>
+   </defs>
+  <line
+   x1='339.840' y1='114.960' x2='339.840' y2='189.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='239.880' y1='189.960' x2='239.880' y2='339.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='139.920' y1='339.960' x2='139.920' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <line
+   x1='39.960' y1='189.960' x2='39.960' y2='414.960'
+   style='stroke-width: 0.960; stroke: gray;'/>
+  <path
+   d='M 339.840 189.960 Q 292.860 189.960 245.880 189.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle cx='339.840' cy='189.960' r='6.000'/></g>
+  <g><title>(cat a n-a-0)</title>
+   <circle style='fill: blue;' cx='339.840' cy='114.960' r='6.000'/></g>
+  <path
+   d='M 239.880 339.960 Q 142.920 302.460 45.960 339.960'
+   style='stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <path
+   d='M 239.880 339.960 Q 192.900 339.960 145.920 339.960'
+   style='stroke-dasharray: 6.000,2.400; stroke-width: 0.960; stroke: black; marker-end: url(#arrow); fill: none;'/>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle cx='239.880' cy='339.960' r='6.000'/></g>
+  <g><title>(enc b k n-a-0 n-b-0 (ltk a c))</title>
+   <circle cx='239.880' cy='264.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a-0 n-b-0 (ltk b c)))</title>
+   <circle style='fill: blue;' cx='239.880' cy='189.960' r='6.000'/></g>
+  <g><title>k</title><circle cx='139.920' cy='414.960' r='6.000'/></g>
+  <g><title>k</title>
+   <circle style='fill: red;' cx='139.920' cy='339.960' r='6.000'/></g>
+  <g><title>(enc n-b k)</title>
+   <circle style='fill: red;' cx='39.960' cy='414.960' r='6.000'/></g>
+  <g><title>(enc a k (ltk b c))</title>
+   <circle style='fill: blue;' cx='39.960' cy='339.960' r='6.000'/></g>
+  <g><title>(cat b (enc a n-a n-b (ltk b c)))</title>
+   <circle cx='39.960' cy='264.960' r='6.000'/></g>
+  <g><title>(cat a n-a)</title>
+   <circle style='fill: blue;' cx='39.960' cy='189.960' r='6.000'/></g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))</title>
+   <text x='339.840' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <g><title>((n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))</title>
+   <text x='239.880' y='77.460' style='text-anchor: middle;'>serv</text>
+   </g>
+  <g><title>((n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))</title>
+   <text x='39.960' y='77.460' style='text-anchor: middle;'>resp</text>
+   </g>
+  <text
+   x='189.900' y='39.960' style='text-anchor: middle;'>yahalom 57</text>
+  </svg></div>
+
+<pre>(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c))
+  (precedes ((2 2) (0 2)) ((2 2) (1 0)) ((3 1) (2 0)))
+  (non-orig (ltk a c) (ltk b c))
+  (uniq-orig n-b k)
+  (operation nonce-test (displaced 4 2 serv 3) k (1 0)
+    (enc b k n-a-0 n-b-0 (ltk a c)))
+  (label 57)
+  (parent 55)
+  (unrealized (0 3) (1 0))
+  (comment &quot;empty cohort&quot;))</pre>
+
+</body>
+</html>
diff --git a/doc/ffgg.scm b/doc/ffgg.scm
deleted file mode 100644
--- a/doc/ffgg.scm
+++ /dev/null
@@ -1,24 +0,0 @@
-(herald "The ffgg Protocol"
-	(comment "From A Necessarily Parallel Attack by Jon K. Millen"))
-
-(defprotocol ffgg basic
-  (defrole init (vars (a b name) (n1 n2 m x y text))
-    (trace
-     (send a)
-     (recv (cat b n1 n2))
-     (send (cat a (enc n1 n2 m (pubk b))))
-     (recv (cat n1 x (enc x y n1 (pubk b))))))
-  (defrole resp (vars (b a name) (n1 n2 x y text))
-    (trace
-     (recv a)
-     (send (cat b n1 n2))
-     (recv (cat a (enc n1 x y (pubk b))))
-     (send (cat n1 x (enc x y n1 (pubk b)))))
-    (uniq-orig n1 n2)))
-
-(defskeleton ffgg
-  (vars (b name) (n1 n2 m text))
-  (defstrand init 4 (b b) (m m))
-  (deflistener m)
-  (uniq-orig m)
-  (non-orig (privk b)))
diff --git a/doc/goals.scm b/doc/goals.scm
deleted file mode 100644
--- a/doc/goals.scm
+++ /dev/null
@@ -1,391 +0,0 @@
-(herald goals)
-
-;;; Section 1 --- Examples from CPSA and Formal Security Goals
-
-;;; Needham-Schroeder from Section 10 of the CPSA Primer
-
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-     (send (enc n1 a (pubk b)))
-     (recv (enc n1 n2 (pubk a)))
-     (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc n1 a (pubk b)))
-     (send (enc n1 n2 (pubk a)))
-     (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder with no role origination assumptions"))
-
-(defgoal ns
-  (forall ((b name) (n1 text) (z0 node))
-    (implies
-     (and (p "init" 2 z0)
-      (p "init" "n1" z0 n1) (p "init" "b" z0 b)
-      (non (privk b)) (uniq n1))
-     (exists ((z1 node))
-	     (and (p "resp" 1 z1) (p "resp" "b" z1 b)))))
-  (comment "Initiator point of view")
-  (comment "Authentication goal: agreement on name b"))
-
-(defgoal ns
-  (forall ((b name) (n1 text) (z0 node))
-    (implies
-     (and (p "init" 2 z0)
-      (p "init" "n1" z0 n1) (p "init" "b" z0 b)
-      (non (privk b)) (uniq n1))
-     (exists ((z1 node))
-	     (and (p "resp" 1 z1) (p "resp" "b" z1 b)
-	      (prec z1 z0)))))
-  (comment "Prec example"))
-
-(defgoal ns
-  (forall ((a b name) (n2 text) (z0 node))
-    (implies
-     (and (p "resp" 2 z0) (p "resp" "n2" z0 n2)
-      (p "resp" "a" z0 a) (p "resp" "b" z0 b)
-      (non (privk a)) (uniq n2))
-     (exists ((z1 node))
-      (and (p "init" 1 z1) (p "init" "b" z1 b)))))
-  (comment "Responder point of view")
-  (comment "Failed authentication goal: agreement on name b"))
-
-(defprotocol nsl basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-     (send (enc n1 a (pubk b)))
-     (recv (enc n1 n2 b (pubk a)))
-     (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc n1 a (pubk b)))
-     (send (enc n1 n2 b (pubk a)))
-     (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder-Lowe with no role origination assumptions"))
-
-(defgoal nsl
-  (forall ((a b name) (n2 text) (z0 node))
-    (implies
-     (and (p "resp" 2 z0) (p "resp" "n2" z0 n2)
-      (p "resp" "a" z0 a) (p "resp" "b" z0 b)
-      (non (privk a)) (uniq n2))
-     (exists ((z1 node))
-      (and (p "init" 1 z1) (p "init" "b" z1 b)))))
-  (comment "Responder point of view")
-  (comment "Authentication goal: agreement on name b"))
-
-(defgoal ns
-  (forall ((a b name) (n1 text) (z0 z1 node))
-    (implies
-     (and (p "init" 2 z0) (p "init" "n1" z0 n1)
-      (p "init" "a" z0 a) (p "init" "b" z0 b)
-      (p "" 0 z1) (p "" "x" z1 n1)
-      (non (privk a)) (non (privk b)) (uniq n1))
-     (false)))
-  (comment "Initiator point of view")
-  (comment "Secrecy goal: nonce n1 not revealed"))
-
-(defprotocol unilateral basic
-  (defrole init
-    (vars (a name) (n text))
-    (trace
-     (send (enc n (pubk a)))
-     (recv n)))
-  (defrole resp
-    (vars (a name) (n text))
-    (trace
-     (recv (enc n (pubk a)))
-     (send n)))
-  (comment "Unilateral authentication"))
-
-(defgoal unilateral
-  (forall ((a name) (n text)
-           (z0 node))
-   (implies
-    (and (p "init" 1 z0)
-     (p "init" "n" z0 n)
-     (p "init" "a" z0 a)
-     (non (privk a)) (uniq n))
-    (exists ((z1 node))
-     (and (p "resp" 1 z1)
-      (p "resp" "a" z1 a)))))
-  (comment "Unilateral authentication goal"))
-
-;;; Does initiator satisfy the unilateral authentication goal?
-
-;;; Note that the goal requires translation of some of the role
-;;; specific predicates.
-(defgoal ns
-  (forall ((a name) (n text) (z0 node))
-   (implies
-    (and (p "init" 1 z0) (p "init" "n1" z0 n)
-     (p "init" "b" z0 a) (non (privk a)) (uniq n))
-    (exists ((z1 node))
-     (and (p "resp" 1 z1) (p "resp" "b" z1 a)))))
-  (comment "Initiator authentication goal")
-  (comment "Same as unilateral goal under the predicate mapping:")
-  (comment (p "init" "n") "->" (p "init" "n1") "and")
-  (comment (p "init" "a") "->" (p "init" "b") "and")
-  (comment (p "resp" "a") "->" (p "resp" "b")))
-
-;;; Does responder satisfy the unilateral authentication goal?
-
-(defgoal ns
-  (forall ((a name) (n text) (z0 node))
-   (implies
-    (and (p "resp" 2 z0) (p "resp" "n2" z0 n)
-     (p "resp" "a" z0 a) (non (privk a)) (uniq n))
-    (exists ((z1 node))
-     (and (p "init" 2 z1) (p "init" "a" z1 a)))))
-  (comment "Responder authentication goal")
-  (comment "Same as unilateral goal under the predicate mapping:")
-  (comment (p "init" 1) "->" (p "resp" 2) "and")
-  (comment (p "init" "n") "->" (p "resp" "n2") "and")
-  (comment (p "init" "a") "->" (p "resp" "a") "and")
-  (comment (p "resp" 1) "->" (p "init" 2) "and")
-  (comment (p "resp" "a") "->" (p "init" "a")))
-
-(defgoal ns
-  (forall ((a b name) (n text) (z0 node))
-    (implies
-     (and
-      (p "init" 1 z0) (p "init" "n1" z0 n)
-      (p "init" "a" z0 a) (p "init" "b" z0 b)
-      (non (privk a)) (non (privk b)) (uniq n))
-     (exists ((z1 node))
-      (and (p "resp" 1 z1) (p "resp" "b" z1 b)))))
-  (forall ((a b name) (n text) (z0 node))
-   (implies
-     (and
-      (p "init" 1 z0) (p "init" "n1" z0 n)
-      (p "init" "a" z0 a) (p "init" "b" z0 b)
-      (non (privk a)) (non (privk b)) (uniq n))
-     (exists ((z1 node))
-      (and (p "resp" 1 z1) (p "resp" "a" z1 a)))))
-  (comment "Two initiator authentication goals"))
-
-;;; The shape analysis sentence as input (kind of useless)
-
-(defgoal ns
-  (forall ((n1 n2 text) (b a name) (z z-0 node))
-    (implies
-      (and (p "init" 0 z) (p "init" 2 z-0)
-        (p "init" "n1" z-0 n1) (p "init" "n2" z-0 n2)
-        (p "init" "a" z-0 a) (p "init" "b" z-0 b)
-        (str-prec z z-0) (non (privk b)) (uniq-at n1 z))
-      (exists ((n2-0 text) (z-1 z-2 z-3 node))
-        (and (p "init" 1 z-1) (p "resp" 0 z-2)
-          (p "resp" 1 z-3) (p "resp" "n2" z-3 n2-0)
-          (p "resp" "n1" z-3 n1) (p "resp" "b" z-3 b)
-          (p "resp" "a" z-3 a) (prec z z-2) (prec z-3 z-1)
-          (str-prec z z-1) (str-prec z-1 z-0)
-          (str-prec z-2 z-3)))))
-  (comment "Shape analysis sentence"))
-
-;;; Section 2 --- Additional Examples
-
-(defgoal ns
-  (forall ((a b name) (n2 text) (z0 z1 node))
-    (implies
-     (and
-      (p "resp" 2 z0) (p "resp" "n2" z0 n2)
-      (p "resp" "a" z0 a) (p "resp" "b" z0 b)
-      (p "" 0 z1) (p "" "x" z1 n2)
-      (non (privk a)) (non (privk b)) (uniq n2))
-     (false)))
-  (comment "Responder point of view")
-  (comment "Failed secrecy goal: nonce n2 not revealed"))
-
-;;; Double initiator point of view
-(defskeleton ns
-  (vars (a b name) (n1 n1-0 text))
-  (defstrand init 3 (a a) (b b) (n1 n1))
-  (defstrand init 3 (a a) (b b) (n1 n1-0))
-  (non-orig (privk b) (privk a))
-  (uniq-orig n1 n1-0)
-  (goals
-   (forall ((n1 n1-0 n2 n2-0 text) (a b name) (z z-0 z-1 z-2 node))
-    (implies
-     (and
-      (p "init" 0 z) (p "init" 2 z-0) (p "init" 0 z-1)
-      (p "init" 2 z-2) (p "init" "n1" z-0 n1) (p "init" "n2" z-0 n2)
-      (p "init" "a" z-0 a) (p "init" "b" z-0 b)
-      (p "init" "n1" z-2 n1-0) (p "init" "n2" z-2 n2-0)
-      (p "init" "a" z-2 a) (p "init" "b" z-2 b) (str-prec z z-0)
-      (str-prec z-1 z-2) (non (privk a)) (non (privk b))
-      (uniq-at n1 z) (uniq-at n1-0 z-1))
-     (= z-1 z))))
-  (comment "Double initiator point of view"))
-
-(defprotocol nsl-typeless basic
-  (defrole init
-    (vars (a b name) (n1 text) (n2 mesg))
-    (trace
-     (send (enc a n1 (pubk b)))
-     (recv (enc n1 n2 b (pubk a)))
-     (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 text) (n1 mesg))
-    (trace
-     (recv (enc a n1 (pubk b)))
-     (send (enc n1 n2 b (pubk a)))
-     (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder-Lowe with untyped nonces"))
-
-;;; The responder point of view
-(defgoal nsl-typeless
-  (forall ((n2 text) (a b name) (z z-0 node))
-    (implies
-      (and (p "resp" 1 z) (p "" 0 z-0)
-        (p "resp" "n2" z n2) (p "resp" "b" z b) (p "resp" "a" z a)
-        (p "" "x" z-0 n2) (non (privk a)) (non (privk b)) (uniq n2))
-      (false)))
-  (comment "Shows typeflaw in typeless NSL"))
-
-(defskeleton ns
-  (vars (a name) (n2 text))
-  (defstrand resp 3 (a a) (n2 n2))
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (goals
-   (forall ((n1 n2 text) (a b name) (z z-0 node))
-    (implies
-      (and (p "init" 0 z) (p "init" 2 z-0)
-        (p "init" "n1" z-0 n1) (p "init" "n2" z-0 n2)
-        (p "init" "a" z-0 a) (p "init" "b" z-0 b)
-        (str-prec z z-0) (non (privk a)) (non (privk b))
-        (uniq-at n1 z))
-      (exists ((z-1 z-2 z-3 node))
-        (and (p "init" 1 z-1) (p "resp" 0 z-2)
-          (p "resp" 1 z-3) (p "resp" "n2" z-3 n2)
-          (p "resp" "n1" z-3 n1) (p "resp" "b" z-3 b)
-          (p "resp" "a" z-3 a) (prec z z-2) (prec z-3 z-1)
-          (str-prec z z-1) (str-prec z-1 z-0)
-          (str-prec z-2 z-3))))))
-  (comment "Responder point of view with SAS"))
-
-(defskeleton ns
-  (vars (a name) (n2 text))
-  (defstrand resp 3 (a a) (n2 n2))
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (goals
-   (forall ((n1 n2 text) (a b name) (z z-0 node))
-    (implies
-      (and (p "init" 0 z) (p "init" 2 z-0)
-        (p "init" "n1" z-0 n1) (p "init" "n2" z-0 n2)
-        (p "init" "a" z-0 a) (p "init" "b" z-0 b)
-        (str-prec z z-0) (non (privk a)) (non (privk b))
-        (uniq-at n1 z))
-      (false))))
-  (comment "Responder point of view with false as the conclusion"))
-
-(defskeleton ns
-  (vars (a b name) (n1 text))
-  (defstrand init 3 (a a) (b b) (n1 n1))
-  (non-orig (privk b) (privk a))
-  (uniq-orig n1)
-  (goals
-   (forall ((n1 n2 text) (a b name) (z z-0 node))
-    (implies
-      (and (p "init" 0 z) (p "init" 2 z-0)
-        (p "init" "n1" z-0 n1) (p "init" "n2" z-0 n2)
-        (p "init" "a" z-0 a) (p "init" "b" z-0 b)
-        (str-prec z z-0) (non (privk a)) (non (privk b))
-        (uniq-at n1 z))
-      (false))))
-  (comment "Initiator point of view with false as the conclusion"))
-
-(defgoal ns
-  (forall ((a b name) (n text) (z0 node))
-   (implies
-    (and
-     (p "resp" 2 z0) (p "resp" "n2" z0 n)
-     (p "resp" "a" z0 a) (p "resp" "b" z0 b)
-     (non (privk a)) (non (privk b)) (uniq n))
-    (exists ((z1 node))
-     (and (p "init" 2 z1) (p "init" "a" z1 a)))))
-  (forall ((a b name) (n text) (z0 node))
-   (implies
-    (and
-     (p "resp" 2 z0) (p "resp" "n2" z0 n)
-     (p "resp" "a" z0 a) (p "resp" "b" z0 b)
-     (non (privk a)) (non (privk b)) (uniq n))
-    (exists ((z1 node))
-     (and (p "init" 2 z1) (p "init" "b" z1 b)))))
-  (comment "Two responder authentication goals"))
-
-;;; Needham-Schroeder Protocol with origination assumptions on roles
-
-(defprotocol ns-role-origs basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-     (send (enc n1 a (pubk b)))
-     (recv (enc n1 n2 (pubk a)))
-     (send (enc n2 (pubk b))))
-    (non-orig (privk b))
-    (uniq-orig n1))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc n1 a (pubk b)))
-     (send (enc n1 n2 (pubk a)))
-     (recv (enc n2 (pubk b))))
-    (non-orig (privk a))
-    (uniq-orig n2))
-  (comment "Needham-Schroeder with role assumptions that are too strong"))
-
-;;; The initiator point of view
-(defskeleton ns-role-origs
-  (vars)
-  (defstrand init 3))
-
-;;; The responder point of view
-(defskeleton ns-role-origs
-  (vars)
-  (defstrand resp 3))
-
-;;; Needham-Schroeder Protocol with a doubled nonce.  Look at the
-;;; first message in each role.
-
-(defprotocol ns2 basic
-  (defrole init
-    (vars (a b name) (n1 n2 n3 text))
-    (trace
-     (send (enc n1 n3 a (pubk b)))
-     (recv (enc n1 n2 (pubk a)))
-     (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc n1 n1 a (pubk b)))
-     (send (enc n1 n2 (pubk a)))
-     (recv (enc n2 (pubk b))))
-    (note doubled nonce in the first message))
-  (note that this protocol is derived from Needham-Schroeder))
-
-(defskeleton ns2
-  (vars (a b name) (n1 text))
-  (defstrand init 3 (a a) (b b) (n1 n1))
-  (non-orig (privk b) (privk a))
-  (uniq-orig n1)
-  (note the disappearance of this note))
-
-;;; Note that the association list style key-value pairs that follow
-;;; the list of strands can be supplied in any order, and values with
-;;; the same key are appended together.  Check the output to see how
-;;; CPSA interprets this input.
-(defskeleton ns
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
-  (non-orig (privk b))
-  (precedes ((0 0) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig n1)
-  (precedes ((1 1) (0 1))))
diff --git a/doc/index.html b/doc/index.html
deleted file mode 100644
--- a/doc/index.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <meta http-equiv="content-type"
-	content="application/xhtml+xml; charset=UTF-8" />
-  <title>CPSA</title>
-  <style type="text/css">
-    h1 { text-align: center }
-    body { background: white; color: black; max-width: 48em }
-  </style>
-</head>
-
-<body>
-
-<p>[<a href="cpsauser.html">CPSA User Guide</a>]
-[<a href="cpsaprimer.pdf">CPSA Primer</a>]
-[<a href="cpsagoals.pdf">CPSA and Formal Security Goals</a>]
-[<a href="cpsaoverview.pdf">CPSA Overview</a>]
-[<a href="cpsaintroslides.pdf">CPSA Introductory Slides</a>]
-[<a href="http://www.mitre.org/publications/technical-papers/completeness-of-cpsa">CPSA Correctness Proof</a>]</p>
-
-<h1>CPSA</h1>
-
-<p>The Cryptographic Protocol Shapes Analyzer (CPSA) attempts to
-  enumerate all essentially different executions possible for a
-  cryptographic protocol. We call them the <i>shapes</i> of the
-  protocol. Naturally occurring protocols have only finitely many,
-  indeed very few shapes. Authentication and secrecy properties are
-  easy to determine from them, as are attacks and anomalies.</p>
-
-<p>CPSA comes with a user guide, a primer, an overview, and some slides.
-  The user guide provides usage information for each program in the
-  CPSA package.  The primer provides an English language description
-  of the CPSA algorithm and is the primary user documentation.  The
-  overview is another attack at user documentation and includes an
-  introduction to the Rely-Guarantee Method of demonstrating that a
-  protocol achieves its security goals.  This is an advanced technique
-  beginners should feel free to ignore.</p>
-
-<p>At this point, new users should open the
-  <a href="cpsaintroslides.pdf">introductory slides</a> and start
-  using CPSA by analyzing the protocols that come with this document.
-  Copy the contents of this directory to a place that allows it to be
-  modified.  In a Unix shell, type:</p>
-
-<blockquote>
-  <pre>$ echo build | ghci Make.hs</pre>
-</blockquote>
-
-<p>In Windows, click on <code>Make.hs</code> and type <code>build</code> at
-  the <code>GHCi</code> prompt <code>*Make&gt;</code>.
-  The <a href="cpsauser.html#make">CPSA User Guide</a> describes a
-  better way to analyze protocols when GNU Make is available.</p>
-
-<p>After running the analysis, you will note files with the extension
-  <code>.xhtml</code>. These are XHTML/SVG compound documents that can
-  be viewed by standards compliant browsers such as Firefox, Chrome,
-  Safari, and later versions of Internet Explorer.  See the section
-  on <a href="cpsauser.html#cpsagraph">visualization</a> in the user
-  guide for help interpreting these documents.</p>
-
-<p>New users should study CPSA's analysis of the following protocols
-  in order, Blanchet (<code>blanchet.xhtml</code>), Needham-Schroeder
-  (<code>ns.xhtml</code>), Woo-Lam (<code>woolam.xhtml</code>),
-  Yahalom (<code>yahalom.xhtml</code>), ffgg
-  (<code>ffgg.xhtml</code>), and finally Otway-Rees
-  (<code>or.xhtml</code>). When studying the full output,
-  simultaneously display the extracted shapes. The shapes file has an
-  extension of <code>_shapes.xhtml</code>.
-
-<p>An analysis of Needham-Schroeder
-  using <a href="cpsagoals.pdf">security goals</a> is
-  in <code>goals.xhtml</code>.  This example can safely be ignored by
-  new users.</p>
-
-<p>To make effective use of CPSA, new users should scan the
-  <a href="cpsauser.html">user guide</a> to get a flavor of its
-  contents, and then read the <a href="cpsaprimer.pdf">primer</a>.
-  The remainder of this document contains some usage tips to be read
-  after running CPSA and learning to understand its output.</p>
-
-<h2>Tips</h2>
-
-<p>Choose a small, simple protocol for your first analysis task. When
-  analyzing complex protocols, analyze small parts of the protocol
-  first, and then enrich the description of the problem. </p>
-
-<p>The source distribution contains additional programs and a test
-  suite with many examples.  The README in the top-level directory of
-  the source distribution contains the installation instructions and
-  is essential reading for its effective use.  Serious users should
-  favor the source distribution if on a Unix-like platform.</p>
-
-<p>Authentication tests guide the search for new skeletons in CPSA.
-  The authentication test solved at each step of the search is
-  described by the <code>operation</code> form in CPSA output.  When CPSA
-  generates unexpected output, find the first skeleton in the
-  derivation tree that exhibits the problem and read
-  the <code>operation</code> form to find out what happened.
-  Authentication tests are introduced in
-  the <a href="cpsaprimer.pdf">primer</a> and described in full
-  detail in the <a href="cpsaspec.pdf">The CPSA
-  Specification</a>.</p>
-
-<p>An origination assumption
-  (<code>non-orig</code>, <code>pen-non-orig</code>,
-  and <code>unig-orig</code>), can be specified in a role or in a
-  skeleton.  Be sure to read the advice in
-  the <a href="cpsaprimer.pdf">primer</a> on the proper placement of
-  origination assumptions.</p>
-
-<p>Variables of sort message unify with any message.  See Otway-Rees
-  (<code>or.xhtml</code>) for an example of the use of variables of this
-  sort.</p>
-
-<p>A quoted string is a constant of sort message and is called a tag.
-  Tags can be used to distinguish messages that have similar
-  structure in the case where the implementation of the protocol
-  contains protections against message conflation.</p>
-
-<p>Lisp-like macros in <code>cpsa</code> input can be used to replace
-  multiple occurrences of a message with one named definition of it.
-  Macros are described in the <a href="cpsaprimer.pdf">primer</a>.</p>
-
-<p>When the <code>cpsagraph</code> program is given
-  the <code>--zoom</code> option, it produces diagrams that scale.
-  This is useful when viewing large diagrams.</p>
-
-<p>In CPSA, a security goal is expressed as a sentence in first-order
-  logic.  It asserts that if some properties hold for a skeleton, then
-  some other properties must hold for all shapes computed by CPSA
-  starting with the skeleton.  Security goals can be used to state
-  authentication and secrecy goals of a protocol.  See
-  <a href="cpsagoals.pdf">CPSA and Formal Security Goals</a>.  An
-  analysis of Needham-Schroeder using first-order logic is
-  in <code>goals.xhtml</code>.</p>
-
-<p>When the <code>cpsapp</code> program is given
-  the <code>--json</code> option, it translates S-expressions into
-  JavaScript Object Notation (JSON).  The <code>cpsajson</code>
-  program translates JSON into S-expressions.  These two programs
-  makes it easy to manipulate CPSA input and output using Python or
-  other languages with JSON libraries.</p>
-
-<p>The goal of CPSA is to automatically characterize the possible
-  executions of a protocol compatible with a specified partial
-  execution. There is a rigorous
-  <a href="http://www.mitre.org/publications/technical-papers/completeness-of-cpsa">proof</a>
-  that the algorithm enumerates all of these characterizations.</p>
-
-<p>The <a href="cpsaspec.pdf">specification</a> describes the CPSA
-  algorithm as a term reduction system.
-  The <a href="cpsadesign.pdf">design</a> describes implementation
-  choices made and should be read when viewing the source code.</p>
-
-</body>
-</html>
diff --git a/doc/macros.tex b/doc/macros.tex
deleted file mode 100644
--- a/doc/macros.tex
+++ /dev/null
@@ -1,62 +0,0 @@
-\newcommand{\cpsa}{\textsc{cpsa}}
-\newcommand{\version}{2.5.4}
-\newcommand{\cpsacopying}{\begingroup
-  \renewcommand{\thefootnote}{}\footnotetext{{\copyright} 2010 The
-    MITRE Corporation.  Permission to copy without fee all or part of
-    this material is granted provided that the copies are not made or
-    distributed for direct commercial advantage, this copyright notice
-    and the title of the publication and its date appear, and notice
-    in given that copying is by permission of The MITRE
-    Corporation.}\endgroup}
-\newcommand{\pov}{\textsc{pov}}
-\newcommand{\cow}{\textsc{cow}}
-\newcommand{\cn}[1]{\ensuremath{\operatorname{\mathsf{#1}}}}
-\newcommand{\dom}[1]{\ensuremath{\operatorname{\mathbf{#1}}}}
-\newcommand{\fn}[1]{\ensuremath{\operatorname{\mathit{#1}}}}
-\newcommand{\seq}[1]{\ensuremath{\langle#1\rangle}}
-\newcommand{\enc}[2]{\ensuremath{\{\!|#1|\!\}_{#2}}}
-\newcommand{\hash}[1]{\ensuremath{\##1}}
-\newcommand{\comp}[2]{{\mathord{#1}}\circ{\mathord{#2}}}
-\newcommand{\sembrack}[1]{[\![#1]\!]}
-\newcommand{\semfn}[1]{\mathcal{#1}}
-\newcommand{\sem}[2]{\semfn{#1}\sembrack{#2}}
-\newcommand{\mcsu}{\ensuremath{\mathcal{C}}}
-\newcommand{\probs}{\ensuremath{\mathcal{E}}}
-\newcommand{\srt}[1]{\ensuremath{\mathsf{#1}}}
-\newcommand{\eqq}{\stackrel{?}{=}}
-\newcommand{\inbnd}{\mathord -}
-\newcommand{\outbnd}{\mathord +}
-\newcommand{\nat}{\mathbb{N}}
-\newcommand{\all}[1]{\mathop{\forall#1}}
-\newcommand{\some}[1]{\mathop{\exists#1}}
-\newcommand{\baseterms}{\mathbb{B}}
-\newcommand{\cons}{\mathbin{::}}
-\newcommand{\ith}{\imath^\mathrm{th}}
-\newcommand{\jth}{\jmath^\mathrm{th}}
-\newcommand{\append}{\mathbin{{}^\smallfrown}}
-\newcommand{\prefix}[2]{#1\dagger#2}
-\newcommand{\orig}{\mathcal{O}}
-\newcommand{\gain}{\mathcal{G}}
-%\newcommand{\pow}[1]{\mathcal{P}(#1)}
-%\newcommand{\pow}[1]{\wp(#1)}
-\newcommand{\pow}[1]{2^{#1}}
-\newcommand{\termat}{\mathbin{@}}
-\newcommand{\idsigma}{\sigma_{\mathrm{id}}}
-\newcommand{\idphi}{\phi_{\mathrm{id}}}
-\newcommand{\kprec}[1]{\mathbin{\prec_{#1}}}
-\newcommand{\terms}{\ensuremath{\mathcal{T}}}
-\newcommand{\alg}[1]{\ensuremath{\mathfrak#1}}
-\newcommand{\ops}[1]{\ensuremath{\mathbb#1}}
-\newcommand{\bundle}{\ensuremath{\mathcal{B}}}
-\newcommand{\der}[3]{\ensuremath{\dctx{#2}{#3}\vdash#1}}
-\newcommand{\dctx}[2]{\ensuremath{#1:#2}}
-\newcommand{\flow}[3]{\ensuremath{#1,#2\rhd#3}}
-\newcommand{\infer}[2]{\begin{array}{c}#1\\\hline#2\end{array}}
-\hyphenation{pre-skel-e-ton}
-\newcommand{\homomorphism}[1]{\stackrel{#1}{\longmapsto}}
-\newcommand{\reduction}[1]{\stackrel{#1}{\longrightarrow}}
-\newcommand{\longtwoheadrightarrow}{\relax
-\smash{\relbar\joinrel\twoheadrightarrow}\vphantom\rightarrow}
-\newcommand{\setreduction}[1]{\stackrel{#1}{\longtwoheadrightarrow}}
-\newcommand{\uniqat}{\mbox{\sf uniq-at}}
-\newcommand{\strprec}{\mbox{\sf str-prec}}
diff --git a/doc/mitrelogo.mp b/doc/mitrelogo.mp
deleted file mode 100644
--- a/doc/mitrelogo.mp
+++ /dev/null
@@ -1,182 +0,0 @@
-filenametemplate "%j-%c.mps";
-
-% Original comment in the METAFONT version of the MITRE logo.
-
-%% The MITRE logo version 1.1 released 11/16/89.
-
-%% Created by Richard Shaeff --- 1981
-%% Shaeff Design Inc, Needham, MA
-%%
-%% Programmed in METAFONT by John D. Ramsdell --- November 1989
-%% The MITRE Corporation, Bedford, MA
-%% Copyright 1989 by The MITRE Corporation.
-
-%% Richard Shaeff's original design was done by creating an
-%% outline.  Therefore, this METAFONT version generates letters
-%% by filling an outlined region.
-
-%% The program expects ht# and only ht# to be defined in a
-%% parameter file.  All other parameters are derived from this
-%% one.  This is in conformance with the MITRE policy which states
-%% that the logo may be changed only by linearly scaling all of
-%% the logo's dimensions.
-
-% The single parameter in METAPOST is h.
-h=15pt;
-
-%% Note:
-%% Measurements from the original design and are in inches.
-%% The height of the logo is 4.25 inches and that height is
-%% used to scale all dimensions.
-%%
-
-%% MITRE blue is Pantone Matching System (PMS) 293 Blue, with an RGB
-%% value of (0, 81, 186).
-
-prologue:=1;
-
-I_w            = 0.87500/4.25h;      % I width. (7/8in)
-T_bar_h        = 0.78125/4.25h;      % T bar height. (25/32in)
-T_lft_w        = 1.03125/4.25h;      % Left T bar. (1 1/32in)
-T_rt_w         = 1.00000/4.25h;      % Right T bar. (1in)
-E_gap_h        = 0.93750/4.25h;      % Upper E gap. (15/16in)
-E_bar_shrink_h = 0.06250/4.25h;      % Mid bar shrink. (1/16in)
-E_bar_w        = 1.56250/4.25h;      % E bar width. (1 9/16in)
-R_tail_a       = 125;                % R tail angle.
-M_vee_h        = 1.62500/4.25h;      % M vee height. (1 5/8in)
-M_vee_a        = 70;                 % M vee angle.
-M_edge_a       = 100;                % M edge angle.
-M_w            = 5.25000/4.25h;      % M width. (5 1/4in)
-skip_w         = 0.12500/4.25h;      % Distance between T and R.
-                                     % (1/8in)
-s = max(1, round(skip_w));           % Rounded interletter space.
-color mitreblue;
-mitreblue      = (0,70/255,174/255); % MITRE blue PMS 293 Blue
-
-def draw_M(expr o) =
-  begingroup
-    save x, y;
-    w = M_w + skip_w;
-    x1 = o;
-    y2 = y3 = y5 = y6 = h;
-    y4 = h - y12 = h - y9 = M_vee_h;       % The vee heights are the same.
-    y1 = y13 = y11 = y10 = y8 = y7 = 0;
-
-    x13 = x1 + I_w;
-    x7 = w - max(1, round(.5skip_w));
-    x8 = x7 - I_w;
-    x3 - x2 = x6 - x5;                     % Top edges widths are the same.
-    x5 - x2 = x10 - x1;                    % A strange fact---measure it!
-
-    z6 = z7 + whatever * dir M_edge_a;     % The right side has all nice
-    z9 = z8 + whatever * dir M_edge_a;     % and neat angles defining it.
-    z10 = z9 + whatever * dir M_vee_a;
-    z4 = (-I_w, 0) + whatever[z10,z9];     % Width of right diagonal is I_w.
-    z5 = z4 + whatever * dir M_vee_a;
-    z12 = z13 + whatever * (z2 - z1);
-    z11 = z12 + whatever * (z3 - z4);
-    % The width of the left diagonal is only approximately I_w.
-    % The following is only "almost" true.
-    % z4 = (I_w, 0) + whatever[z11,z12];
-
-    fill z1--z2--z3--z4--z5--z6--z7
-    & z7--z8--z9--z10--z11--z12--z13--cycle withcolor mitreblue;
-    w
-  endgroup;
-enddef;
-
-def draw_I(expr o) =
-  begingroup
-    save x, y;
-    y2 = y3 = h;
-    y1 = y4 = 0;
-
-    x1 = x2 = o;
-    x3 = x4 = o + round(I_w);
-
-    fill z1--z2--z3--z4--cycle withcolor mitreblue;
-    x3 + s
-  endgroup;
-enddef;
-
-def draw_T(expr o) =
-  begingroup;
-    save x, y;
-    y4 = y5 = h;
-    y3 = y2 = y7 = y6 = h - T_bar_h;
-    y1 = y8 = 0;
-
-    x3 = x4 = o;
-    x2 = x1 = o + round(T_lft_w);
-    x7 = x8 = o + round(T_lft_w + I_w);
-    x6 = x5 = o + round(T_lft_w + I_w + T_rt_w);
-
-    fill z1--z2--z3--z4--z5--z6--z7--z8--cycle withcolor mitreblue;
-    x6 + s
-  endgroup;
-enddef;
-
-def draw_R(expr o) =
-  begingroup;
-    save x, y;
-    y2 = y3 = h;
-    y10 = y11 = h - T_bar_h;       % y10, y8, y5, y3 must be integers.
-    y9 = y4 = y10 - .5E_gap_h;     % They help determine the position
-    y7 = y15 = y8 = y10 - E_gap_h; % of horizontal tangents to curves.
-    y6 = y5 = y7 - (T_bar_h - E_bar_shrink_h);
-    y1 = y12 = y13 = y16 = 0;
-
-    x1 = x2 = o;
-    x11 = x12 = o + round(I_w);	   % The space in the "R" must be the
-    x7 = x6 = x14 = x11 + s;       % same as the interletter space.
-    x3 = x10 = x8 = x5 = o + I_w + y7 - y 14;  % The location of the tail
-    x13 = x3 + .5E_gap_h;          % (x13) must not be rounded or
-                                % METAFONT cannot solve the equations.
-    z14 = z13 + whatever * dir R_tail_a;
-    z16 = (x13+I_w+skip_w, skip_w) + whatever * dir R_tail_a;
-    z15 = z16 + whatever * dir R_tail_a;
-
-    x9 = round(x13);               % x4 and x9 determine vertical tangents
-    x4 = round(x13 + I_w);         % so they must be integers.
-
-    fill z1--z2--z3
-    & z3{z3-z2}..z4{z5-z3}..{z6-z5}z5
-    & z5--z6--z7--z8
-    & z8{z8-z7}..z9{z10-z8}..{z11-z10}z10
-    & z10--z11--z12--cycle withcolor mitreblue;
-
-    % "R" Tail
-    fill z13--z14--z7--z15--z16--cycle withcolor mitreblue;
-    x4 + s
-  endgroup;
-enddef;
-
-def draw_E(expr o) =
-  begingroup;
-    save x, y;
-    y2 = y3 = h;
-    y5 = y4 = h - T_bar_h;
-    y6 = y7 = y5 - E_gap_h;
-    y9 = y8 = y6 - (T_bar_h - E_bar_shrink_h);
-    % Notice that the lower bar is bigger than the upper one.
-    y10 = y11 = T_bar_h + E_bar_shrink_h;
-    y1 = y12 = 0;
-
-    x1 = x2 = o;
-    x5 = x6 = x9 = x10 = o + round(I_w);
-    x3 = x4 = x7 = x8 = x11 = x12 = o + round(I_w + E_bar_w);
-
-    fill z1--z2--z3--z4--z5--z6--z7--z8
-    & z8--z9--z10--z11--z12--cycle withcolor mitreblue;
-    x3 + max(1, round(.5skip_w))
-  endgroup;
-enddef;
-
-beginfig(0);
-  x1 = draw_M(0);
-  x2 = draw_I(x1);
-  x3 = draw_T(x2);
-  x4 = draw_R(x3);
-  x5 = draw_E(x4);
-endfig;
-bye;
diff --git a/doc/mitreslides.sty b/doc/mitreslides.sty
deleted file mode 100644
--- a/doc/mitreslides.sty
+++ /dev/null
@@ -1,97 +0,0 @@
-% mitreslides package for use with the slides class in LaTeX.
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{mitreslides}[2005/02/21]
-%
-% John D. Ramsdell
-%
-% Example file:
-%
-%	\documentclass[landscape]{slides}
-%	\usepackage{mitreslides}
-%       \renewcommand{\footercomment}{A Title}
-%	\begin{document}
-%	...
-%	\end{document}
-%
-% Defines environments: titleslide, mitreslide, and mitreoverlay
-%
-% The "slide" pagestyle is also defined.  It prints the slide
-% number, and the MITRE logo in the lower right corner.
-%
-% titleslide example:
-%
-%	\begin{titleslide}{A Briefing\\of Major Importance}
-%	R. J. Drofnats
-%
-%	30 Feb 93
-%	\end{titleslide}
-%
-%		The first argument is optional and is passed to
-%               the slide environment and is used for color slides.
-%		The second argument is the briefing title.
-%
-% mitreslide example:
-%
-%	\begin{mitreslide}{A Slide\\Title}
-%	...slide contents...
-%	\end{mitreslide}
-%
-%		The first argument is optional and is passed to
-%               the slide environment and is used for color slides.
-%               The second argument is the slide title.
-%
-% Set the footer comment with footercomment.
-% The options are, date, nopagenumbers, and marks.
-%
-% Initial code
-\RequirePackage{ifthen}
-\newboolean{date}                           % Show current date
-\newboolean{nopagenums}                     % Omit page numbers
-\newboolean{marks}                          % Show top marks
-% Declaration of options
-\DeclareOption{date}{\setboolean{date}{true}}
-\DeclareOption{nopagenums}{\setboolean{nopagenums}{true}}
-\DeclareOption{marks}{\setboolean{marks}{true}}
-%
-\ProcessOptions
-\RequirePackage{graphicx}
-% ----------- main code ----------------
-% Footer comment is empty by default.
-\newcommand{\footercomment}{}
-
-\ifthenelse{\boolean{date}}{%
-\newcommand{\show@date}{\the\year{/}\the\month{/}\the\day}%
-}{%
-\newcommand{\show@date}{}%
-}
-
-\ifthenelse{\boolean{nopagenums}}{%
-\newcommand{\show@slidenum}{\phantom{\theslide}}%
-}{%
-\newcommand{\show@slidenum}{\theslide}%
-}
-
-\ifthenelse{\boolean{marks}}{%
-\newcommand{\show@mark}{+}%
-}{%
-\newcommand{\show@mark}{\phantom{+}}%
-}
-%
-%        slide page style -- MITRE logo goes flush right
-\def\ps@slide{%
-\def\@oddfoot{{\tiny\show@slidenum\qquad\show@date\quad\footercomment}%
-\hfil\includegraphics{mitrelogo-0.mps}}
-\def\@oddhead{\show@mark\hfil\show@mark}
-\def\@evenfoot{\@oddfoot}
-\def\@evenhead{\@oddhead}}
-%
-%	\begin{mitreslide}[COLORS]{TITLE} ... \end{mitreslide}
-\newenvironment{mitreslide}[2][]%  Built on the slide environment.
-{\begin{slide}{#1}{\noindent\raggedright\Large#2\par}}%
-{\vfill\end{slide}}
-%
-%	\begin{titleslide}[COLORS]{TITLE} ... \end{titleslide}
-\newenvironment{titleslide}[2][]%
-{\begin{slide}{#1}\begin{center}{{\Large#2\par}}}%
-{\end{center}\end{slide}}
diff --git a/doc/ns.scm b/doc/ns.scm
deleted file mode 100644
--- a/doc/ns.scm
+++ /dev/null
@@ -1,37 +0,0 @@
-(herald "Needham-Schroeder Public-Key Protocol"
-	(comment "This protocol contains a man-in-the-middle"
-		 "attack discovered by Gavin Lowe."))
-
-;;; Used to generate output for inclusion in the primer.
-;;; Use margin = 60 (-m 60) to generate the output.
-
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-     (send (enc n1 a (pubk b)))
-     (recv (enc n1 n2 (pubk a)))
-     (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc n1 a (pubk b)))
-     (send (enc n1 n2 (pubk a)))
-     (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder"))
-
-;;; The initiator point-of-view
-(defskeleton ns
-  (vars (a b name) (n1 text))
-  (defstrand init 3 (a a) (b b) (n1 n1))
-  (non-orig (privk b) (privk a))
-  (uniq-orig n1)
-  (comment "Initiator point-of-view"))
-
-;;; The responder point-of-view
-(defskeleton ns
-  (vars (a name) (n2 text))
-  (defstrand resp 3 (a a) (n2 n2))
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (comment "Responder point-of-view"))
diff --git a/doc/or.scm b/doc/or.scm
deleted file mode 100644
--- a/doc/or.scm
+++ /dev/null
@@ -1,27 +0,0 @@
-(herald "Otway-Rees Protocol"
-	(comment "Standard version using variables of sort mesg"))
-
-(defprotocol or basic
-  (defrole init (vars (a b s name) (na text) (k skey) (m text))
-    (trace
-     (send (cat m a b (enc na m a b (ltk a s))))
-     (recv (cat m (enc na k (ltk a s))))))
-  (defrole resp
-    (vars (a b s name) (nb text) (k skey) (m text) (x y mesg))
-    (trace
-     (recv (cat m a b x))
-     (send (cat m a b x (enc nb m a b (ltk b s))))
-     (recv (cat m y (enc nb k (ltk b s))))
-     (send y)))
-  (defrole serv (vars (a b s name) (na nb text) (k skey) (m text))
-    (trace
-     (recv (cat m a b (enc na m a b (ltk a s))
-		(enc nb m a b (ltk b s))))
-     (send (cat m (enc na k (ltk a s)) (enc nb k (ltk b s)))))
-    (uniq-orig k)))
-
-(defskeleton or
-  (vars (nb text) (s a b name))
-  (defstrand resp 4 (a a) (b b) (s s) (nb nb))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig nb))
diff --git a/doc/readme.html b/doc/readme.html
deleted file mode 100644
--- a/doc/readme.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <meta http-equiv="REFRESH" content="0;url=index.html" />
-  <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
-  <title>CPSA</title>
-</head>
-
-<body>
-  <p>Start <a href="index.html">here</a>.</p>
-</body>
-</html>
diff --git a/doc/strands.mp b/doc/strands.mp
deleted file mode 100644
--- a/doc/strands.mp
+++ /dev/null
@@ -1,129 +0,0 @@
-% Strand macros
-
-%% John D. Ramsdell--May 2008,
-%% The MITRE Corporation, Bedford, MA.
-
-% For simple drawings, use the strand macro.
-
-% Use these macros when drawing strand edges.  The cmstrands package
-% redefines these two macros.
-
-% Draw a message edge
-def drawmsg(expr p) =
-  drawarrow p;
-enddef;
-
-% Draw a strand succession edge.  The arrow head is drawn, not filled.
-% Based on "Hints and Tricks" in TUGboat, Volume 19 (1998), No. 2, by
-% Jeremy Gibbons.
-def drawsucc(expr p) =
-  draw arrowhead p;
-  path q;
-  q := fullcircle scaled (2*ahlength)
-    shifted (point (length p) of p);
-  numeric tp, tq;
-  (tp,tq) = p intersectiontimes q;
-  draw subpath (0, tp) of p;
-enddef;
-
-% Draw a message edge with a dashed line.  Used sometimes for when the
-% source and the distination message differ.
-def drawdashedmsg(expr p) =
-  drawarrow p dashed evenly scaled 3;
-enddef;
-
-% Strand drawing macros
-
-% Box the nodes of a strand.  The origin of the strand is the center
-% of the last strand node.  The name is a picture for the first node,
-% and node is a picture for the successive nodes.
-vardef boxstrand@#(expr height, origin, name, node) =
-  boxit.@#1(name);
-  for i = 2 upto height:
-    boxit.@#[i](node);
-    xpart @#[i-1].s = xpart @#[i].n;
-  endfor;
-  @#[height].c = origin;
-enddef;
-
-% Space a pair of strand nodes using the given height and separation
-% delta.
-vardef spacestrand@#(expr pos, delta) =
-  ypart @#[pos].s = delta + ypart @#[pos+1].n;
-enddef;
-
-% Layout strand by making the distance been successive nodes the given
-% separation delta.
-vardef layoutstrand@#(expr height, delta) =
-  for i = 1 upto height - 1:
-    spacestrand@#(i, delta);
-  endfor;
-enddef;
-
-% Link the nodes of a strand.
-vardef linkstrand@#(expr height) =
-  for i = 2 upto height:
-    drawsucc(@#[i-1].s -- @#[i].n);
-  endfor;
-enddef;
-
-% Draw a strand with equally spaced nodes.  The origin of the strand
-% is the center of the last strand node.  The the distance between
-% successive nodes is delta.  The name is a picture for the first
-% node, and node is a picture for the successive nodes.
-
-% A strand is drawn bottom up because the size of the label in the
-% first box may vary.
-
-vardef strand@#(expr height, origin, delta, name, node) =
-  boxstrand@#(height, origin, name, node);
-  layoutstrand@#(height, delta);
-  for i = height downto 1:
-    draw pic @#[i];
-  endfor;
-  linkstrand@#(height);
-enddef;
-
-% layout a strand but don't draw it.
-vardef phantomstrand@#(expr height, origin, delta, name, node) =
-  boxstrand@#(height, origin, name, node);
-  layoutstrand@#(height, delta);
-  for i = height downto 1:
-    fixsize(@#[i]);
-  endfor;
-enddef;
-
-% Event macros used while displaying roles.
-
-% Draw an inbound term at a given strand position.
-% The width is the length of the first arrow.
-vardef inbnd@#(expr pos, width, term) =
-  pair d;
-  d = (xpart @#[1].e + width, ypart @#[pos].e);
-  drawmsg(d .. @#[pos].e);
-  label.rt(term, d);
-enddef;
-
-% Draw an outbound term at a given strand position.
-% The width is the length of the first arrow.
-vardef outbnd@#(expr pos, width, term) =
-  pair d;
-  d = (xpart @#[1].e + width, ypart @#[pos].e);
-  drawmsg(@#[pos].e .. d);
-  label.rt(term, d);
-enddef;
-
-% Reverse versions:
-vardef rinbnd@#(expr pos, width, term) =
-  pair d;
-  d = (xpart @#[1].w - width, ypart @#[pos].w);
-  drawmsg(d .. @#[pos].w);
-  label.lft(term, d);
-enddef;
-
-vardef routbnd@#(expr pos, width, term) =
-  pair d;
-  d = (xpart @#[1].w - width, ypart @#[pos].w);
-  drawmsg(@#[pos].w .. d);
-  label.lft(term, d);
-enddef;
diff --git a/doc/termtree.mp b/doc/termtree.mp
deleted file mode 100644
--- a/doc/termtree.mp
+++ /dev/null
@@ -1,60 +0,0 @@
-filenametemplate "%j-%c.mps";
-
-verbatimtex
-\documentclass[12pt]{article}
-\newcommand{\enc}{\ensuremath{\mathsf{enc}}}
-\newcommand{\pair}{\ensuremath{\mathsf{pair}}}
-\newcommand{\pubk}{\ensuremath{\mathsf{pubk}}}
-%\newcommand{\enc}{\ensuremath{\{\!|\cdot|\!\}_{(\cdot)}}}
-%\newcommand{\pair}{\ensuremath{(\cdot,\cdot)}}
-%\newcommand{\pubk}{\ensuremath{K_{(\cdot)}}}
-\begin{document}
-etex
-
-beginfig(0);
-  h = -1cm;
-  w = 1cm;
-  z0 = origin;
-  z1 = z0 + (-1.5w, h);
-  z2 = z1 + (-.5w, h);
-  z3 = z1 + (.5w, h);
-  z4 = z3 + (0, h);
-  z5 = z0 + (1.5w, h);
-  z6 = z5 + (-w, h);
-  z7 = z6 + (-.5w, h);
-  z8 = z6 + (.5w, h);
-  z9 = z8 + (0, h);
-  z10 = z5 + (w, h);
-  z11 = z10 + (0, h);
-
-  draw z0--z1;
-  draw z1--z2;
-  draw z1--z3;
-  draw z3--z4;
-  draw z0--z5;
-  draw z5--z6;
-  draw z6--z7;
-  draw z6--z8;
-  draw z8--z9;
-  draw z5--z10;
-  draw z10--z11;
-
-  pickup pencircle scaled 4pt;
-  dotlabel.rt(btex ~~\pair etex, z0);
-  dotlabel.rt(btex ~~\enc etex, z1);
-  dotlabel.rt(btex ~$x$ etex, z2);
-  dotlabel.rt(btex ~\pubk etex, z3);
-  dotlabel.rt(btex ~$a$ etex, z4);
-  dotlabel.rt(btex ~\enc etex, z5);
-  dotlabel.rt(btex ~\enc etex, z6);
-  dotlabel.rt(btex ~$x$ etex, z7);
-  dotlabel.rt(btex ~\pubk etex, z8);
-  dotlabel.rt(btex ~$a$ etex, z9);
-  dotlabel.rt(btex ~\pubk etex, z10);
-  dotlabel.rt(btex ~$b$ etex, z11);
-endfig;
-
-verbatimtex
-\end{document}
-etex
-bye;
diff --git a/doc/woolam.scm b/doc/woolam.scm
deleted file mode 100644
--- a/doc/woolam.scm
+++ /dev/null
@@ -1,26 +0,0 @@
-(herald "Woo-Lam Protocol")
-
-(defprotocol woolam basic
-  (defrole init (vars (a s name) (n text))
-    (trace
-     (send a)
-     (recv n)
-     (send (enc n (ltk a s))))
-    (non-orig (ltk a s)))
-  (defrole resp (vars (a s b name) (n text))
-    (trace
-     (recv a)
-     (send n)
-     (recv (enc n (ltk a s)))
-     (send (enc a (enc n (ltk a s)) (ltk b s)))
-     (recv (enc a n (ltk b s))))
-    (non-orig (ltk b s))
-    (uniq-orig n))
-  (defrole serv (vars (a s b name) (n text))
-    (trace
-     (recv (enc a (enc n (ltk a s)) (ltk b s)))
-     (send (enc a n (ltk b s))))))
-
-(defskeleton woolam (vars (n text) (a s name))
-  (defstrand resp 5 (a a) (s s))
-  (non-orig (ltk a s)))
diff --git a/doc/yahalom.scm b/doc/yahalom.scm
deleted file mode 100644
--- a/doc/yahalom.scm
+++ /dev/null
@@ -1,34 +0,0 @@
-(herald "Yahalom Protocol with Forwarding Removed" (bound 10))
-
-(defprotocol yahalom basic
-  (defrole init
-    (vars (a b c name) (n-a n-b text) (k skey))
-    (trace (send (cat a n-a))
-	   (recv (enc b k n-a n-b (ltk a c)))
-	   (send (enc n-b k))))
-  (defrole resp
-    (vars (b a c name) (n-a n-b text) (k skey))
-    (trace (recv (cat a n-a))
-	   (send (cat b (enc a n-a n-b (ltk b c))))
-	   (recv (enc a k (ltk b c)))
-	   (recv (enc n-b k))))
-  (defrole serv
-    (vars (c a b name) (n-a n-b text) (k skey))
-    (trace (recv (cat b (enc a n-a n-b (ltk b c))))
-	   (send (enc b k n-a n-b (ltk a c)))
-	   (send (enc a k (ltk b c))))
-    (uniq-orig k)))
-
-(defskeleton yahalom
-  (vars (a b c name) (n-b text))
-  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b))
-  (non-orig (ltk b c) (ltk a c))
-  (uniq-orig n-b))
-
-;;; Ensure encryption key remains secret.
-(defskeleton yahalom
-  (vars (a b c name) (n-b text) (k skey))
-  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b) (k k))
-  (deflistener k)
-  (non-orig (ltk b c) (ltk a c))
-  (uniq-orig n-b))
diff --git a/ghci b/ghci
--- a/ghci
+++ b/ghci
@@ -1,3 +1,5 @@
 :set -isrc:dist/build/autogen
 :set -fbreak-on-error
-:set args tst/dhke.scm
+:set args tst/dh_mim.scm
+-- ghci src/CPSA/Lib/Main.hs
+-- :trace main
diff --git a/license.txt b/license.txt
--- a/license.txt
+++ b/license.txt
@@ -1,12 +1,12 @@
 
-			 CPSA LICENSE NOTICE
+			 CPSA3 LICENSE NOTICE
 
 This software was produced for the U. S. Government under Contract
 No. W15P7T-04-C-D199, and is subject to the Rights in Noncommercial
 Computer Software and Noncommercial Computer Software Documentation
 Clause 252.227-7014 (JUN 1995).
 
-Copyright (c) 2009 The MITRE Corporation.
+Copyright (c) 2013 The MITRE Corporation.
 All Rights Reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/setup.bat b/setup.bat
--- a/setup.bat
+++ b/setup.bat
@@ -1,8 +1,8 @@
-@setlocal enableextensions
-@cd /d "%~dp0"
-runghc Setup.hs configure 
-runghc Setup.hs build
-
-runghc Setup.hs install
-
-pause
+@setlocal enableextensions
+@cd /d "%~dp0"
+runghc Setup.hs configure
+runghc Setup.hs build
+
+runghc Setup.hs install
+
+pause
diff --git a/src/CPSA/Annotations/Annotations.hs b/src/CPSA/Annotations/Annotations.hs
--- a/src/CPSA/Annotations/Annotations.hs
+++ b/src/CPSA/Annotations/Annotations.hs
@@ -102,7 +102,7 @@
                 g -> [SExpr Pos] -> m (g, t, [Formula t])
 loadFormulas pos vars len gen (x : xs) =
     do
-      prin <- loadTerm vars x
+      prin <- loadTerm vars False x
       case isAtom prin of
         True -> return ()
         False -> fail (shows pos "principal not an atom")
@@ -258,8 +258,8 @@
               [t] -> [t] -> (g, e) -> SExpr Pos -> m (g, e)
 loadMaplet kvars vars env (L pos [domain, range]) =
     do
-      t <- loadTerm vars domain
-      t' <- loadTerm kvars range
+      t <- loadTerm vars False domain
+      t' <- loadTerm kvars False range
       case match t t' env of
         env' : _ -> return env'
         [] -> fail (shows pos "Domain does not match range")
diff --git a/src/CPSA/Annotations/Formulas.hs b/src/CPSA/Annotations/Formulas.hs
--- a/src/CPSA/Annotations/Formulas.hs
+++ b/src/CPSA/Annotations/Formulas.hs
@@ -165,7 +165,7 @@
                                  L pos [S pos' "implies", y, x]])
 loadFormula vars gen (L _ [S _ "says", x, y]) = -- Says modal operator
     do
-      t <- loadTerm vars x
+      t <- loadTerm vars False x
       (gen', f) <- loadFormula vars gen y
       return (gen', Says t f)
 loadFormula vars gen (L _ [S _ "forall", L _ xs, x]) = -- Universal
@@ -233,7 +233,7 @@
 loadFTerm :: Algebra t p g s e c => [t] -> SExpr Pos ->
              EitherS (FTerm t)
 loadFTerm vars x =
-    case loadTerm vars x of
+    case loadTerm vars False x of
       RightS t -> return (AlgTerm t)
       LeftS msg ->              -- If x is not an algebra term
           case x of             -- see if it's an application
diff --git a/src/CPSA/Basic/Algebra.hs b/src/CPSA/Basic/Algebra.hs
--- a/src/CPSA/Basic/Algebra.hs
+++ b/src/CPSA/Basic/Algebra.hs
@@ -14,52 +14,6 @@
 -- modify it under the terms of the BSD License as published by the
 -- University of California.
 
---------------------------------------------------------------------
-
--- The Basic Crypto Order-Sorted Signature is
-
--- Sorts: mesg, text, data, name, skey, akey, and string
---
--- Subsorts: text, data, name, skey, akey < mesg
---
--- Operations:
---   cat : mesg X mesg -> mesg               Pairing
---   enc : mesg X mesg -> mesg               Encryption
---   hash : mesg -> mesg                     Hashing
---   string : mesg                           Tag constants
---   ltk : name X name -> skey               Long term shared key
---   pubk : name -> akey                     Public key of principal
---   pubk : string X name -> akey            Tagged public key of principal
---   invk : akey -> akey                     Inverse of asymmetric key
---
--- Atoms: messages of sort text, data, name, skey, and akey.
-
--- Variables of sort string are forbidden.
-
--- The implementation exploits the isomorphism between order-sorted
--- algebras and many-sorted algebras by adding inclusion operations to
--- produce an equivalent Basic Crypto Many-Sorted Signature.  There is
--- an inclusion operation for each subsort of mesg.
-
--- Sorts: mesg, text, data, name, skey, akey, and string
---
--- Operations:
---   cat : mesg X mesg -> mesg               Pairing
---   enc : mesg X mesg -> mesg               Encryption
---   hash : mesg -> mesg                     Hashing
---   string : mesg                           Tag constants
---   ltk : name X name -> skey               Long term shared key
---   pubk : name -> akey                     Public key of principal
---   pubk : string X name -> akey            Tagged public key of principal
---   invk : akey -> akey                     Inverse of asymmetric key
---   text : text -> mesg                     Sort text inclusion
---   data : data -> mesg                     Sort date inclusion
---   name : name -> mesg                     Sort name inclusion
---   skey : skey -> mesg                     Sort skey inclusion
---   akey : akey -> mesg                     Sort akey inclusion
-
--- In both algebras, invk(invk(t)) = t for all t of sort akey
-
 {-# LANGUAGE MultiParamTypeClasses #-}
 
 module CPSA.Basic.Algebra (name, origin) where
@@ -105,6 +59,48 @@
 cloneId :: Gen -> Id -> (Gen, Id)
 cloneId gen x = freshId gen (idName x)
 
+-- The Basic Crypto Order-Sorted Signature is
+
+-- Sorts: mesg, text, data, name, skey, akey, and string
+--
+-- Subsorts: text, data, name, skey, akey < mesg
+--
+-- Operations:
+--   cat : mesg X mesg -> mesg               Pairing
+--   enc : mesg X mesg -> mesg               Encryption
+--   hash : mesg -> mesg                     Hashing
+--   string : mesg                           Tag constants
+--   ltk : name X name -> skey               Long term shared key
+--   pubk : name -> akey                     Public key of principal
+--   pubk : string X name -> akey            Tagged public key of principal
+--   invk : akey -> akey                     Inverse of asymmetric key
+
+-- Variables of sort string are forbidden.
+
+-- The implementation exploits the isomorphism between order-sorted
+-- algebras and many-sorted algebras by adding inclusion operations to
+-- produce an equivalent Basic Crypto Many-Sorted Signature.  There is
+-- an inclusion operation for each subsort of mesg.
+
+-- Sorts: mesg, text, data, name, skey, akey, and string
+--
+-- Operations:
+--   cat : mesg X mesg -> mesg               Pairing
+--   enc : mesg X mesg -> mesg               Encryption
+--   hash : mesg -> mesg                     Hashing
+--   string : mesg                           Tag constants
+--   ltk : name X name -> skey               Long term shared key
+--   pubk : name -> akey                     Public key of principal
+--   pubk : string X name -> akey            Tagged public key of principal
+--   invk : akey -> akey                     Inverse of asymmetric key
+--   text : text -> mesg                     Sort text inclusion
+--   data : data -> mesg                     Sort date inclusion
+--   name : name -> mesg                     Sort name inclusion
+--   skey : skey -> mesg                     Sort skey inclusion
+--   akey : akey -> mesg                     Sort akey inclusion
+
+-- In both algebras, invk(invk(t)) = t for all t of sort akey
+
 -- Operations other than the tag constant constructor
 data Symbol
     = Text                      -- Text
@@ -151,6 +147,27 @@
 isNodeVar (D _) = True
 isNodeVar _ = False
 
+subNums :: Term -> Set Term
+subNums _ = S.empty
+
+indicator :: Term -> Term -> Maybe Int
+indicator _ _ = Nothing
+
+forceVar :: Term -> Term
+forceVar (I x) = (I x)
+forceVar (C x) = (C x) -- no variable!
+forceVar (F Text y) = (F Text y)
+forceVar (F Data y) = (F Data y)
+forceVar (F Name y) = (F Name y)
+forceVar (F Skey [(I x)]) = (F Skey [(I x)])
+forceVar (F Skey [(F Ltk ns)]) = forceVar (head ns)
+forceVar (F Akey [(I x)]) = (F Akey [(I x)])
+forceVar (F Akey [F Invk ns]) = forceVar (head ns)
+forceVar (F Akey [F Pubk ns]) = forceVar (head ns)
+forceVar (F _ ns) = forceVar (head ns) -- for Cat, Enc.
+forceVar (D x) = (D x)
+forceVar (P x) = (P x) -- no variable!
+
 -- Extract the identifier from a variable
 varId :: Term -> Id
 varId (I x) = x
@@ -160,7 +177,7 @@
 varId (F Skey [I x]) = x
 varId (F Akey [I x]) = x
 varId (D x) = x
-varId _ = error "Algebra.varId: term not a variable with its sort"
+varId _ = C.assertError "Algebra.varId: term not a variable with its sort"
 
 isAcquiredVar :: Term -> Bool
 isAcquiredVar (I _) = True
@@ -261,18 +278,25 @@
 isAtom (D _) = False
 isAtom (P _) = False
 
+-- Is the term numeric?
+isNum :: Term -> Bool
+isNum _ = False
+
 -- Does a variable occur in a term?
 occursIn :: Term -> Term -> Bool
-occursIn t t' | isVar t =
-  recur (I $ varId t) t'
-  where
-    recur t t' =
-      t == t' ||
-      case t' of
-        F _ u -> any (recur t) u
-        _ -> False
-occursIn t _ = error $ "Algebra.occursIn: Bad variable " ++ show t
+occursIn t t' | isVar t =       -- Does a variable occur in a term?
+  subterm (I $ varId t) t'
+occursIn t _ =
+  C.assertError $ "Algebra.occursIn: Bad variable " ++ show t
 
+subterm :: Term -> Term -> Bool
+subterm t t' | t == t' =
+  True
+subterm t (F _ u) =
+  any (subterm t) u
+subterm _ _ =
+  False
+
 -- Fold f through a term applying it to each variable in the term.
 foldVars :: (a -> Term -> a) -> a -> Term -> a
 foldVars f acc t@(I _) = f acc t          -- Mesg variable
@@ -296,7 +320,7 @@
 foldVars f acc (F Hash [t])     = -- Hashing
     foldVars f acc t
 foldVars f acc t@(D _) = f acc t          -- Node variable
-foldVars _ _ t = error $ "Algebra.foldVars: Bad term " ++ show t
+foldVars _ _ t = C.assertError $ "Algebra.foldVars: Bad term " ++ show t
 
 -- Fold f through a term applying it to each term that is carried by the term.
 foldCarriedTerms :: (a -> Term -> a) -> a -> Term -> a
@@ -315,6 +339,14 @@
         F Enc [t0, _] -> carriedBy t t0
         _ -> False
 
+-- Is atom a constituent of a term?  In other words, is atom among
+-- the set of atoms required to construct the term?
+constituent :: Term -> Term -> Bool
+constituent t t' | isAtom t =
+  subterm t t'
+constituent t _ =
+  C.assertError $ "Algebra.constituent: Bad atom " ++ show t
+
 -- The key used to decrypt an encrypted term, otherwise Nothing.
 decryptionKey :: Term -> Maybe Term
 decryptionKey (F Enc [_, t]) = Just (inv t)
@@ -332,8 +364,15 @@
           S.member t knowns || ba t0 && ba t1
       ba t@(F Hash [t1]) =
           S.member t knowns || ba t1
-      ba t = isAtom t && S.notMember t unguessable
+      ba t = isAtom t && not (S.member t unguessable)
 
+-- Penetrator derivable predicate and checking for unrealized skeletons.
+
+derivable :: Set Term -> Set Term -> Term -> Bool
+derivable avoid sent term =
+    let (knowns, unknowns) = decompose sent avoid in
+    buildable knowns unknowns term
+
 -- Compute the decomposition given some known terms and some unguessable
 -- atoms.  The code is quite tricky.  It iterates until the known
 -- terms don't change.  The known terms ends up with all the
@@ -387,8 +426,8 @@
 -- Returns the encryptions that carry the target.  If the target is
 -- carried outside all encryptions, or is exposed because a decription
 -- key is derivable, Nothing is returned.
-protectors :: (Term -> Bool) -> Term -> Term -> Maybe [Term]
-protectors derivable target source =
+protectors :: Set Term -> Set Term -> Term -> Term -> Maybe [Term]
+protectors avoid sent target source =
     do
       ts <- bare source S.empty
       return $ S.elems ts
@@ -399,7 +438,7 @@
           maybe Nothing (bare t') (bare t acc)
       bare t@(F Enc [t', key]) acc =
           if target `carriedBy` t' then
-              if derivable (inv key) then
+              if (derivable avoid sent) (inv key) then
                   bare t' acc
               else
                   Just (S.insert t acc)
@@ -407,52 +446,12 @@
               Just acc
       bare _ acc = Just acc
 
--- Support for data flow analysis of traces.  A flow rule maps an
--- initial set of atoms and a set of available terms to sets of pairs
--- of the same sets.
-type FlowRule = (Set Term, Set Term) -> Set (Set Term, Set Term)
-
--- Combine flow rules sequentially.
-comb :: FlowRule -> FlowRule -> FlowRule
-comb f g x =
-    S.fold h S.empty (g x)
-    where
-      h a s = S.union (f a) s
-
--- Analyze a term as a sent term.
-outFlow :: Term -> FlowRule
-outFlow t a@(_, available)
-    | S.member t available = S.singleton a
-outFlow (I _) _ = S.empty
-outFlow (C _) a = S.singleton a
-outFlow (F Cat [t0, t1]) a =    -- Construct non-atoms
-    comb (outFlow t1) (outFlow t0) a
-outFlow (F Enc [t0, t1]) a =
-    comb (outFlow t1) (outFlow t0) a
-outFlow (F Hash [t]) a =
-    outFlow t a
-outFlow t (initial, available) = -- Don't look inside atoms
-    S.singleton (S.insert t initial, S.insert t available)
-
--- Analyze a term as a received term.
-inFlow :: Term -> FlowRule
-inFlow (C _) a = S.singleton a
-inFlow (F Cat [t0, t1]) a =     -- Try to receive components
-    S.union                     -- in both orders
-         (comb (inFlow t1) (inFlow t0) a)
-         (comb (inFlow t0) (inFlow t1) a)
-inFlow t@(F Enc [t0, t1]) (initial, available) =
-    S.union
-         (outFlow t (initial, available)) -- Encryption can be built
-         (comb (inFlow t0) (outFlow (inv t1)) a) -- or decrypted
-    where                       -- Derive decryption key first
-      a = (initial, S.insert t available)
-inFlow (F Hash [t0]) (initial, available) =
-    outFlow t0 (initial, available)
-inFlow t (initial, available) =
-    S.singleton (initial, S.insert t available)
-
 instance C.Term Term where
+    derivable = derivable
+    isNum = isNum
+    subNums = subNums
+    indicator = indicator
+    forceVar = forceVar
     isVar = isVar
     isAcquiredVar = isAcquiredVar
     isAtom = isAtom
@@ -462,14 +461,13 @@
     foldVars = foldVars
     foldCarriedTerms = foldCarriedTerms
     carriedBy = carriedBy
+    constituent = constituent
     decryptionKey = decryptionKey
     decompose = decompose
     buildable = buildable
     encryptions = encryptions
     protectors = protectors
-    outFlow = outFlow
-    inFlow = inFlow
-    loadTerm = loadTerm
+    loadTerm = loadTerm2
 
 -- Places
 
@@ -479,7 +477,7 @@
 -- application on the path to the named subterm.  The integer is the
 -- index of the subterm in the application's list of terms.
 
-newtype Place = Place [Int] deriving Show
+newtype Place = Place [Int] deriving (Eq, Show)
 
 -- Returns the places a variable occurs within another term.
 places :: Term -> Term -> [Place]
@@ -487,7 +485,7 @@
     f [] [] source
     where
       f paths path source
-          | I (varId target) == source = Place (reverse path) : paths
+          | target == source = Place (reverse path) : paths
       f paths path (F _ u) =
           g paths path 0 u
       f paths _ _ = paths
@@ -500,10 +498,13 @@
 replace target (Place ints) source =
     loop ints source
     where
-      loop [] _ = I (varId target)
+      loop [] _ = target
       loop (i : path) (F s u) =
-          F s (C.replaceNth (loop path (u !! i)) i u)
-      loop _ _ = error "Algebra.replace: Bad path to variable"
+          if length u <= i then
+            C.assertError ("Bogus i " ++ show i)
+          else
+            F s (C.replaceNth (loop path (u !! i)) i u)
+      loop _ _ = C.assertError "Algebra.replace: Bad path to variable"
 
 -- Returns the places a term is carried by another term.
 carriedPlaces :: Term -> Term -> [Place]
@@ -526,14 +527,31 @@
       loop ts [] _ = ts
       loop ts (i: path) t@(F _ u) =
           loop (t : ts) path (u !! i)
-      loop _ _ _ = error "Algebra.ancestors: Bad path to term"
+      loop _ _ _ = C.assertError "Algebra.ancestors: Bad path to term"
 
+prefix :: Place -> Place -> Bool
+prefix (Place l) (Place l') = L.isPrefixOf l l'
+
+strip :: Place -> Place -> Maybe Place
+strip (Place l) (Place l') =
+  loop l l'
+  where
+    loop [] l' = Just $ Place l'
+    loop (i : l) (i' : l') | i == i' = loop l l'
+    loop _ _ = Nothing
+
 instance C.Place Term Place where
     places = places
     carriedPlaces = carriedPlaces
+    carriedRelPlaces x y _ = carriedPlaces x y
     replace = replace
     ancestors = ancestors
+    placeIsPrefixOf = prefix
+    placeStripPrefix = strip
 
+genericize :: Gen -> Term -> (Gen, Term)
+genericize g t = (g, t)
+
 -- Rename the identifiers in a term.  Gen keeps the state of the
 -- renamer.  (Question: should alist be replaced by a Map?)
 clone :: Gen -> Term -> (Gen, Term)
@@ -567,6 +585,8 @@
 
 instance C.Gen Term Gen where
     origin = origin
+    genericize = genericize
+--    genericVersion = genericize
     clone = clone
     loadVars = loadVars
 
@@ -732,8 +752,12 @@
       t@(D _) -> t
       t@(P _) -> t
 
+destroyer :: Term -> Maybe Subst
+destroyer _ = Nothing
+
 instance C.Subst Term Gen Subst where
    emptySubst = emptySubst
+   destroyer = destroyer
    substitute = substitute
    unify t t' (g, s) =
        maybe [] (\s -> [(g, s)]) $ unify t t' s
@@ -814,7 +838,7 @@
     map (loop domain) $ M.assocs env
     where
       loop [] (x, _) =
-          error $ "Algebra.reify: variable missing from domain " ++ idName x
+          C.assertError $ "Algebra.reify: variable missing from domain " ++ idName x
       loop (I x : _) (y, t)
           | x == y = (I x, t)
       loop (F Text [I x] : _) (y, t)
@@ -839,7 +863,7 @@
     where
       loop _ [] = True
       loop s (I x:e) =
-          S.notMember x s && loop (S.insert x s) e
+          not (S.member x s) && loop (S.insert x s) e
       loop _ _ = False
 
 nodeMatch ::  Term -> (Int, Int) -> Env -> Maybe Env
@@ -905,7 +929,7 @@
             "akey" -> return $ F Akey [I x]
             "node" -> return (D x)
             _ -> fail (shows pos' "Sort " ++ sort ++ " not recognized")
-loadVar _ (x,_) = fail (shows (annotation x) "Bad variable syntax")
+loadVar _ (x,_) = fail (shows (annotation x) "Malformed vars declaration")
 
 loadLookup :: Pos -> [Term] -> String -> Either String Term
 loadLookup pos [] name = Left (shows pos $ "Identifier " ++ name ++ " unknown")
@@ -927,6 +951,9 @@
       f t@(F Akey [I _]) = return t
       f _ = fail (shows pos $ "Expecting " ++ name ++ " to be an akey")
 
+loadTerm2 :: Monad m => [Term] -> Bool -> SExpr Pos -> m Term
+loadTerm2 vars _ pos = loadTerm vars pos
+
 -- Load term and check that it is well-formed.
 loadTerm :: Monad m => [Term] -> SExpr Pos -> m Term
 loadTerm vars (S pos s) =
@@ -1047,7 +1074,7 @@
 displayVar ctx (F Akey [I x]) = displaySortId "akey" ctx x
 displayVar ctx (D x) = displaySortId "node" ctx x
 displayVar _ _ =
-    error "Algebra.displayVar: term not a variable with its sort"
+    C.assertError "Algebra.displayVar: term not a variable with its sort"
 
 displaySortId :: String -> Context -> Id -> (SExpr (), SExpr ())
 displaySortId sort ctx x = (displayId ctx x, S () sort)
@@ -1057,7 +1084,7 @@
     case lookup x ctx of
       Nothing ->
           let msg = idName x ++ " in a display context" in
-          error $ "Algebra.displayId: Cannot find variable " ++ msg
+          C.assertError $ "Algebra.displayId: Cannot find variable " ++ msg
       Just name -> S () name
 
 displayTerm :: Context -> Term -> SExpr ()
@@ -1077,7 +1104,7 @@
       F Invk [F Pubk [I x]] -> L () [S () "privk", displayId ctx x]
       F Invk [F Pubk [C c, I x]] ->
           L () [S () "privk", Q () c, displayId ctx x]
-      _ -> error ("Algebra.displayAkey: Bad term " ++ show t)
+      _ -> C.assertError ("Algebra.displayAkey: Bad term " ++ show t)
 displayTerm _ (C t) = Q () t
 displayTerm ctx (F Cat [t0, t1]) =
     L () (S () "cat" : displayTerm ctx t0 : displayList ctx t1)
@@ -1087,7 +1114,7 @@
     L () (S () "hash" : displayList ctx t)
 displayTerm ctx (D x) = displayId ctx x
 displayTerm _ (P (z, i)) = L () [N () z, N () i]
-displayTerm _ t = error ("Algebra.displayTerm: Bad term " ++ show t)
+displayTerm _ t = C.assertError ("Algebra.displayTerm: Bad term " ++ show t)
 
 displayList :: Context -> Term -> [SExpr ()]
 displayList ctx (F Cat [t0, t1]) = displayTerm ctx t0 : displayList ctx t1
diff --git a/src/CPSA/DiffieHellman/Algebra.hs b/src/CPSA/DiffieHellman/Algebra.hs
--- a/src/CPSA/DiffieHellman/Algebra.hs
+++ b/src/CPSA/DiffieHellman/Algebra.hs
@@ -4,2135 +4,2608 @@
 -- exponents form a free Abelian group.  It uses the basis elements as
 -- atoms principle.
 
--- Copyright (c) 2009, 2014 The MITRE Corporation
---
--- This program is free software: you can redistribute it and/or
--- modify it under the terms of the BSD License as published by the
--- University of California.
-
---------------------------------------------------------------------
-
--- The module implements a many-sorted algebra, but is used as an
--- order-sorted algebra.  It exports a name, and the origin used to
--- generate variables.
-
--- The Diffie-Hellman Order-Sorted Signature is
-
--- Sorts: mesg, text, data, name, skey, akey,
---        string, base, expr, and expn
---
--- Subsorts: text, data, name, skey, akey,
---           base, expr < mesg and expn < expr
---
--- Operations:
---   cat : mesg X mesg -> mesg               Pairing
---   enc : mesg X mesg -> mesg               Encryption
---   hash : mesg -> mesg                     Hashing
---   string : mesg                           Tag constants
---   ltk : name X name -> skey               Long term shared key
---   pubk : name -> akey                     Public key of principal
---   pubk : string X name -> akey            Tagged public key of principal
---   invk : akey -> akey                     Inverse of asymmetric key
---   gen : base                              DH generator
---   exp : base X expr -> base               Exponentiation
---   mul : expr X expr -> expr               Group operation
---   rec : expr -> expr                      Group inverse
---   one : expr                              Group identity
---
--- Atoms: messages of sort text, data, name, skey, akey, and expn, and
---        messages of the form (exp (gen) x) where x is of sort expn.
-
--- A free Abelian group has a set of basis elements, and the sort expn
--- is the sort for basis elements.  Limiting the atoms associated with
--- an exponent to basis elements is the basis elements as atoms
--- principle.  This principle enables CPSA to correctly handle
--- origination assumptions.
-
--- Variables of sort string are forbidden.
-
--- The implementation exploits the isomorphism between order-sorted
--- algebras and many-sorted algebras by adding inclusion operations to
--- produce an equivalent Diffie-Hellman Many-Sorted Signature.  There
--- is an inclusion operation for each subsort of mesg.  Diffie-Hellman
--- exponents are handled specially using a canonical representation as
--- monomials.
-
--- Sorts: mesg, text, data, name, skey, akey,
---        string, base, expr, and expn
---
--- Operations:
---   cat : mesg X mesg -> mesg               Pairing
---   enc : mesg X mesg -> mesg               Encryption
---   hash : mesg -> mesg                     Hashing
---   string : mesg                           Tag constants
---   ltk : name X name -> skey               Long term shared key
---   pubk : name -> akey                     Public key of principal
---   pubk : string X name -> akey            Tagged public key of principal
---   invk : akey -> akey                     Inverse of asymmetric key
---   text : text -> mesg                     Sort text inclusion
---   data : data -> mesg                     Sort date inclusion
---   name : name -> mesg                     Sort name inclusion
---   skey : skey -> mesg                     Sort skey inclusion
---   akey : akey -> mesg                     Sort akey inclusion
---   base : base -> mesg                     Sort base inclusion
---
---  A message of sort expr, a monomial, is represented by a map from
---  identifiers to descriptions.  A description is a pair consisting
---  of a flag saying if the variable is of sort expn or expr, and a
---  non-zero integer.  For t of sort expr, the monomial associated
---  with t is
---
---      x1 ^ c1 * x2 ^ c2 * ... * xn ^ cn
---
--- for all xi in the domain of t and t(xi) = (_, ci).
-
--- In both algebras, invk(invk(t)) = t for all t of sort akey,
--- (exp h (one)) = h, (exp (exp h x) y) = (exp h (mul x y)), and
--- the Abelian group axioms hold.
-
-{-# LANGUAGE MultiParamTypeClasses #-}
-
-module CPSA.DiffieHellman.Algebra (name, origin) where
-
-import Control.Monad (foldM)
-import qualified Data.List as L
-import qualified Data.Set as S
-import Data.Set (Set)
-import qualified Data.Map as M
-import Data.Map (Map)
-import Data.Char (isDigit)
-import qualified CPSA.Lib.CPSA as C
-import CPSA.Lib.CPSA (SExpr(..), Pos, annotation)
-
-{-- Debugging support
-import System.IO.Unsafe
-
-z :: Show a => a -> b -> b
-z x y = unsafePerformIO (print x >> return y)
-
-zz :: Show a => a -> a
-zz x = z x x
-
-zn :: Show a => a -> Maybe b -> Maybe b
-zn x Nothing = z x Nothing
-zn _ y = y
-
-zf :: Show a => a -> Bool -> Bool
-zf x False = z x False
-zf _ y = y
-
-zt :: Show a => a -> Bool -> Bool
-zt x True = z x True
-zt _ y = y
---}
-
-{- Export iUnify and iMatch for GHCi for debugging
-
-For this to work, you must install the package bytestring-handle from
-Hackage and tell GHCi that it is not hidden on the command line or
-within GHCi with:
-
-:set -package bytestring-handle
-
--}
-
-{--
-import System.IO (Handle)
-import Data.ByteString.Lazy.Char8 (pack)
-import Data.ByteString.Handle
-import Control.Exception (try)
-import System.IO.Unsafe
-
-stringHandle :: String -> IO Handle
-stringHandle s = readHandle False (pack s)
-
-stringPosHandle :: String -> IO C.PosHandle
-stringPosHandle s =
-    do
-      h <- stringHandle s
-      C.posHandle "" h
-
-stringLoad :: String -> IO [SExpr Pos]
-stringLoad s =
-    do
-      h <- stringPosHandle s
-      loop h []
-    where
-      loop h xs =
-          do
-            x <- C.load h
-            case x of
-              Nothing ->
-                return $ reverse xs
-              Just x ->
-                loop h (x : xs)
-
-sLoad :: String -> [[SExpr Pos]]
-sLoad s =
-    [unsafePerformIO $ stringLoad s]
-
--- Test unification
-
-iUnify :: String -> String -> String -> [Subst]
-iUnify vars t t' =
-    iRun unify emptySubst vars t t'
-
--- Test matching
-
-iMatch :: String -> String -> String -> [Env]
-iMatch vars t t' =
-    iRun match emptyEnv vars t t'
-
-iRun :: (Term -> Term -> (Gen, a) -> [(Gen, a)]) -> a ->
-        String -> String -> String -> [a]
-iRun f mt vars t t' =
-    do
-      vars <- sLoad vars
-      [t] <- sLoad t
-      [t'] <- sLoad t'
-      (gen, vars) <- loadVars origin vars
-      t <- loadTerm vars t
-      t' <- loadTerm vars t'
-      (_, a) <- f t t' (gen, mt)
-      return a
-
-gRun :: Gen -> Term -> a -> a
-gRun (Gen n) t a =
-    foldVars f a t
-    where
-      f a t =
-          case varId t of
-            Id (m, _) | m >= n -> error ("Bad gen " ++ show n)
-            _ -> a
-
-gMatch :: Term -> Term -> GenEnv -> [GenEnv]
-gMatch t t' r@(g, _) = gRun g t' (match t t' r)
-
-gUnify :: Term -> Term -> GenSubst -> [GenSubst]
-gUnify t t' r@(g, _) = gRun g (F Cat [t, t']) (unify t t' r)
---}
-
-name :: String
-name = "diffie-hellman"
-
--- An identifier
-
-newtype Id = Id (Integer, String) deriving Show
-
--- The integer distinguishes an identifier, the string is for printing.
-
-instance Eq Id where
-  (Id (x, _)) == (Id (x', _)) = x == x'
-
-instance Ord Id where
-  compare (Id (x, _)) (Id (x', _)) = compare x x'
-
-idName :: Id -> String
-idName (Id (_, name)) = name
-
--- Counter used for generating fresh identifiers.
-
-newtype Gen = Gen (Integer) deriving Show
-
-origin :: Gen
-origin = Gen (0)
-
-freshId :: Gen -> String -> (Gen, Id)
-freshId (Gen (i)) name = (Gen (i + 1), Id (i, name))
-
-cloneId :: Gen -> Id -> (Gen, Id)
-cloneId gen x = freshId gen (idName x)
-
--- A term in an Abelian group is a map from identifiers to pairs of
--- bools and non-zero integers.  The boolean is true if the variable
--- is a basis element.
-
-type Coef = Int
-
-type Desc = (Bool, Coef)
-
-type Group = Map Id Desc
-
-isGroupVar :: Group -> Bool
-isGroupVar t =
-  M.size t == 1 && snd (head (M.elems t)) == 1
-
-isBasisVar :: Group -> Bool
-isBasisVar t =
-  M.size t == 1 && head (M.elems t) == (True, 1)
-
-isExprVar :: Group -> Bool
-isExprVar t =
-  M.size t == 1 && head (M.elems t) == (False, 1)
-
--- Assumes isGroupVar t == True or isBasisVar t == True!
-getGroupVar :: Group -> Id
-getGroupVar x = head $ M.keys x
-
--- Create group var as a basis element if be is true
-groupVar :: Bool -> Id -> Term
-groupVar be x = G $ M.singleton x (be, 1)
-
-dMapCoef :: (Coef -> Coef) -> Desc -> Desc
-dMapCoef f (be, c) = (be, f c)
-
-invert :: Group -> Group
-invert t = M.map (dMapCoef negate) t
-
-expg :: Group -> Int -> Group
-expg _ 0 = M.empty
-expg t 1 = t
-expg t n = M.map (dMapCoef (n *)) t
-
-mul :: Group -> Group -> Group
-mul t t' =
-  M.foldrWithKey f t' t         -- Fold over the mappings in t
-  where
-    f x c t =                   -- Alter the mapping of
-      M.alter (g c) x t         -- variable x in t
-    g c Nothing =               -- Variable x not currently mapped
-      Just c                    -- so add a mapping
-    g (b, c) (Just (b', c'))    -- Variable x maps to c'
-      | b /= b' = error "Algebra.mul: sort mismatch"
-      | c + c' == 0 = Nothing          -- Delete the mapping
-      | otherwise = Just $ (b, c + c') -- Adjust the mapping
-
--- Why not replace M.assocs with M.toList elsewhere?
-
-type Maplet = (Id, Desc)
-
-mMapCoef :: (Coef -> Coef) -> Maplet -> Maplet
-mMapCoef f (x, (be, c)) = (x, (be, f c))
-
-mInverse :: [Maplet] -> [Maplet]
-mInverse maplets = map (mMapCoef negate) maplets
-
-isMapletNonzero :: Maplet -> Bool
-isMapletNonzero (_, (_, c)) = c /= 0
-
-group :: [Maplet] -> Group
-group maplets =
-  M.fromList $ filter isMapletNonzero maplets
-
--- Function symbols--see foldVar to see the arity of each symbol.
-data Symbol
-    = Text                      -- Text atom
-    | Data                      -- Another text-like atom
-    | Name                      -- Principal atom
-    | Skey                      -- Symmetric key atom
-    | Base                      -- Base of an exponentiated atom
-    | Ltk                       -- Long term shared symmetric key
-    | Akey                      -- Asymmetric key atom
-    | Invk                      -- Inverse of asymmetric key
-    | Pubk                      -- Public asymmetric key of a principal
-    | Genr                      -- The generator constant for the group
-    | Exp                       -- Exponentiation function symbol
-    | Cat                       -- Term concatenation
-    | Enc                       -- Encryption
-    | Hash                      -- Hashing
-      deriving (Show, Eq, Ord, Enum, Bounded)
-
--- A Diffie-Hellman Algebra Term
-
-data Term
-    = I !Id
-    | C !String
-    | F !Symbol ![Term]
-    | G !Group                  -- An exponent, an Abelian group
-      deriving Show
-
-equalTerm :: Term -> Term -> Bool
-equalTerm (I x) (I y) = x == y
-equalTerm (C c) (C c') = c == c'
-equalTerm (F Invk [F Invk [t]]) t' = equalTerm t t'
-equalTerm t (F Invk [F Invk [t']]) = equalTerm t t'
-equalTerm (F Exp [t0, G t1]) t' | M.null t1 = equalTerm t0 t'
-equalTerm t (F Exp [t0, G t1]) | M.null t1 = equalTerm t t0
-equalTerm (F Exp [F Exp [t, G t0], G t1]) t' =
-  equalTerm (F Exp [t, G (mul t0 t1)]) t'
-equalTerm t (F Exp [F Exp [t', G t0], G t1])  =
-  equalTerm t (F Exp [t', G (mul t0 t1)])
-equalTerm (F s u) (F s' u') =
-  s == s' && equalTermLists u u'
-equalTerm (G t) (G t') = t == t'
-equalTerm _ _ = False
-
-equalTermLists :: [Term] -> [Term] -> Bool
-equalTermLists [] [] = True
-equalTermLists (t : u) (t' : u') =
-  equalTerm t t' && equalTermLists u u'
-equalTermLists _ _ = False
-
-instance Eq Term where
-  (==) = equalTerm
-
--- Term comparison respecting the axiom
-
-compareTerm :: Term -> Term -> Ordering
-compareTerm (I x) (I y) = compare x y
-compareTerm (C c) (C c') = compare c c'
-compareTerm (F Invk [F Invk [t]]) t' = compareTerm t t'
-compareTerm t (F Invk [F Invk [t']]) = compareTerm t t'
-compareTerm (F Exp [t0, G t1]) t' | M.null t1 = compareTerm t0 t'
-compareTerm t (F Exp [t0, G t1]) | M.null t1 = compareTerm t t0
-compareTerm (F Exp [F Exp [t, G t0], G t1]) t' =
-  compareTerm (F Exp [t, G (mul t0 t1)]) t'
-compareTerm t (F Exp [F Exp [t', G t0], G t1])  =
-  compareTerm t (F Exp [t', G (mul t0 t1)])
-compareTerm (F s u) (F s' u') =
-  case compare s s' of
-    EQ -> compareTermLists u u'
-    o -> o
-compareTerm (G t) (G t') = compare t t'
-compareTerm (I _) (C _) = LT
-compareTerm (C _) (I _) = GT
-compareTerm (I _) (F _ _) = LT
-compareTerm (F _ _) (I _) = GT
-compareTerm (I _) (G _) = LT
-compareTerm (G _) (I _) = GT
-compareTerm (C _) (F _ _) = LT
-compareTerm (F _ _) (C _) = GT
-compareTerm (C _) (G _) = LT
-compareTerm (G _) (C _) = GT
-compareTerm (F _ _) (G _) = LT
-compareTerm (G _) (F _ _) = GT
-
-compareTermLists :: [Term] -> [Term] -> Ordering
-compareTermLists [] [] = EQ
-compareTermLists (t : u) (t' : u') =
-  case compareTerm t t' of
-    EQ -> compareTermLists u u'
-    o -> o
-compareTermLists [] _ = LT
-compareTermLists _ [] = GT
-
-instance Ord Term where
-  compare = compareTerm
-
--- Basic terms are introduced by defining a function used to decide if
--- a term is well-formed.  The context of an occurrence of an identifier
--- determines its sort.  A term that contains just an identifier and its
--- sort information is called a variable.  The sort of a variable is
--- one of mesg, text, data, name, skey, akey, base, expr, or expn.
-
--- Terms that represent variables.
-isVar :: Term -> Bool
-isVar (I _) = True           -- Sort: mesg
-isVar (F s [I _]) =
-  -- Sorts: text, data, name, skey, and akey
-  s == Text || s == Data || s == Name || s == Skey || s == Akey || s == Base
-isVar (G x) = isGroupVar x
-isVar _ = False
-
--- Extract the identifier from a variable
-varId :: Term -> Id
-varId (I x) = x
-varId (F Text [I x]) = x
-varId (F Data [I x]) = x
-varId (F Name [I x]) = x
-varId (F Skey [I x]) = x
-varId (F Akey [I x]) = x
-varId (F Base [I x]) = x
-varId (G x) | isGroupVar x = getGroupVar x
-varId _ = error "Algebra.varId: term not a variable with its sort"
-
-isAcquiredVar :: Term -> Bool
-isAcquiredVar (I _) = True
-isAcquiredVar (F Base [I _]) = True
-isAcquiredVar (G x) = isExprVar x
-isAcquiredVar _ = False
-
--- A list of terms are well-formed if each one has the correct
--- structure and every occurrence of an identifier in a term has the
--- same sort.  Variable environments are used to check the sort
--- condition.  It maps an identifier to a variable that contains the
--- identifier.
-
--- termsWellFormed u ensures all terms in u use each identifier at the
--- same sort, and makes sure every term has the correct structure.
-termsWellFormed :: [Term] -> Bool
-termsWellFormed u =
-  loop emptyVarEnv u
-  where
-    loop _ [] = True
-    loop env (t : u) =
-      case termWellFormed env t of
-        Nothing -> False
-        Just env' -> loop env' u
-
-newtype VarEnv = VarEnv (Map Id Term) deriving Show
-
-emptyVarEnv :: VarEnv
-emptyVarEnv = VarEnv M.empty
-
--- Check the structure and sort condition.
-
-termWellFormed :: VarEnv -> Term -> Maybe VarEnv
-termWellFormed xts t@(I x) =
-  extendVarEnv xts x t          -- Mesg variable
-termWellFormed xts t@(F Text [I x]) =
-  extendVarEnv xts x t          -- Text variable
-termWellFormed xts t@(F Data [I x]) =
-  extendVarEnv xts x t          -- Data variable
-termWellFormed xts t@(F Name [I x]) =
-  extendVarEnv xts x t          -- Name variable
-termWellFormed xts t@(F Skey [I x]) =
-  extendVarEnv xts x t          -- Symmetric key variable
-termWellFormed xts (F Skey [F Ltk [I x, I y]]) =
-  -- Long term shared symmetric key
-  doubleTermWellFormed xts (F Name [I x]) (F Name [I y])
-termWellFormed xts (F Akey [t]) = -- Asymmetric key terms
-  case t of
-    I x -> extendVarEnv xts x (F Akey [I x])
-    F Invk [I x] -> extendVarEnv xts x (F Akey [I x])
-    F Pubk [I x] -> extendVarEnv xts x (F Name [I x])
-    F Pubk [C _, I x] -> extendVarEnv xts x (F Name [I x])
-    F Invk [F Pubk [I x]] -> extendVarEnv xts x (F Name [I x])
-    F Invk [F Pubk [C _, I x]] -> extendVarEnv xts x (F Name [I x])
-    _ -> Nothing
-termWellFormed xts (F Base [t]) =
-  baseVarEnv xts t
-  where
-    baseVarEnv xts t@(I x) =
-      extendVarEnv xts x (F Base [t])
-    baseVarEnv xts (F Genr []) =
-      Just xts
-    baseVarEnv xts (F Exp [t0, G t1]) =
-      do
-        xts <- baseVarEnv xts t0
-        termWellFormed xts (G t1)
-    baseVarEnv _ _ = Nothing
-termWellFormed xts (G t) =
-  foldM exprVarEnv xts (M.assocs t)
-  where
-    exprVarEnv xts (x, (be, _)) =
-      extendVarEnv xts x (groupVar be x)
-termWellFormed xts (C _) =
-  Just xts                      -- Tags
-termWellFormed xts (F Cat [t0, t1]) =
-  doubleTermWellFormed xts t0 t1 -- Concatenation
-termWellFormed xts (F Enc [t0, t1]) =
-  doubleTermWellFormed xts t0 t1 -- Encryption
-termWellFormed xts (F Hash [t])     =
-  termWellFormed xts t          -- Hashing
-termWellFormed _ _ = Nothing
-
--- Extend when sorts agree
-extendVarEnv :: VarEnv -> Id -> Term -> Maybe VarEnv
-extendVarEnv (VarEnv env) x t =
-  case M.lookup x env of
-    Nothing -> Just $ VarEnv $ M.insert x t env
-    Just t' -> if t == t' then Just (VarEnv env) else Nothing
-
-doubleTermWellFormed :: VarEnv -> Term -> Term -> Maybe VarEnv
-doubleTermWellFormed xts t0 t1 =
-  do
-    xts <- termWellFormed xts t0
-    termWellFormed xts t1
-
--- Atoms are terms the adversary can create modulo origination
--- assumptions.
-isAtom :: Term -> Bool
-isAtom (I _) = False
-isAtom (C _) = False
-isAtom (F Base [F Exp [F Genr [], G x]]) = isBasisVar x
-isAtom (F s _) =
-  s == Text || s == Data || s == Name || s == Skey || s == Akey
-isAtom (G x) = isBasisVar x
-
--- Does a variable occur in a term?
-
--- This function is always called with a variable that answers true to
--- isAcquiredVar as its first argument.
-occursIn :: Term -> Term -> Bool
-occursIn t t' | isVar t =
-  recur (I $ varId t) t'
-  where
-    recur t t' =
-      t == t' ||
-      case t' of
-        F _ u -> any (recur t) u
-        _ -> False
-occursIn t _ = error $ "Algebra.occursIn: Bad variable " ++ show t
-
--- Fold f through a term applying it to each variable in the term.
-foldVars :: (a -> Term -> a) -> a -> Term -> a
-foldVars f acc t@(I _) = f acc t          -- Mesg variable
-foldVars f acc t@(F Text [I _]) = f acc t -- Text variable
-foldVars f acc t@(F Data [I _]) = f acc t -- Data variable
-foldVars f acc t@(F Name [I _]) = f acc t -- Name variable
-foldVars f acc t@(F Skey [I _]) =
-  f acc t                       -- Symmetric key variable
-foldVars f acc (F Skey [F Ltk [I x, I y]]) =
-  -- Long term shared symmetric key
-  f (f acc (F Name [I x])) (F Name [I y])
-foldVars f acc t@(F Akey [I _]) = f acc t -- Asymmetric keys
-foldVars f acc (F Akey [F Invk [I x]]) = f acc (F Akey [I x])
-foldVars f acc (F Akey [F Pubk [I x]]) = f acc (F Name [I x])
-foldVars f acc (F Akey [F Pubk [C _, I x]]) = f acc (F Name [I x])
-foldVars f acc (F Akey [F Invk [F Pubk [I x]]]) = f acc (F Name [I x])
-foldVars f acc (F Akey [F Invk [F Pubk [C _, I x]]]) = f acc (F Name [I x])
-foldVars f acc (F Base [t]) =
-  baseAddVars acc t
-  where
-    baseAddVars acc t@(I _) =
-      f acc (F Base [t])
-    baseAddVars acc (F Genr []) =
-      acc
-    baseAddVars acc (F Exp [t0, G t1]) =
-      foldVars f (baseAddVars acc t0) (G t1)
-    baseAddVars _ _ = error "Algebra.foldVars: Bad term"
-foldVars f acc (G t) =
-  M.foldlWithKey exprAddVars acc t
-  where
-    exprAddVars acc x (be, _) =
-      f acc (groupVar be x)
-foldVars _ acc (C _) = acc        -- Tags
-foldVars f acc (F Cat [t0, t1]) = -- Concatenation
-  foldVars f (foldVars f acc t0) t1
-foldVars f acc (F Enc [t0, t1]) = -- Encryption
-  foldVars f (foldVars f acc t0) t1
-foldVars f acc (F Hash [t])     = -- Hashing
-  foldVars f acc t
-foldVars _ _ t = error $ "Algebra.foldVars: Bad term " ++ show t
-
--- Fold f through a term applying it to each term that is carried by the term.
-foldCarriedTerms :: (a -> Term -> a) -> a -> Term -> a
-foldCarriedTerms f acc t@(F Cat [t0, t1]) = -- Concatenation
-  foldCarriedTerms f (foldCarriedTerms f (f acc t) t0) t1
-foldCarriedTerms f acc t@(F Enc [t0, _]) = -- Encryption
-  foldCarriedTerms f (f acc t) t0
-foldCarriedTerms f acc t = f acc t     -- atoms and tags
-
--- Is a term carried by another term?
-carriedBy :: Term -> Term -> Bool
-carriedBy t t' =
-  t == t' ||
-  case t' of
-    F Cat [t0, t1] -> carriedBy t t0 || carriedBy t t1
-    F Enc [t0, _] -> carriedBy t t0
-    _ -> False
-
--- The key used to decrypt an encrypted term, otherwise Nothing.
-decryptionKey :: Term -> Maybe Term
-decryptionKey (F Enc [_, t]) = Just (inv t)
-decryptionKey _ = Nothing
-
-buildable :: Set Term -> Set Term -> Term -> Bool
-buildable knowns unguessable term =
-  ba term
-  where
-    ba (I _) = True      -- A mesg sorted variable is always buildable
-    ba (C _) = True      -- So is a tag
-    ba (F Cat [t0, t1]) =
-      ba t0 && ba t1
-    ba t@(F Enc [t0, t1]) =
-      S.member t knowns || ba t0 && ba t1
-    ba t@(F Hash [t1]) =
-      S.member t knowns || ba t1
-    ba t@(F Base [t'])
-      | S.member t knowns || bb t' = True
-    ba t@(G t')
-      | hasFluff unguessable t' = -- Expunge guessable part
-        ba (defluff unguessable t')
-      | S.member t knowns || M.null t' = True -- t known or is one
-    ba t = isAtom t && S.notMember t unguessable
-    -- Buildable base term
-    bb (I _) = True     -- A variable of sort base is always buildable
-    bb (F Genr []) = True       -- and so is the generator
-    bb t@(F Exp [t0, G t1])
-      | hasFluff unguessable t1 = -- Expunge guessable part
-        bb (F Exp [t0, defluff unguessable t1])
-      | otherwise =          -- t known or base and exponent buildable
-        S.member (F Base [t]) knowns || ba (G t1) && ba t0
-    bb (_) = False
-
--- Compute the decomposition given some known terms and some unguessable
--- atoms.  The code is quite tricky.  It iterates until the known
--- terms don't change.  The known terms ends up with all the
--- encryptions that are known.
-decompose :: Set Term -> Set Term -> (Set Term, Set Term)
-decompose knowns unguessable =
-  loop unguessable knowns S.empty []
-  where
-    loop unguessable knowns old []
-      | old == knowns = (knowns, unguessable) -- Done
-      | otherwise = loop unguessable knowns knowns (S.elems knowns)
-    loop unguessable knowns old (t@(F Cat _) : todo) =
-      loop unguessable (decat t (S.delete t knowns)) old todo
-    loop unguessable knowns old ((F Enc [t0, t1]) : todo)
-      | buildable knowns unguessable (inv t1) = -- Add plaintext
-        loop unguessable (decat t0 knowns) old todo
-      | otherwise = loop unguessable knowns old todo
-    loop unguessable knowns old (G t : todo)
-      | M.null t =
-        loop unguessable (S.delete (G t) knowns) old todo
-      | hasFluff unguessable t =
-        loop unguessable
-        (S.insert (defluff unguessable t) (S.delete (G t) knowns))
-        old todo
-    loop unguessable knowns old (t@(F Base [F Exp [t0, G t1]]) : todo)
-      | M.null t1 =
-        loop unguessable
-        (S.insert (F Base [t0]) (S.delete t knowns))
-        old todo
-      | hasFluff unguessable t1 = -- Expunge guessable part
-        loop unguessable
-        (S.insert (F Base [F Exp [t0, t1']]) (S.delete t knowns))
-        old todo
-      where
-        t1' = defluff unguessable t1
-    loop unguessable knowns old (t : todo)
-      | isAtom t =
-        loop (S.delete t unguessable) (S.delete t knowns) old todo
-      | otherwise = loop unguessable knowns old todo
-    -- Decat
-    decat (F Cat [t0, t1]) s = decat t1 (decat t0 s)
-    decat t s = S.insert t s
-
--- Inverts an asymmetric key
-inv :: Term -> Term
-inv (F Akey [F Invk [t]]) = F Akey [t]
-inv (F Akey [t]) = F Akey [F Invk [t]]
-inv (I _) = error "Algebra.inv: Cannot invert a variable of sort mesg"
-inv t = t
-
--- Does a group term have a variable of sort expr or a variable not in
--- the avoidance set a?
-hasFluff :: Set Term -> Group -> Bool
-hasFluff a t =
-  any f (M.assocs t)
-  where
-    f (x, d) = fluff a x d
-
-fluff :: Set Term -> Id -> Desc -> Bool
-fluff a x (be, _) = not be || S.notMember (groupVar be x) a
--- fluff a x (be, _) = be && S.notMember (groupVar be x) a
-
--- Remove fluff from a group term
-defluff :: Set Term -> Group -> Term
-defluff a t =
-  G $ M.filterWithKey (\x d -> not $ fluff a x d) t
-
--- Extracts every encryption that is carried by a term along with its
--- encryption key.  Note that a hash is treated as a kind of
--- encryption in which the term that is hashed is the encryption key.
-encryptions :: Term -> [(Term, [Term])]
-encryptions t =
-  reverse $ loop t []
-  where
-    loop (F Cat [t, t']) acc =
-      loop t' (loop t acc)
-    loop t@(F Enc [t', t'']) acc =
-      loop t' (adjoin (t, [t'']) acc)
-    loop t@(F Hash [t']) acc =
-      adjoin (t, [t']) acc
-    -- loop t@(F Base [F Exp [F Genr [], G t']]) acc =
-    --   adjoin (t, basis t') acc
-    loop t@(F Base [F Exp [_, G t']]) acc =
-      adjoin (t, basis t') acc
-    loop _ acc = acc
-    adjoin x xs
-      | x `elem` xs = xs
-      | otherwise = x : xs
-
--- The basis variables is a group term
-basis :: Group -> [Term]
-basis t =
-  [groupVar True x | (x, (be, _)) <- M.assocs t, be]
-
--- Returns the encryptions that carry the target.  If the target is
--- carried outside all encryptions, or is exposed because a decription
--- key is derivable, Nothing is returned.
-protectors :: (Term -> Bool) -> Term -> Term -> Maybe [Term]
-protectors derivable target source =
-  do
-    ts <- bare source S.empty
-    return $ S.elems ts
-  where
-    bare source _
-      | source == target = Nothing
-    bare (F Cat [t, t']) acc =
-      maybe Nothing (bare t') (bare t acc)
-    bare t@(F Enc [t', key]) acc =
-      if target `carriedBy` t' then
-        if derivable (inv key) then
-          bare t' acc
-        else
-          Just (S.insert t acc)
-      else
-        Just acc
-    bare _ acc = Just acc
-
--- FIX ME!  Needs updating for Diffie-Hellman
-
--- Support for data flow analysis of traces.  A flow rule maps an
--- initial set of atoms and a set of available terms to sets of pairs
--- of the same sets.
-type FlowRule = (Set Term, Set Term) -> Set (Set Term, Set Term)
-
--- Combine flow rules sequentially.
-comb :: FlowRule -> FlowRule -> FlowRule
-comb f g x =
-  S.fold h S.empty (g x)
-  where
-    h a s = S.union (f a) s
-
--- Analyze a term as a sent term.
-outFlow :: Term -> FlowRule
-outFlow t a@(_, available)
-  | S.member t available = S.singleton a
-outFlow (I _) _ = S.empty
-outFlow (C _) a = S.singleton a
-outFlow (F Cat [t0, t1]) a =    -- Construct non-atoms
-  comb (outFlow t1) (outFlow t0) a
-outFlow (F Enc [t0, t1]) a =
-  comb (outFlow t1) (outFlow t0) a
-outFlow (F Hash [t]) a =
-    outFlow t a
-outFlow t (initial, available) = -- Don't look inside atoms
-  S.singleton (S.insert t initial, S.insert t available)
-
--- Analyze a term as a received term.
-inFlow :: Term -> FlowRule
-inFlow (C _) a = S.singleton a
-inFlow (F Cat [t0, t1]) a =     -- Try to receive components
-  S.union                       -- in both orders
-  (comb (inFlow t1) (inFlow t0) a)
-  (comb (inFlow t0) (inFlow t1) a)
-inFlow t@(F Enc [t0, t1]) (initial, available) =
-  S.union                     -- Encryption can be built
-  (outFlow t (initial, available)) -- or decrypted
-  (comb (inFlow t0) (outFlow (inv t1)) a)
-  where                       -- Derive decryption key first
-    a = (initial, S.insert t available)
-inFlow (F Hash [t0]) (initial, available) =
-    outFlow t0 (initial, available)
-inFlow t (initial, available) =
-  S.singleton (initial, S.insert t available)
-
-instance C.Term Term where
-  isVar = isVar
-  isAcquiredVar = isAcquiredVar
-  isAtom = isAtom
-  isNodeVar _ = error "Algebra.isNodeVar: no support for nodes"
-  termsWellFormed = termsWellFormed
-  occursIn = occursIn
-  foldVars = foldVars
-  foldCarriedTerms = foldCarriedTerms
-  carriedBy = carriedBy
-  decryptionKey = decryptionKey
-  decompose = decompose
-  buildable = buildable
-  encryptions = encryptions
-  protectors = protectors
-  outFlow = outFlow
-  inFlow = inFlow
-  loadTerm = loadTerm
-
--- Places
-
--- A place names a one subterm within a term.  It is a list of
--- integers giving a path through a term to that named subterm.  Each
--- integer in the list identifies the subterm in a function
--- application on the path to the named subterm.  The integer is the
--- index of the subterm in the application's list of terms.
-
--- The places and replace code fail to find the variable
--- (F Akey [I x]) in (F Akey [Invk [I x]]).
-
-newtype Place = Place [Int] deriving Show
-
--- Returns the places a variable occurs within a term.
--- Returns no places for group variables.
-places :: Term -> Term -> [Place]
-places var source =
-  f [] [] source
-  where
-    f paths path source
-      | var == source = Place (reverse path) : paths
-    f paths path (F _ u) =
-      g paths path 0 u
-    f paths _ _ = paths
-    g paths _ _ [] = paths
-    g paths path i (t : u) =
-      g (f paths (i: path) t) path (i + 1) u
-
--- Returns the places a term is carried by another term.
-carriedPlaces :: Term -> Term -> [Place]
-carriedPlaces target source =
-  f [] [] source
-  where
-    f paths path source
-      | target == source = Place (reverse path) : paths
-    f paths path (F Cat [t, t']) =
-      f (f paths  (0 : path) t) (1 : path) t'
-    f paths path (F Enc [t, _]) =
-      f paths (0 : path) t
-    f paths _ _ = paths
-
--- Replace a variable within a term at a given place.
-replace :: Term -> Place -> Term -> Term
-replace var (Place ints) source =
-  loop ints source
-  where
-    loop [] _ = var
-    loop (i : path) (F s u) =
-      F s (C.replaceNth (loop path (u !! i)) i u)
-    loop _ (G _) = error "Algebra.replace: Path to expr"
-    loop _ _ = error "Algebra.replace: Bad path to term"
-
--- Return the ancestors of the term at the given place.
-ancestors :: Term -> Place -> [Term]
-ancestors source (Place ints) =
-  loop [] ints source
-  where
-    loop ts [] _ = ts
-    loop ts (i: path) t@(F _ u) =
-      loop (t : ts) path (u !! i)
-    loop _ _ _ = error "Algebra.ancestors: Bad path to term"
-
-instance C.Place Term Place where
-  places = places
-  carriedPlaces = carriedPlaces
-  replace = replace
-  ancestors = ancestors
-
--- Rename the identifiers in a term.  Gen keeps the state of the
--- renamer.  (Question: should alist be replaced by a Map?)
-clone :: Gen -> Term -> (Gen, Term)
-clone gen t =
-  (gen', t')
-  where
-    (_, gen', t') = cloneTerm ([], gen) t
-    cloneTerm (alist, gen) t =
-      case t of                 -- The association list maps
-        I x ->                  -- identifiers to identifier.
-          case lookup x alist of
-            Just y -> (alist, gen, I y)
-            Nothing ->
-              let (gen', y) = cloneId gen x in
-              ((x, y) : alist, gen', I y)
-        C c -> (alist, gen, C c)
-        F sym u ->
-          let (alist', gen', u') =
-                foldl cloneTermList (alist, gen, []) u in
-          (alist', gen', F sym $ reverse u')
-        G t ->
-          let (alist', gen', ts) =
-                M.foldlWithKey cloneGroupList (alist, gen, []) t in
-          (alist', gen', G $ group ts)
-    cloneTermList (alist, gen, u) t =
-      let (alist', gen', t') = cloneTerm (alist, gen) t in
-      (alist', gen', t' : u)
-    cloneGroupList (alist, gen, ts) x (be, c) =
-      case lookup x alist of
-        Just y -> (alist, gen, (y, (be, c)) : ts)
-        Nothing ->
-          let (gen', y) = cloneId gen x in
-          ((x, y) : alist, gen', (y, (be, c)) : ts)
-
-instance C.Gen Term Gen where
-  origin = origin
-  clone = clone
-  loadVars = loadVars
-
--- Functions used in both unification and matching
-
-type IdMap = Map Id Term
-
-emptyIdMap :: IdMap
-emptyIdMap = M.empty
-
--- Apply a substitution to a term
-idSubst :: IdMap -> Term -> Term
-idSubst subst (I x) =
-  M.findWithDefault (I x) x subst
-idSubst _ t@(C _) = t
-idSubst subst (F Invk [t]) =
-  case idSubst subst t of
-    F Invk [t] -> t             -- (invk (invk x)) = x
-    t -> F Invk [t]
-idSubst subst (F Exp [t0, G t1]) =
-  case idSubst subst t0 of    -- (exp (exp g x) y) = (exp g (mul x y))
-    F Exp [t0', G t1'] ->
-      case mul t1' $ groupSubst subst t1 of
-        t2 | M.null t2 -> t0'
-           | otherwise -> F Exp [t0', G t2]
-    t -> expSubst subst t t1
-idSubst subst (F s u) =
-  F s (map (idSubst subst) u)
-idSubst subst (G t) =
-  G $ groupSubst subst t
-
-expSubst :: IdMap -> Term -> Group -> Term
-expSubst subst t0 t1 =
-  case groupSubst subst t1 of
-    t1' | M.null t1' -> t0    -- (exp g (one)) = g
-        | otherwise -> F Exp [t0, G t1']
-
-groupSubst :: IdMap -> Group -> Group
-groupSubst subst t =
-  M.foldrWithKey f M.empty t
-  where
-    f x (be, c) t =
-      mul (expg (groupLookup subst be x) c) t
-
-groupLookup :: IdMap -> Bool -> Id -> Group
-groupLookup subst be x =
-  case M.findWithDefault (groupVar be x) x subst of
-    G t -> t
-    w -> error ("Algebra.groupLookup: Bad substitution: " ++
-                show x ++ " -> " ++ show w)
-
-showMap :: (Show a, Show b) => Map a b -> ShowS
-showMap m =
-  showAssocs (M.assocs m)
-  where
-    showAssocs [] = id
-    showAssocs ((x,y):m) =
-      showString "\n " . shows x . showString " -> " .
-      shows y . showAssocs m
-
--- Unification and substitution
-
--- The rewrite rules used are:
---
--- (vars (h base) (x y expr))
---
--- 1.  ((exp h x) y) ==> (exp h (mul x y))
--- 2.  (exp h (one)) ==> h
--- 3.  unify((exp h x), (exp h y), s) ==>
---         unify(x, y, s)
--- 4   unify((exp h x), (exp (gen) y), s) ==>
---         unify(h, (exp gen (mul y (rec x))), s)
--- 5.  unify((exp (gen) x), (exp h y), s) ==>
---         unify((exp h x), (exp (gen) y), s)
-
-newtype Subst = Subst IdMap deriving (Eq, Ord)
-
-instance Show Subst where
-  showsPrec _ (Subst s) = showString "Subst (" . showMap s . showChar ')'
-
-emptySubst :: Subst
-emptySubst = Subst emptyIdMap
-
--- Apply a substitution created by unification
-substitute :: Subst -> Term -> Term
-substitute (Subst s) t =
-  idSubst s t
-
--- Composition of substitutions
-
--- substitute (compose s0 s1) t = substitute s0 (substitute s1 t)
-
--- 1. apply s0 to range of s1 to obtain s2;
--- 2. remove bindings is s0 where domains of s0 and s1 overlap to form s3;
--- 3. remove trivial bindings from s2 to form s4; and
--- 4. take the union of s4 and s3.
-
-compose :: Subst -> Subst -> Subst
-compose (Subst s0) (Subst s1) =
-  let s2 = M.map (substitute (Subst s0)) s1        -- Step 1
-      s4 = M.filterWithKey nonTrivialBinding s2 in -- Step 3
-  Subst (M.union s4 s0)       -- Steps 2 and 4, union is left-biased
-
-nonTrivialBinding :: Id -> Term -> Bool
-nonTrivialBinding x (I y) = x /= y
-nonTrivialBinding x (G y) | isGroupVar y = x /= getGroupVar y
-nonTrivialBinding _ _ = True
-
--- During unification, variables determined to be equal are collected
--- into an equivalence class.  Multiple lookups of each variable in
--- the internal representation of a substitution finds the canonical
--- representive of the class.  The chase function finds the current
--- canonical representitive.
-
--- Get the canonical representative of equivalent identifiers making use
--- of this algebra's axiom.
-chase :: Subst -> Term -> Term
-chase (Subst s) (I x) =
-  case M.lookup x s of
-    Nothing -> I x
-    Just t -> chase (Subst s) t
-chase s (F Invk [t]) = chaseInvk s t
-chase s (F Exp [t0, G t1]) = chaseExp s t0 t1
-chase _ t = t
-
-chaseInvk :: Subst -> Term -> Term
-chaseInvk (Subst s) (I x) =
-  case M.lookup x s of
-    Nothing -> F Invk [I x]
-    Just t -> chaseInvk (Subst s) t
-chaseInvk s (F Invk [t]) = chase s t
-chaseInvk _ t = F Invk [t]
-
-chaseExp :: Subst -> Term -> Group -> Term
-chaseExp s t0 t1
-  | M.null t1 = chase s t0
-chaseExp s (I x) t1 =
-  case chase s (I x) of
-    F Exp [t0', G t1'] -> chaseExp s t0' (mul t1 t1')
-    t0 -> F Exp [t0, chaseGroup s t1]
-chaseExp s (F Exp [t0', G t1']) t1 =
-  chaseExp s t0' (mul t1 t1')
-chaseExp s t0 t1 = F Exp [t0, chaseGroup s t1]
-
-chaseGroup :: Subst -> Group -> Term
-chaseGroup (Subst s) x = G $ groupSubst s x
-
--- Does x occur in t?
-occurs :: Id -> Term -> Bool
-occurs x (I y) = x == y
-occurs _ (C _) = False
-occurs x (F _ u) = any (occurs x) u
-occurs x (G t) = elem x (M.keys t)
-
-type GenSubst = (Gen, Subst)
-
-unifyChase :: Term -> Term -> GenSubst -> [GenSubst]
-unifyChase t t' (g, s) = unifyTerms (chase s t) (chase s t') (g, s)
-
-unifyTerms :: Term -> Term -> GenSubst -> [GenSubst]
-unifyTerms (I x) (I y) (g, Subst s)
-  | x == y = [(g, Subst s)]
-  | otherwise = [(g, Subst $ M.insert x (I y) s)]
-unifyTerms (I x) t (g, Subst s)
-  | occurs x t = []
-  | otherwise = [(g, Subst $ M.insert x t s)]
-unifyTerms t (I x) s = unifyTerms (I x) t s
-unifyTerms (C c) (C c') s
-  | c == c' = [s]
-  | otherwise = []
-unifyTerms (F Invk [I x]) (F Pubk [I y]) s =
-  unifyTerms (I x) (F Invk [F Pubk [I y]]) s
-unifyTerms (F Invk [I x]) (F Pubk [C c, I y]) s =
-  unifyTerms (I x) (F Invk [F Pubk [C c, I y]]) s
-unifyTerms (F Pubk [I x]) (F Invk [I y]) s =
-  unifyTerms (I y) (F Invk [F Pubk [I x]]) s
-unifyTerms (F Pubk [C c, I x]) (F Invk [I y]) s =
-  unifyTerms (I y) (F Invk [F Pubk [C c, I x]]) s
-unifyTerms (F Exp [t0, G t1]) (F Exp [t0', G t1']) s =
-  unifyExp t0 t1 t0' t1' s
-unifyTerms (F sym u) (F sym' u') s
-  | sym == sym' = unifyTermLists u u' s
-  | otherwise = []
-unifyTerms (G t) (G t') s = unifyGroup t t' s
-unifyTerms _ _ _ = []
-
-unifyExp :: Term -> Group -> Term -> Group -> GenSubst -> [GenSubst]
-unifyExp t0 t1 t0' t1' s
-  | t0 == t0' = unifyGroup t1 t1' s
-unifyExp (I x) t1 (F Genr []) t1' (g, Subst s)
-  | t1 == t1' =
-    [(g, Subst $ M.insert x (F Genr []) s)]
-  | otherwise =
-    [(g, Subst (M.insert
-                x
-                (F Exp [F Genr [], G $ mul t1' (invert t1)])
-                s))]
-unifyExp (F Genr []) t1 (I x) t1' s =
-  unifyExp (I x) t1' (F Genr []) t1 s
-unifyExp _ _ _ _ _ = []
-
-unifyTermLists :: [Term] -> [Term] -> GenSubst -> [GenSubst]
-unifyTermLists [] [] s = [s]
-unifyTermLists (t : u) (t' : u') s =
-  do
-    s' <- unifyChase t t' s
-    unifyTermLists u u' s'
-unifyTermLists _ _ _ = []
-
-unifyGroup :: Group -> Group -> GenSubst -> [GenSubst]
-unifyGroup t0 t1 (g, Subst s) =
-  do
-    let t = groupSubst s (mul t0 (invert t1))
-    (_, g', s') <- matchGroup t M.empty S.empty g s
-    return (g', Subst s')
-
--- The exported unifier converts the internal representation of a
--- substitution into the external form using chaseMap.
-
-unify :: Term -> Term -> GenSubst -> [GenSubst]
-unify t t' s =
-  do
-    (g, s) <- unifyChase t t' s
-    return (g, chaseMap s)
-
--- Apply the chasing version of substitution to the range of s.
-
-chaseMap :: Subst -> Subst
-chaseMap (Subst s) =
-  Subst $ M.map (substChase (Subst s)) s
-
--- A chasing version of substitution.
-
-substChase :: Subst -> Term -> Term
-substChase subst t =
-  case chase subst t of
-    t@(I _) -> t
-    t@(C _) -> t
-    F Invk [t] ->
-        case substChase subst t of
-          F Invk [t] -> t           -- Apply axiom
-          t -> F Invk [t]
-    F Exp [t0, G t1] ->
-        case substChase subst t0 of
-          F Exp [t0', G t1'] ->
-            case mul t1' $ groupChase subst t1 of
-              t2 | M.null t2 -> t0'
-                 | otherwise -> F Exp [t0', G t2]
-          t -> expChase subst t t1
-    F s u ->
-        F s (map (substChase subst) u)
-    G t -> G $ groupChase subst t
-
-expChase :: Subst -> Term -> Group -> Term
-expChase subst t0 t1 =
-  case groupChase subst t1 of
-    t1' | M.null t1' -> t0
-        | otherwise -> F Exp [t0, G t1']
-
-groupChase :: Subst -> Group -> Group
-groupChase (Subst subst) t = groupSubst subst t
-
-instance C.Subst Term Gen Subst where
- emptySubst = emptySubst
- substitute = substitute
- unify = unify
- compose = compose
-
--- Matching and instantiation
-
-newtype Env = Env (Set Id, IdMap) deriving (Eq, Ord)
-
-instance Show Env where
-  showsPrec _ (Env (v, r)) =
-      showString "Env (\n " . shows v .
-      showChar ',' . showMap r . showChar ')'
-
--- An environment may contain an explicit identity mapping, whereas a
--- substitution is erroneous if it has one.  The set of variables
--- associated with a map is the variables in the range that were
--- generated by matching and should be treated as variables when using
--- unification to perform matching.  The other variables in the range
--- are treated as constants.
-
--- An environment contains an IdMap and the set of variables
--- generated while matching.
-
-emptyEnv :: Env
-emptyEnv = Env (S.empty, emptyIdMap)
-
--- Apply a substitution created my matching
-instantiate :: Env -> Term -> Term
-instantiate (Env (_, r)) t = idSubst r t
-
--- Matching
-
-type GenEnv = (Gen, Env)
-
--- The matcher has the property that when pattern P and term T match
--- then instantiate (match P T emptyEnv) P = T.
-match ::  Term -> Term -> GenEnv -> [GenEnv]
-match (I x) t (g, Env (v, r)) =
-  case M.lookup x r of
-    Nothing -> [(g, Env (v, M.insert x t r))]
-    Just t' -> if t == t' then [(g, Env (v, r))] else []
-match (C c) (C c') r = if c == c' then [r] else []
-match (F Exp [t0, G t1]) (F Exp [t0', G t1']) r
-    = matchExp t0 t1 t0' t1' r
-match (F s u) (F s' u') r
-  | s == s' = matchLists u u' r
-match (F Invk [t]) t' r =
-  match t (F Invk [t']) r
-match (G t) (G t') (g, Env (v, r)) =
-  do
-    (v', g', r') <- matchGroup t t' v g r
-    return (g', Env(v', r'))
-match _ _ _ = []
-
-matchExp ::  Term -> Group -> Term -> Group -> GenEnv -> [GenEnv]
-matchExp (I x) t1 t0' t1' r@(_, Env (_, e)) =
-  case M.lookup x e of
-    Just (F Exp [t0'', G t1''])
-        | t0' == t0'' -> match (G t1) (G (mul t1' (invert t1''))) r
-    _ -> matchLists [I x, G t1] [t0', G t1'] r
-matchExp (F Genr []) t1 t0' t1' r =
-  matchLists [F Genr [], G t1] [t0', G t1'] r
-matchExp _ _ _ _ _ = error "Algebra.matchExp: Bad match term"
-
-matchLists :: [Term] -> [Term] -> GenEnv -> [GenEnv]
-matchLists [] [] r = [r]
-matchLists (t : u) (t' : u') r =
-  do
-    r' <- match t t' r
-    matchLists u u' r'
-matchLists _ _ _ = []
-
--- Matching in a group
-
--- t0 is the pattern
--- t1 is the target term
--- v is the set of previously freshly generated variables
--- g is the generator
-
--- Returns complete set of unifiers.  Each unifier include the set of
--- variables fresh generated and a generator.
-
-matchGroup ::  Group -> Group -> Set Id -> Gen ->
-               IdMap -> [(Set Id, Gen, IdMap)]
-matchGroup t0 t1 v g r =
-  let (t0', t1') = merge t0 t1 r       -- Apply subst to LHS
-      (v', g', r') = genVars v g t0' r -- Gen vars for non-fresh vars
-      d = mkInitMatchDecis t1' in      -- Ensure expns on RHS stay distinct
-  case partition (groupSubst r' t0') t1' v' of
-    ([], []) -> return (v', g', r')
-    ([], t) -> constSolve t v' g' r' d -- No variables of sort expr here
-    (t0, t1) -> solve t0 t1 v' g' r' d
-
--- Apply subst to LHS and add results to RHS
-merge ::  Group -> Group -> IdMap -> (Group, Group)
-merge t t' r =
-    (group t0, t0')
-    where
-      (t0, t0') = loop (M.assocs t) ([], t')
-      loop [] acc = acc
-      loop (p@(x, (_, c)) : t0) (t1, t1') =
-          case M.lookup x r of
-            Nothing -> loop t0 (p : t1, t1')
-            Just (G t) ->
-                loop t0 (t1, mul (expg t (negate c)) t1')
-            Just t ->
-                error $ "Algebra.merge: expecting an expr but got " ++ show t
-
--- Generate vars for each non-fleshly generated vars
-genVars :: Set Id -> Gen -> Group -> IdMap -> (Set Id, Gen, IdMap)
-genVars v g t r =
-  M.foldlWithKey genVar (v, g, r) t
-  where
-    genVar (v, g, r) x (be, _) =
-      (S.insert x' v, g', M.insert x (groupVar be x') r)
-      where
-        (g', x') = cloneId g x
-
--- A set of decisions records expn variables that have been identified
--- and those that are distinct.
-data Decision t = Decision
-  { same :: [(t, t)],
-    dist :: [(t, t)] }
-  deriving Show
-
--- Create an initial set of decisions
-mkDecis :: Decision Id
-mkDecis =
-  Decision {
-    same = [],
-    dist = [] }
-
--- Ensure bases elements in t are never identified
-mkInitMatchDecis :: Group -> Decision Id
-mkInitMatchDecis t =
-  mkDecis { dist = [(x, y) | x <- v, y <- v, x /= y] }
-  where
-    v = [x | (x, (be, _)) <- M.assocs t, be]
-
--- Move fresh variables on the RHS of the equation to the LHS
--- Move variables of sort expn on the LHS to the RHS
-partition ::  Group -> Group -> Set Id -> ([Maplet], [Maplet])
-partition t0 t1 v =
-  (M.assocs lhs, M.assocs rhs)
-  where
-    (v1, c1) = M.partitionWithKey g t1 -- Fresh variables go in v1
-    g x _ = S.member x v
-    (v0, c0) = M.partition f t0        -- Basis elements go in c0
-    f (be, _) = not be
-    lhs = mul v0 (invert v1)
-    rhs = mul c1 (invert c0)
-
--- Solve equation when there are no variables of sort expr on LHS.
--- Treat all variables as constants.
-constSolve :: [Maplet] -> Set Id -> Gen -> IdMap ->
-              Decision Id -> [(Set Id, Gen, IdMap)]
-constSolve t v g r d
-  | any (\(_, (be, _)) -> not be) t = [] -- Fail expr var is on RHS
-  | otherwise = constSolve1 t v g r d    -- All vars are expn
-
-constSolve1 :: [Maplet] -> Set Id -> Gen ->
-               IdMap -> Decision Id -> [(Set Id, Gen, IdMap)]
-constSolve1 [] v g r _ = return (v, g, r)
-constSolve1 t v g r d =
-  case orientDecis v $ nextDecis d t of
-    [] -> []                    -- All decisions already made
-    ((x, y):_) ->               -- Pick first undecided pair
-      distinct ++ identified
-      where
-        distinct = constSolve1 t v g r neq
-        neq = d {dist = (x, y):(y, x):dist d} -- Add new constraints
-        -- eliminate x
-        identified = constSolve1 t' v' g r' d'
-        t' = identify x y t     -- Equate x y in t
-        v' = S.delete x v       -- Eliminate x in v
-        r' = eliminate x y' r   -- And in r
-        y' = groupVar True y
-        d' = d {same = (x, y):same d} -- And note decision
-
--- Find a pair of variables for which no decision has been made.
-nextDecis :: Decision Id -> [Maplet] -> [(Id, Id)]
-nextDecis d t =
-  [(x, y) | x <- vars, y <- vars, x < y,
-    not $ decided d x y]
-  where
-    vars = foldr f [] t
-    f (x, (True, _)) v = x:v
-    f (_, (False, _)) v = v
-    decided d x y =             -- Is x and y decided?
-      u == v ||
-      any f (dist d)
-      where
-        u = chase x       -- Find canonical representitive for x and y
-        v = chase y
-        f (w, z) = chase w == u && chase z == v
-        chase = listChase (same d)
-
--- Find canonical representive of the set of identified variables.
-listChase :: Eq t => [(t, t)] -> t -> t
-listChase d x =
-  case lookup x d of
-    Nothing -> x
-    Just y -> listChase d y
-
--- Ensure first var in pair is in v.
-orientDecis :: Set Id -> [(Id, Id)] -> [(Id, Id)]
-orientDecis v undecided =
-  map f undecided
-  where
-    f (x, y)
-      | S.notMember x v = (y, x)
-      | otherwise = (x, y)
-
--- Modify t by replacing x by y.
-identify :: Id -> Id -> [Maplet] -> [Maplet]
-identify x y t =
-  case lookup x t of
-    Nothing -> error ("Algebra.identify: bad lookup of " ++ show x
-                      ++ " in " ++ show t)
-    Just (_, c) ->
-      filter f (map g t)
-      where
-        f (z, (_, c)) = z /= x && c /= 0
-        g m@(z, (be, d))
-          | z == y = (z, (be, c + d))
-          | otherwise = m
-
--- Solve when variables of sort expr are on LHS.  This involves
--- solving using the group axioms.  The algorithm for matching in the
--- group without added constant symbols is the same as the one for
--- unification with constant symbols.
---
--- For this description, additive notation is used for the group.  To
--- show sums, we write
---
---     sum[i] c[i]*x[i] for c[0]*x[0] + c[1]*x[1] + ... + c[n-1]*x[n-1].
---
--- The unification problem is to solve
---
---     sum[i] c[i]*x[i] = sum[j] d[j]*y[j]
---
--- where x[i] is a variable and y[j] is a constant symbol.
---
--- The algorithm used to find solutions is described in Vol. 2 of The
--- Art of Computer Programming / Seminumerical Alorithms, 2nd Ed.,
--- 1981, by Donald E. Knuth, pg. 327.
---
--- The algorithm's initial values are the linear equation (c,d) and an
--- empty substitution s.
---
--- 1.  Let c[i] be the smallest non-zero coefficient in absolute value.
---
--- 2.  If c[i] < 0, multiply c and d by -1 and goto step 1.
---
--- 3.  If c[i] = 1, a general solution of the following form has been
--- found:
---
---       x[i] = sum[j] -c'[j]*x[j] + d[k] for all k
---
---  where c' is c with c'[i] = 0.  Use the equation to eliminate x[i]
---  from the range of the current substitution s.  If variable x[i] is
---  in the original equation, add the mapping to substitution s.
---
--- 4.  If c[i] divides every coefficient in c,
---
---     * if c[i] divides every constant in d, divide c and d by c[i]
---       and goto step 3,
---
---     * otherwise fail because there is no solution.  In this case
---       expn vars must be identified.
---
--- 5.  Otherwise, eliminate x[i] as above in favor of freshly created
--- variable x[n], where n is the length of c.
---
---      x[n] = sum[j] (c[j] div c[i] * x[j])
---
--- Goto step 1 and solve the equation:
---
---      c[i]*x[n] + sum[j] (c[j] mod c[i])*x[j] = d[k] for all k
-
-solve ::  [Maplet] -> [Maplet] -> Set Id -> Gen ->
-          IdMap -> Decision Id -> [(Set Id, Gen, IdMap)]
-solve t0 t1 v g r d =
-  let (x, ci, i) = smallest t0 in -- ci is the smallest coefficient,
-  case compare ci 0 of            -- x is its variable, i its position
-    GT -> agSolve x ci i t0 t1 v g r d
-    LT -> agSolve x (-ci) i (mInverse t0) (mInverse t1) v g r d -- Step 2
-    EQ -> error "Algebra.solve: zero coefficient found"
-
--- Find the factor with smallest coefficient in absolute value.
--- Returns the variable, the coefficient, and the position within the
--- list.
-smallest :: [Maplet] -> (Id, Int, Int)
-smallest [] = error "Algebra.smallest given an empty list"
-smallest t =
-  loop (Id (0, "x")) 0 0 0 0 t
-  where
-    loop v ci i _ _ [] = (v, ci, i)
-    loop v ci i a j ((x, (_, c)):t) =
-      if a < abs c then
-        loop x c j (abs c) (j + 1) t
-      else
-        loop v ci i a (j + 1) t
-
--- The group axioms are abbreviated by AG.
-agSolve :: Id -> Int -> Int -> [Maplet] -> [Maplet] -> Set Id -> Gen ->
-          IdMap -> Decision Id -> [(Set Id, Gen, IdMap)]
-agSolve x 1 i t0 t1 v g r _ =    -- Solve for x and return answer
-  return (S.delete x v, g, eliminate x t r) -- Step 3
-  where
-    t = G $ group (t1 ++ (mInverse (omit i t0)))
-agSolve x ci i t0 t1 v g r d
-  | divisible ci t0 =           -- Step 4
-    if divisible ci t1 then     -- Solution found
-      agSolve x 1 i (divide ci t0) (divide ci t1) v g r d
-    else         -- No possible solution without identifying variables
-      identSolve x ci i t0 t1 v g r d
-  | otherwise =                 -- Step 5, eliminate x in favor of x'
-      solve t0' t1 (S.insert x' $ S.delete x v) g' r' d
-      where
-        (g', x') = cloneId g x
-        t = G $ group ((x', (False, 1)) :
-                       mInverse (divide ci (omit i t0)))
-        r' = eliminate x t r
-        t0' = (x', (False, ci)) : modulo ci (omit i t0)
-
-eliminate :: Id -> Term -> IdMap -> IdMap
-eliminate x t r =
-  M.map (idSubst (M.singleton x t)) r
-
-omit :: Int -> [a] -> [a]
-omit 0 (_:l) = l
-omit n _ | n < 0 = error "Algebra.omit: negative number given to omit"
-omit n (_:l) = omit (n - 1) l
-omit _ [] = error "Algebra.omit: number given to omit too large"
-
-divisible :: Int -> [Maplet] -> Bool
-divisible ci t =
-  all (\(_, (_, c)) -> mod c ci == 0) t
-
-divide :: Int -> [Maplet] -> [Maplet]
-divide ci t = map (mMapCoef $ flip div ci) t
-
-modulo :: Int -> [Maplet] -> [Maplet]
-modulo ci t =
-  [(x, (be, c')) |
-   (x, (be, c)) <- t,
-   let c' = mod c ci,
-   c' /= 0]
-
--- Explore two choices as to whether to identify a pair of variables.
-identSolve :: Id -> Int -> Int -> [Maplet] -> [Maplet] -> Set Id -> Gen ->
-              IdMap -> Decision Id -> [(Set Id, Gen, IdMap)]
-identSolve z ci i t0 t1 v g r d =
-  case orientDecis v $ nextDecis d t1 of
-    [] -> []
-    ((x, y):_) ->
-      distinct ++ identified
-      where
-        distinct = identSolve z ci i t0 t1 v g r neq
-        neq = d {dist = (x, y):(y, x):dist d}
-        -- eliminate x
-        identified = agSolve z ci i t0 t1' v' g r' d'
-        t1' = identify x y t1   -- Equate x y in t1
-        v' = S.delete x v       -- Eliminate x in v
-        r' = eliminate x y' r   -- And in r
-        y' = groupVar True y
-        d' = d {same = (x, y):same d}
-
--- Does every varible in ts not occur in the domain of e?
--- Trivial bindings in e are ignored.
-identityEnvFor :: GenEnv -> [Term] -> [GenEnv]
-identityEnvFor ge ts =
-  let env@(_, Env (_, r)) = nonTrivialEnv ge in
-  if all (allId $ flip S.notMember $ M.keysSet r) ts then
-      [env]
-  else
-      []
-
-allId :: (Id -> Bool) -> Term -> Bool
-allId f (I x) = f x
-allId _ (C _) = True
-allId f (F _ u) = all (allId f) u
-allId f (G t) = all f (M.keys t)
-
--- Eliminate all trivial bindings so that an environment can be used
--- as a substitution.
-nonTrivialEnv :: GenEnv -> GenEnv
-nonTrivialEnv (g, Env (v, r)) =
-  (g, Env (v, M.filterWithKey nonTrivialBinding r))
-
-{--
-nonTrivialEnv (g, Env (v, r)) =
-  nonGroupEnv (M.assocs r) M.empty []
-  where
-    nonGroupEnv [] env grp =
-      groupEnv g v env grp grp
-    nonGroupEnv ((x, I y):r) env grp
-      | x == y = nonGroupEnv r env grp
-    nonGroupEnv ((x, G y):r) env grp
-      | isGroupVar y && getGroupVar y == x =
-        nonGroupEnv r env grp
-      | otherwise = nonGroupEnv r env ((x, y):grp)
-    nonGroupEnv ((x, y):r) env grp =
-      nonGroupEnv r (M.insert x y env) grp
-
-groupEnv :: Gen -> Set Id -> IdMap -> [(Id, Group)] -> [(Id, Group)] -> GenEnv
-groupEnv g v env grp [] =
-  (g, Env (v, foldl (\env (x, y) -> M.insert x (G y) env) env grp))
-groupEnv g v env grp ((x, t):map)
-  | M.lookup x t /= Just 1 = groupEnv g v env grp map
-  | otherwise =
-      let (t0, t1) = partition M.empty (mul t (M.singleton x (-1))) v in
-      case matchGroup (group t0) (group t1) S.empty g of
-        Nothing -> groupEnv g v env grp map
-        Just (v', g', subst) ->
-            let grp' = L.delete (x, t) grp
-                grp'' = L.map (\(x, t) -> (x, groupSubst subst t)) grp' in
-            groupEnv g' (S.union v' v) env grp'' grp''
-
-notGroupVarMap :: Id -> Group -> Bool
-notGroupVarMap x grp =
-  case M.lookup x t of
-    Nothing -> True
-    Just (_, (_, c)) -> c /= 1
-
--}
-
-substitution :: Env -> Subst
-substitution (Env (_, r)) =
-  Subst $ M.filterWithKey nonTrivialBinding r
-
--- Add type information to an environment, and return it as a list of
--- associations.
-
-reify :: [Term] -> Env -> [(Term, Term)]
-reify domain (Env (_, env)) =
-  map (loop domain) $ M.assocs env
-  where
-    loop [] (x, _) =
-      error $ "Algebra.reify: variable missing from domain " ++ idName x
-      ++ " = " ++ show x ++ "\n" ++ show domain ++ "\n" ++ show env
-    loop (I x : _) (y, t)
-      | x == y = (I x, t)
-    loop (F Text [I x] : _) (y, t)
-      | x == y = (F Text [I x], F Text [t])
-    loop (F Data [I x] : _) (y, t)
-      | x == y = (F Data [I x], F Data [t])
-    loop (F Name [I x] : _) (y, t)
-      | x == y = (F Name [I x], F Name [t])
-    loop (F Skey [I x] : _) (y, t)
-      | x == y = (F Skey [I x], F Skey [t])
-    loop (F Akey [I x] : _) (y, t)
-      | x == y = (F Akey [I x], F Akey [t])
-    loop (F Base [I x] : _) (y, t)
-      | x == y = (F Base [I x], F Base [t])
-    loop (G x : _) (y, G t)
-      | isGroupVar x && getGroupVar x == y = (G x, G t)
-    loop (_ : domain) pair = loop domain pair
-
--- Ensure the range of an environment contains only variables and that
--- the environment is injective.
-matchRenaming :: GenEnv -> Bool
-matchRenaming (_, Env (_, e)) =
-  loop S.empty $ M.elems e
-  where
-    loop _ [] = True
-    loop s (I x:e) =
-      S.notMember x s && loop (S.insert x s) e
-    loop s (G y:e) | isGroupVar y =
-      let x = getGroupVar y in
-      S.notMember x s && loop (S.insert x s) e
-    loop _ _ = False
-
-{--
--- Ensure the range of an environment contains only variables and that
--- the environment is injective.
-matchRenaming :: GenEnv -> Bool
-matchRenaming (gen, Env (v, e)) =
-  nonGrp S.empty (M.elems e) &&
-  groupMatchRenaming v gen (M.foldrWithKey grp M.empty e)
-  where
-    nonGrp _ [] = True
-    nonGrp s (I x:e) =
-      S.notMember x s && nonGrp (S.insert x s) e
-    nonGrp s (G _:e) = nonGrp s e -- Check group bindings elsewhere
-    nonGrp _ _ = False
-    grp x (G t) map = M.insert x t map
-    grp _ _ map = map           -- Get rid of non-group bindings
-
-groupMatchRenaming :: Set Id -> Gen -> Map Id Group -> Bool
-groupMatchRenaming v gen map =
-  loop S.empty $ M.elems map
-  where
-    loop _ [] = True
-    loop s (t:ge)
-      | M.null t = False
-      | isGroupVar t =
-        let x = getGroupVar t in
-        S.notMember x s && loop (S.insert x s) ge
-      | otherwise = any (groupMatchElim v gen map t) (M.assocs t)
-
-groupMatchElim :: Set Id -> Gen -> Map Id Group -> Group -> Maplet -> Bool
-groupMatchElim v gen ge t (x, (be, 1)) =
-  let (t0, t1) = partition M.empty (mul t (mlGrp (x, (be, -1)))) v in
-  any f (matchGroup (group t0) (group t1) S.empty gen)
-  where
-    f (v', gen', subst) =
-      groupMatchRenaming (S.union v' v) gen' $ M.map (groupSubst subst) ge
-groupMatchElim _ _ _ _ _ = False
--}
-
-instance C.Env Term Gen Subst Env where
-  emptyEnv = emptyEnv
-  instantiate = instantiate
-  match = match
-  identityEnvFor = identityEnvFor
-  substitution = substitution
-  reify = reify
-  matchRenaming = matchRenaming
-  nodeMatch _ _ _ = error "Algebra.nodeMatch: no support for nodes"
-  nodeLookup _ _ = error "Algebra.nodeMatch: no support for nodes"
-
--- Term specific loading functions
-
-loadVars :: Monad m => Gen -> [SExpr Pos] -> m (Gen, [Term])
-loadVars gen sexprs =
-  do
-    pairs <- mapM loadVarPair sexprs
-    (g, vars) <- foldM loadVar (gen, []) (concat pairs)
-    return (g, reverse vars)
-
-loadVarPair :: Monad m => SExpr Pos -> m [(SExpr Pos, SExpr Pos)]
-loadVarPair (L _ (x:xs)) =
-  let (t:vs) = reverse (x:xs) in
-  return [(v,t) | v <- reverse vs]
-loadVarPair x = fail (shows (annotation x) "Bad variable declaration")
-
-loadVar :: Monad m => (Gen, [Term]) -> (SExpr Pos, SExpr Pos) ->
-           m (Gen, [Term])
-loadVar (gen, vars) (S pos name, S pos' sort) =
-  case loadLookup pos vars name of
-    Right _ ->
-      fail (shows pos "Duplicate variable declaration for " ++ name)
-    Left _ ->
-      do
-        let (gen', x) = freshId gen name
-        p <- mkVar x
-        return (gen', p : vars)
-  where
-    mkVar x =
-      let t = I x in
-      case sort of
-        "mesg" -> return t
-        "text" -> return $ F Text [t]
-        "data" -> return $ F Data [t]
-        "name" -> return $ F Name [t]
-        "skey" -> return $ F Skey [t]
-        "akey" -> return $ F Akey [t]
-        "base" -> return $ F Base [t]
-        "expr" -> return $ groupVar False x
-        "expn" -> return $ groupVar True x
-        _ -> fail (shows pos' "Sort " ++ sort ++ " not recognized")
-loadVar _ (x,_) = fail (shows (annotation x) "Bad variable syntax")
-
-loadLookup :: Pos -> [Term] -> String -> Either String Term
-loadLookup pos [] name = Left (shows pos $ "Identifier " ++ name ++ " unknown")
-loadLookup pos (t : u) name =
-  let name' = idName (varId t) in
-  if name' == name then Right t else loadLookup pos u name
-
-loadLookupName :: Monad m => Pos -> [Term] -> String -> m Term
-loadLookupName pos vars name =
-  either fail f (loadLookup pos vars name)
-  where
-    f t@(F Name [I _]) = return t
-    f _ = fail (shows pos $ "Expecting " ++ name ++ " to be a name")
-
-loadLookupAkey :: Monad m => Pos -> [Term] -> String -> m Term
-loadLookupAkey pos vars name =
-  either fail f (loadLookup pos vars name)
-  where
-    f t@(F Akey [I _]) = return t
-    f _ = fail (shows pos $ "Expecting " ++ name ++ " to be an akey")
-
--- Load term and check that it is well-formed.
-loadTerm :: Monad m => [Term] -> SExpr Pos -> m Term
-loadTerm vars (S pos s) =
-  either fail return (loadLookup pos vars s)
-loadTerm _ (Q _ t) =
-  return (C t)
-loadTerm vars (L pos (S _ s : l)) =
-  case lookup s loadDispatch of
-    Nothing -> fail (shows pos "Keyword " ++ s ++ " unknown")
-    Just f -> f pos vars l
-loadTerm _ x = fail (shows (annotation x) "Malformed term")
-
-type LoadFunction m = Pos -> [Term] -> [SExpr Pos] -> m Term
-
-loadDispatch :: Monad m => [(String, LoadFunction m)]
-loadDispatch =
-  [("pubk", loadPubk)
-  ,("privk", loadPrivk)
-  ,("invk", loadInvk)
-  ,("ltk", loadLtk)
-  ,("gen", loadGen)
-  ,("exp", loadExp)
-  ,("one", loadOne)
-  ,("rec", loadRec)
-  ,("mul", loadMul)
-  ,("cat", loadCat)
-  ,("enc", loadEnc)
-  ,("hash", loadHash)
-  ]
-
--- Atom constructors: pubk privk invk ltk
-
-loadPubk :: Monad m => LoadFunction m
-loadPubk _ vars [S pos s] =
-  do
-    t <- loadLookupName pos vars s
-    return $ F Akey [F Pubk [I $ varId t]]
-loadPubk _ vars [Q _ c, S pos s] =
-  do
-    t <- loadLookupName pos vars s
-    return $ F Akey [F Pubk [C c, I $ varId t]]
-loadPubk pos _ _ = fail (shows pos "Malformed pubk")
-
-loadPrivk :: Monad m => LoadFunction m
-loadPrivk _ vars [S pos s] =
-  do
-    t <- loadLookupName pos vars s
-    return $ F Akey [F Invk [F Pubk [I $ varId t]]]
-loadPrivk _ vars [Q _ c, S pos s] =
-  do
-    t <- loadLookupName pos vars s
-    return $ F Akey [F Invk [F Pubk [C c, I $ varId t]]]
-loadPrivk pos _ _ = fail (shows pos "Malformed privk")
-
-loadInvk :: Monad m => LoadFunction m
-loadInvk _ vars [S pos s] =
-  do
-    t <- loadLookupAkey pos vars s
-    return $ F Akey [F Invk [I $ varId t]]
-loadInvk pos _ _ = fail (shows pos "Malformed invk")
-
-loadLtk :: Monad m => LoadFunction m
-loadLtk _ vars [S pos s, S pos' s'] =
-  do
-    t <- loadLookupName pos vars s
-    t' <- loadLookupName pos' vars s'
-    return $ F Skey [F Ltk [I $ varId t, I $ varId t']]
-loadLtk pos _ _ = fail (shows pos "Malformed ltk")
-
--- Base and exponents
-
-loadGen :: Monad m => LoadFunction m
-loadGen _ _ [] =
-  return $ F Base [F Genr []]
-loadGen pos _ _ = fail (shows pos "Malformed gen")
-
-loadExp :: Monad m => LoadFunction m
-loadExp _ vars [x, x'] =
-  do
-    t <- loadBase vars x
-    t' <- loadExpr vars x'
-    return $ F Base [idSubst emptyIdMap $ F Exp [t, G t']]
-loadExp pos _ _ = fail (shows pos "Malformed exp")
-
-loadBase :: Monad m => [Term] -> SExpr Pos -> m Term
-loadBase vars x =
-  do
-    t <- loadTerm vars x
-    case t of
-      F Base [t] -> return t
-      _ -> fail (shows (annotation x) "Malformed base")
-
-loadExpr :: Monad m => [Term] -> SExpr Pos -> m Group
-loadExpr vars x =
-  do
-    t <- loadTerm vars x
-    case t of
-      G t -> return t
-      _ -> fail (shows (annotation x) "Malformed expr")
-
-loadOne :: Monad m => LoadFunction m
-loadOne _ _ [] =
-  return $ G M.empty
-loadOne pos _ _ = fail (shows pos "Malformed one")
-
-loadRec :: Monad m => LoadFunction m
-loadRec _ vars [x] =
-  do
-    t <- loadExpr vars x
-    return $ G $ invert t
-loadRec pos _ _ = fail (shows pos "Malformed rec")
-
-loadMul :: Monad m => LoadFunction m
-loadMul _ vars xs =
-  do
-    t <- foldM f M.empty xs
-    return $ G t
-  where
-    f acc x =
-      do
-        t <- loadExpr vars x
-        return $ mul t acc
-
--- Term constructors: cat enc
-
-loadCat :: Monad m => LoadFunction m
-loadCat _ vars (l : ls) =
-  do
-    ts <- mapM (loadTerm vars) (l : ls)
-    return $ foldr1 (\a b -> F Cat [a, b]) ts
-loadCat pos _ _ = fail (shows pos "Malformed cat")
-
-loadEnc :: Monad m => LoadFunction m
-loadEnc pos vars (l : l' : ls) =
-  do
-    let (butLast, last) = splitLast l (l' : ls)
-    t <- loadCat pos vars butLast
-    t' <- loadTerm vars last
-    return $ F Enc [t, t']
-loadEnc pos _ _ = fail (shows pos "Malformed enc")
-
-splitLast :: a -> [a] -> ([a], a)
-splitLast x xs =
-  loop [] x xs
-  where
-    loop z x [] = (reverse z, x)
-    loop z x (y : ys) = loop (x : z) y ys
-
-loadHash :: Monad m => LoadFunction m
-loadHash _ vars (l : ls) =
-   do
-     ts <- mapM (loadTerm vars) (l : ls)
-     return $ F Hash [foldr1 (\a b -> F Cat [a, b]) ts]
-loadHash pos _ _ = fail (shows pos "Malformed hash")
-
--- Term specific displaying functions
-
-newtype Context = Context [(Id, String)] deriving Show
-
-displayVars :: Context -> [Term] -> [SExpr ()]
-displayVars _ [] = []
-displayVars ctx vars =
-  let (v,t):pairs = map (displayVar ctx) vars in
-  loop t [v] pairs
-  where
-    loop t vs [] = [L () (reverse (t:vs))]
-    loop t vs ((v',t'):xs)
-      | t == t' = loop t (v':vs) xs
-      | otherwise = L () (reverse (t:vs)):loop t' [v'] xs
-
-displayVar :: Context -> Term -> (SExpr (), SExpr ())
-displayVar ctx (I x) = displaySortId "mesg" ctx x
-displayVar ctx (F Text [I x]) = displaySortId "text" ctx x
-displayVar ctx (F Data [I x]) = displaySortId "data" ctx x
-displayVar ctx (F Name [I x]) = displaySortId "name" ctx x
-displayVar ctx (F Skey [I x]) = displaySortId "skey" ctx x
-displayVar ctx (F Akey [I x]) = displaySortId "akey" ctx x
-displayVar ctx (F Base [I x]) = displaySortId "base" ctx x
-displayVar ctx t@(G x)
-  | isBasisVar x = displaySortId "expn" ctx (varId t)
-  | isGroupVar x = displaySortId "expr" ctx (varId t)
-displayVar _ _ =
-  error "Algebra.displayVar: term not a variable with its sort"
-
-displaySortId :: String -> Context -> Id -> (SExpr (), SExpr ())
-displaySortId sort ctx x = (displayId ctx x, S () sort)
-
-displayId :: Context -> Id -> SExpr ()
-displayId (Context ctx) x =
-  case lookup x ctx of
-    Nothing ->
-      let msg = idName x ++ " in a display context" in
-      error $ "Algebra.displayId: Cannot find variable " ++ msg
-    Just name -> S () name
-
-displayTerm :: Context -> Term -> SExpr ()
-displayTerm ctx (I x) = displayId ctx x
-displayTerm ctx (F Text [I x]) = displayId ctx x
-displayTerm ctx (F Data [I x]) = displayId ctx x
-displayTerm ctx (F Name [I x]) = displayId ctx x
-displayTerm ctx (F Skey [I x]) = displayId ctx x
-displayTerm ctx (F Skey [F Ltk [I x, I y]]) =
-  L () [S () "ltk", displayId ctx x, displayId ctx y]
-displayTerm ctx (F Akey [t]) =
-  case t of
-    I x -> displayId ctx x
-    F Invk [I x] -> L () [S () "invk", displayId ctx x]
-    F Pubk [I x] -> L () [S () "pubk", displayId ctx x]
-    F Pubk [C c, I x] -> L () [S () "pubk", Q () c, displayId ctx x]
-    F Invk [F Pubk [I x]] -> L () [S () "privk", displayId ctx x]
-    F Invk [F Pubk [C c, I x]] ->
-      L () [S () "privk", Q () c, displayId ctx x]
-    _ -> error ("Algebra.displayAkey: Bad term " ++ show t)
-displayTerm ctx (F Base [t]) =
-  displayBase t
-  where
-    displayBase (I x) = displayId ctx x
-    displayBase (F Genr []) =
-      L () [S () "gen"]
-    displayBase (F Exp [t0, G t1]) =
-      L () [S () "exp", displayBase t0, displayTerm ctx (G t1)]
-    displayBase t = error ("Algebra.displayBase: Bad term " ++ show t)
-displayTerm ctx (G t) =
-  displayExpr t
-  where
-    displayExpr t
-      | M.null t = L () [S () "one"]
-      | otherwise =
-        case factors t of
-          [f] -> displayFactor f
-          fs -> L () (S () "mul" : map displayFactor fs)
-    displayFactor (x, n)
-      | n >= 0 = displayId ctx x
-      | otherwise = L () [S () "rec", displayId ctx x]
-displayTerm _ (C t) = Q () t
-displayTerm ctx (F Cat [t0, t1]) =
-  L () (S () "cat" : displayTerm ctx t0 : displayList ctx t1)
-displayTerm ctx (F Enc [t0, t1]) =
-  L () (S () "enc" : displayEnc ctx t0 t1)
-displayTerm ctx (F Hash [t]) =
-    L () (S () "hash" : displayList ctx t)
-displayTerm _ t = error ("Algebra.displayTerm: Bad term " ++ show t)
-
-displayList :: Context -> Term -> [SExpr ()]
-displayList ctx (F Cat [t0, t1]) = displayTerm ctx t0 : displayList ctx t1
-displayList ctx t = [displayTerm ctx t]
-
-displayEnc :: Context -> Term -> Term -> [SExpr ()]
-displayEnc ctx (F Cat [t0, t1]) t = displayTerm ctx t0 : displayEnc ctx t1 t
-displayEnc ctx t0 t1 = [displayTerm ctx t0, displayTerm ctx t1]
-
-displayEnv :: Context -> Context -> Env -> [SExpr ()]
-displayEnv ctx ctx' (Env (_, r)) =
-  map (\(x, t) -> L () [displayTerm ctx x, displayTerm ctx' t]) r'
-  where
-    r' = map (\(x, t) -> (I x, inferSort t)) $ M.assocs r
-
-factors :: Group -> [(Id, Int)]
-factors t =
-  do
-    (x, (_, n)) <- M.assocs t
-    case n >= 0 of
-      True -> replicate n (x, 1)
-      False -> replicate (negate n) (x, -1)
-
--- displaySubst c s displays a substitution s in context c, where some
--- variables that occur in s might not be in c.  Enough sort
--- inference is performed so as to allow the extension of the context.
-displaySubst :: Context -> Subst -> [SExpr ()]
-displaySubst ctx s@(Subst r) =
-  map (\(x, t) -> L () [displayTerm ctx' x, displayTerm ctx' t]) r'
-  where
-    r' = map (\(x, t) -> (I x, inferSort (substitute s t))) $ M.assocs r
-    ctx' = foldl (\ctx (x, t) -> addToContext ctx [x, t]) ctx r'
-
-inferSort :: Term -> Term
-inferSort t@(F Invk _) = F Akey [t]
-inferSort t@(F Pubk _) = F Akey [t]
-inferSort t@(F Ltk _) = F Skey [t]
-inferSort t@(F Genr _) = F Base [t]
-inferSort t@(F Exp _) = F Base [t]
-inferSort t = t
-
-emptyContext :: Context
-emptyContext = Context []
-
--- Generate names for output renaming as necessary.
--- Assumes the input is a list of term that are well-formed
-addToContext :: Context -> [Term] -> Context
-addToContext ctx u =
-  foldl (foldVars varContext) ctx u
-
-varContext :: Context -> Term -> Context
-varContext ctx t =
-  let x = varId t
-      name = rootName $ idName x in
-  if hasId ctx x then
-    ctx
-  else
-    if hasName ctx name then
-      extendContext ctx x (genName ctx name)
-    else
-      extendContext ctx x name
-
-hasId :: Context -> Id -> Bool
-hasId (Context ctx) id =
-  maybe False (const True) (lookup id ctx)
-
-hasName :: Context -> String -> Bool
-hasName (Context ctx) name =
-  maybe False (const True) (L.find ((name ==) . snd) ctx)
-
-extendContext :: Context -> Id -> String -> Context
-extendContext (Context ctx) x name =
-  Context $ (x, name) : ctx
-
-genName :: Context -> String -> String
-genName ctx name =
-  loop 0
-  where
-    root = '-' : reverse name
-    loop :: Int -> String
-    loop n =
-      let name' = revapp root (show n) in
-      if hasName ctx name' then
-        loop (n + 1)
-      else
-        name'
-    revapp [] s = s
-    revapp (c : cs) s = revapp cs (c : s)
-
-rootName :: String -> String
-rootName name =
-  noHyphen 0 name
-  where
-    noHyphen _ [] = name
-    noHyphen i (c : s)
-      | c == '-' = hyphen i (i + 1) s
-      | otherwise = noHyphen (i + 1) s
-    hyphen i _ [] = rootName $ take i name
-    hyphen i j (c : s)
-      | isDigit c  = hyphen i (j + 1) s
-      | otherwise = noHyphen j (c : s)
-
-instance C.Context Term Gen Subst Env Context where
-  emptyContext = emptyContext
-  addToContext = addToContext
-  displayVars = displayVars
-  displayTerm = displayTerm
-  displayEnv = displayEnv
-  displaySubst = displaySubst
+-- To support security goals, the message algebra has been augmented
+-- with support for variables of sort node and pairs of integers.  The
+-- constructor D is used as N is taken for numbers in S-Expressions.
+
+-- Copyright (c) 2009, 2014 The MITRE Corporation
+--
+-- This program is free software: you can redistribute it and/or
+-- modify it under the terms of the BSD License as published by the
+-- University of California.
+
+--------------------------------------------------------------------
+
+-- The module implements a many-sorted algebra, but is used as an
+-- order-sorted algebra.  It exports a name, and the origin used to
+-- generate variables.
+
+-- The Diffie-Hellman Order-Sorted Signature is
+
+-- Sorts: mesg, text, data, name, skey, akey,
+--        string, base, expr, and expn
+--
+-- Subsorts: text, data, name, skey, akey,
+--           base, expr < mesg and expn < expr
+--
+-- Operations:
+--   cat : mesg X mesg -> mesg               Pairing
+--   enc : mesg X mesg -> mesg               Encryption
+--   hash : mesg -> mesg                     Hashing
+--   string : mesg                           Tag constants
+--   ltk : name X name -> skey               Long term shared key
+--   bltk : name X name -> skey              Bidirectional long-term key
+--   pubk : name -> akey                     Public key of principal
+--   pubk : string X name -> akey            Tagged public key of principal
+--   invk : akey -> akey                     Inverse of asymmetric key
+--   gen : base                              DH generator
+--   exp : base X expr -> base               Exponentiation
+--   mul : expr X expr -> expr               Group operation
+--   rec : expr -> expr                      Group inverse
+--   one : expr                              Group identity
+--
+-- Atoms: messages of sort text, data, name, skey, akey, and expn, and
+--        messages of the form (exp (gen) x) where x is of sort expn.
+
+-- A free Abelian group has a set of basis elements, and the sort expn
+-- is the sort for basis elements.  Limiting the atoms associated with
+-- an exponent to basis elements is the basis elements as atoms
+-- principle.  This principle enables CPSA to correctly handle
+-- origination assumptions.
+
+-- Variables of sort string are forbidden.
+
+-- The implementation exploits the isomorphism between order-sorted
+-- algebras and many-sorted algebras by adding inclusion operations to
+-- produce an equivalent Diffie-Hellman Many-Sorted Signature.  There
+-- is an inclusion operation for each subsort of mesg.  Diffie-Hellman
+-- exponents are handled specially using a canonical representation as
+-- monomials.
+
+-- Sorts: mesg, text, data, name, skey, akey,
+--        string, base, expr, and expn
+--
+-- Operations:
+--   cat : mesg X mesg -> mesg               Pairing
+--   enc : mesg X mesg -> mesg               Encryption
+--   hash : mesg -> mesg                     Hashing
+--   string : mesg                           Tag constants
+--   ltk : name X name -> skey               Long term shared key
+--   bltk : name X name -> skey              Bidirectional long-term key
+--   pubk : name -> akey                     Public key of principal
+--   pubk : string X name -> akey            Tagged public key of principal
+--   invk : akey -> akey                     Inverse of asymmetric key
+--   text : text -> mesg                     Sort text inclusion
+--   data : data -> mesg                     Sort date inclusion
+--   name : name -> mesg                     Sort name inclusion
+--   skey : skey -> mesg                     Sort skey inclusion
+--   akey : akey -> mesg                     Sort akey inclusion
+--   base : base -> mesg                     Sort base inclusion
+--
+--  A message of sort expr, a monomial, is represented by a map from
+--  identifiers to descriptions.  A description is a pair consisting
+--  of a flag saying if the variable is of sort expn or expr, and a
+--  non-zero integer.  For t of sort expr, the monomial associated
+--  with t is
+--
+--      x1 ^ c1 * x2 ^ c2 * ... * xn ^ cn
+--
+-- for all xi in the domain of t and t(xi) = (_, ci).
+
+-- In both algebras, invk(invk(t)) = t for all t of sort akey,
+-- (exp h (one)) = h, (exp (exp h x) y) = (exp h (mul x y)), and
+-- the Abelian group axioms hold.
+
+{-# LANGUAGE MultiParamTypeClasses, CPP #-}
+
+-- Fail on non-canonical terms with this is defined
+-- #define CANONICAL
+
+module CPSA.DiffieHellman.Algebra (name,
+--                                   iUnify, iMatch,
+                                  origin)
+where
+
+import Control.Monad (foldM)
+import qualified Data.List as L
+import qualified Data.Set as S
+import Data.Set (Set)
+import qualified Data.Map as M
+import Data.Map (Map)
+import Data.Char (isDigit)
+import qualified CPSA.Lib.CPSA as C
+import CPSA.Lib.CPSA (SExpr(..), Pos, annotation)
+
+{- Export iUnify and iMatch for GHCi for debugging
+
+For this to work, you must install the package bytestring-handle from
+Hackage and tell GHCi that it is not hidden on the command line or
+within GHCi with:
+
+:set -package bytestring-handle
+
+-}
+
+{--
+import System.IO (Handle)
+import Data.ByteString.Lazy.Char8 (pack)
+import Data.ByteString.Handle
+import Control.Exception (try) --}
+{--
+-- Debugging support
+import System.IO.Unsafe
+
+z :: Show a => a -> b -> b
+z x y = unsafePerformIO (print x >> return y)
+
+zz :: Show a => a -> a
+zz x = z x x
+
+zzz :: (Show a, Show b) => a -> b -> b
+zzz x y = z (x,y) y
+
+zn :: Show a => a -> Maybe b -> Maybe b
+zn x Nothing = z x Nothing
+zn _ y = y
+
+zf :: Show a => a -> Bool -> Bool
+zf x False = z x False
+zf _ y = y
+
+zt :: Show a => a -> Bool -> Bool
+zt x True = z x True
+zt _ y = y
+--}
+{--
+
+stringHandle :: String -> IO Handle
+stringHandle s = readHandle False (pack s)
+
+stringPosHandle :: String -> IO C.PosHandle
+stringPosHandle s =
+    do
+      h <- stringHandle s
+      C.posHandle "" h
+
+stringLoad :: String -> IO [SExpr Pos]
+stringLoad s =
+    do
+      h <- stringPosHandle s
+      loop h []
+    where
+      loop h xs =
+          do
+            x <- C.load h
+            case x of
+              Nothing ->
+                return $ reverse xs
+              Just x ->
+                loop h (x : xs)
+
+sLoad :: String -> [[SExpr Pos]]
+sLoad s =
+    [unsafePerformIO $ stringLoad s]
+
+-- Test unification
+
+iUnify :: String -> String -> String -> [Subst]
+iUnify vars t t' =
+    iRun unify emptySubst vars t t'
+
+-- Test matching
+
+iMatch :: String -> String -> String -> [Env]
+iMatch vars t t' =
+    iRun match emptyEnv vars t t'
+
+iRun :: (Term -> Term -> (Gen, a) -> [(Gen, a)]) -> a ->
+        String -> String -> String -> [a]
+iRun f mt vars t t' =
+    do
+      vars <- sLoad vars
+      [t] <- sLoad t
+      [t'] <- sLoad t'
+      (gen, vars) <- loadVars origin vars
+      t <- loadTerm vars t
+      t' <- loadTerm vars t'
+      (_, a) <- f t t' (gen, mt)
+      return a
+
+gRun :: Gen -> Term -> a -> a
+gRun (Gen n) t a =
+    foldVars f a t
+    where
+      f a t =
+          case varId t of
+            Id (m, _) | m >= n -> error ("Bad gen " ++ show n)
+            _ -> a
+
+gMatch :: Term -> Term -> GenEnv -> [GenEnv]
+gMatch t t' r@(g, _) = gRun g t' (match t t' r)
+
+gUnify :: Term -> Term -> GenSubst -> [GenSubst]
+gUnify t t' r@(g, _) = gRun g (F Cat [t, t']) (unify t t' r)
+--}
+
+name :: String
+name = "diffie-hellman"
+
+-- An identifier
+
+newtype Id = Id (Integer, String) deriving Show
+
+-- The integer distinguishes an identifier, the string is for printing.
+
+instance Eq Id where
+    (Id (x, _)) == (Id (x', _)) = x == x'
+
+instance Ord Id where
+    compare (Id (x, _)) (Id (x', _)) = compare x x'
+
+idName :: Id -> String
+idName (Id (_, name)) = name
+
+-- Counter used for generating fresh identifiers.
+
+newtype Gen = Gen (Integer) deriving (Show, Eq)
+
+origin :: Gen
+origin = Gen (0)
+
+freshId :: Gen -> String -> (Gen, Id)
+freshId (Gen (i)) name = (Gen (i + 1), Id (i, name))
+
+cloneId :: Gen -> Id -> (Gen, Id)
+cloneId gen x = freshId gen (idName x)
+
+-- A term in an Abelian group is a map from identifiers to pairs of
+-- bools and non-zero integers.  The boolean is true if the variable
+-- is a basis element.
+
+type Coef = Int
+
+type Desc = (Bool, Coef)
+
+type Group = Map Id Desc
+
+isGroupVar :: Group -> Bool
+isGroupVar t =
+  M.size t == 1 && snd (head (M.elems t)) == 1
+
+isBasisVar :: Group -> Bool
+isBasisVar t =
+  M.size t == 1 && head (M.elems t) == (True, 1)
+
+isExprVar :: Group -> Bool
+isExprVar t =
+  M.size t == 1 && head (M.elems t) == (False, 1)
+
+-- Assumes isGroupVar t == True or isBasisVar t == True!
+getGroupVar :: Group -> Id
+getGroupVar x = head $ M.keys x
+
+-- Create group var as a basis element if be is true
+groupVar :: Bool -> Id -> Term
+groupVar be x = G $ M.singleton x (be, 1)
+
+groupVarGroup :: Id -> Group
+groupVarGroup x = M.singleton x (False, 1)
+
+dMapCoef :: (Coef -> Coef) -> Desc -> Desc
+dMapCoef f (be, c) = (be, f c)
+
+invert :: Group -> Group
+invert t = M.map (dMapCoef negate) t
+
+expg :: Group -> Int -> Group
+expg _ 0 = M.empty
+expg t 1 = t
+expg t n = M.map (dMapCoef (n *)) t
+
+mul :: Group -> Group -> Group
+mul t t' =
+  M.foldrWithKey f t' t         -- Fold over the mappings in t
+  where
+    f x c t =                   -- Alter the mapping of
+      M.alter (g c) x t         -- variable x in t
+    g c Nothing =               -- Variable x not currently mapped
+      Just c                    -- so add a mapping
+    g (b, c) (Just (b', c'))    -- Variable x maps to c'
+      | b /= b' = C.assertError "Algebra.mul: sort mismatch"
+      | c + c' == 0 = Nothing          -- Delete the mapping
+      | otherwise = Just $ (b, c + c') -- Adjust the mapping
+
+-- Why not replace M.assocs with M.toList elsewhere?
+
+type Maplet = (Id, Desc)
+
+mMapCoef :: (Coef -> Coef) -> Maplet -> Maplet
+mMapCoef f (x, (be, c)) = (x, (be, f c))
+
+mInverse :: [Maplet] -> [Maplet]
+mInverse maplets = map (mMapCoef negate) maplets
+
+isMapletNonzero :: Maplet -> Bool
+isMapletNonzero (_, (_, c)) = c /= 0
+
+group :: [Maplet] -> Group
+group maplets =
+  M.fromList $ filter isMapletNonzero maplets
+
+-- Function symbols--see foldVar to see the arity of each symbol.
+data Symbol
+    = Text                      -- Text atom
+    | Data                      -- Another text-like atom
+    | Name                      -- Principal atom
+    | Skey                      -- Symmetric key atom
+    | Base                      -- Base of an exponentiated atom
+    | Ltk                       -- Long term shared symmetric key
+    | Bltk                      -- Bidirectional ltk
+    | Akey                      -- Asymmetric key atom
+    | Invk                      -- Inverse of asymmetric key
+    | Pubk                      -- Public asymmetric key of a principal
+    | Genr                      -- The generator constant for the group
+    | Exp                       -- Exponentiation function symbol
+    | Cat                       -- Term concatenation
+    | Enc                       -- Encryption
+    | Hash                      -- Hashing
+      deriving (Show, Eq, Ord, Enum, Bounded)
+
+-- A Diffie-Hellman Algebra Term
+
+data Term
+    = I !Id
+    | C !String
+    | F !Symbol ![Term]
+    | G !Group                  -- An exponent, an Abelian group
+    | D !Id                     -- Node variable
+    | P (Int, Int)              -- Node constant
+      deriving Show
+
+subNums :: Term -> Set Term
+subNums t | isNum t = S.singleton t
+subNums t@(F Exp _) = S.singleton (F Base [t])
+subNums (F _ ts) = (S.unions (map subNums ts))
+subNums _ = S.empty
+
+calcIndicator :: Term -> Term -> Maybe Int
+calcIndicator t v
+  | (not (isNum t) || not (isExpn v)) = Nothing
+  | (not (isVar v)) = Nothing
+  | otherwise = Just (ind t v)
+  where
+    ind t@(F Base _) v = case expCollapse t of
+      F Base [F Genr _] -> 0
+      F Base [I _] -> 0
+      F Base [F Exp [_, G m]] -> ind (G m) v
+      _ -> error ("Algebra.hs: expCollapse returned non-base element")
+    ind (G m) v = case M.lookup (extrVar v) m of
+        Nothing -> 0
+        Just (_, i) -> i
+    ind _ _ = 0
+    isExpn (G _) = True
+    isExpn _ = False
+    extrVar (G t) = head $ M.keys t
+    extrVar _ = error ("Algebra.hs: extrExpn called on a non-exponent")
+
+equalTerm :: Term -> Term -> Bool
+equalTerm (I x) (I y) = x == y
+equalTerm (C c) (C c') = c == c'
+equalTerm (G t) (G t') = t == t'
+#if defined CANONICAL
+equalTerm l@(F Invk [F Invk [t]]) t' = error ("EQ: " ++ show l)
+equalTerm t l@(F Invk [F Invk [t']]) = error ("EQ: " ++ show l)
+equalTerm l@(F Exp [t0, G t1]) t' | M.null t1 = error ("EQ: " ++ show l)
+equalTerm t l@(F Exp [t0, G t1]) | M.null t1 = error ("EQ: " ++ show l)
+equalTerm l@(F Exp [F Exp [t, G t0], G t1]) t' = error ("EQ: " ++ show l)
+equalTerm t l@(F Exp [F Exp [t', G t0], G t1])  = error ("EQ: " ++ show l)
+#else
+equalTerm (F Invk [F Invk [t]]) t' = equalTerm t t'
+equalTerm t (F Invk [F Invk [t']]) = equalTerm t t'
+equalTerm (F Exp [t0, G t1]) t' | M.null t1 = equalTerm t0 t'
+equalTerm t (F Exp [t0, G t1]) | M.null t1 = equalTerm t t0
+equalTerm (F Exp [F Exp [t, G t0], G t1]) t' =
+    equalTerm (F Exp [t, G (mul t0 t1)]) t'
+equalTerm t (F Exp [F Exp [t', G t0], G t1])  =
+    equalTerm t (F Exp [t', G (mul t0 t1)])
+#endif
+equalTerm (F Bltk [t0, t1]) (F Bltk [t0', t1']) =
+    (equalTerm t0 t0' && equalTerm t1 t1') ||
+    (equalTerm t0 t1' && equalTerm t1 t0')
+equalTerm (F s u) (F s' u') =
+    s == s' && equalTermLists u u'
+equalTerm (D x) (D y) = x == y
+equalTerm (P p) (P p') = p == p'
+equalTerm _ _ = False
+
+forceVar :: Term -> Term
+forceVar x | not $ termsWellFormed [x] =
+  error ("Algebra.hs:forceVar: terms not well formed" ++ show x)
+forceVar (I x) = (I x)
+forceVar (C x) = (C x) -- no variable!
+forceVar (F Text y) = (F Text y)
+forceVar (F Data y) = (F Data y)
+forceVar (F Name y) = (F Name y)
+forceVar (F Skey [(I x)]) = (F Skey [(I x)])
+forceVar (F Skey [(F Ltk ns@(_:_))]) = forceVar (head ns)
+forceVar (F Skey [(F Bltk ns@(_:_))]) = forceVar (head ns)
+forceVar (F Base [(I x)]) = (F Base [(I x)])
+forceVar (F Base [(F Exp ns@(_:(_:_)))]) = forceVar (ns !! 1) -- go to the exponent part
+forceVar (F Base [F Genr []]) = (F Base [F Genr []]) -- no variable
+forceVar (F Akey [(I x)]) = (F Akey [(I x)])
+forceVar (F Akey [F Invk ns@(_:_)]) = forceVar (head ns)
+forceVar (F Akey [F Pubk ns@(_:_)]) = forceVar (head ns)
+forceVar (F _ ns@(_:_)) = forceVar (head ns) -- for Cat, Enc.
+forceVar (G m) | not $ null (M.keys m) =
+  let (x, (be, _)) = head $ M.assocs m in
+  G $ M.fromList [(x, (be, 1))]
+forceVar (D x) = (D x)
+forceVar (P x) = (P x) -- no variable!
+forceVar _ = error ("Algebra.hs:forceVar: something unexpected happened.")
+
+equalTermLists :: [Term] -> [Term] -> Bool
+equalTermLists [] [] = True
+equalTermLists (t : u) (t' : u') =
+    equalTerm t t' && equalTermLists u u'
+equalTermLists _ _ = False
+
+instance Eq Term where
+    (==) = equalTerm
+
+-- Term comparison respecting the axiom
+
+compareTerm :: Term -> Term -> Ordering
+compareTerm (I x) (I y) = compare x y
+compareTerm (C c) (C c') = compare c c'
+compareTerm (G t) (G t') = compare t t'
+#if defined CANONICAL
+compareTerm l@(F Invk [F Invk [t]]) t' = error ("COM: " ++ show l)
+compareTerm t l@(F Invk [F Invk [t']]) = error ("COM: " ++ show l)
+compareTerm l@(F Exp [t0, G t1]) t' | M.null t1 = error ("COM: " ++ show l)
+compareTerm t l@(F Exp [t0, G t1]) | M.null t1 = error ("COM: " ++ show l)
+compareTerm l@(F Exp [F Exp [t, G t0], G t1]) t' = error ("COM: " ++ show l)
+compareTerm t l@(F Exp [F Exp [t', G t0], G t1]) = error ("COM: " ++ show l)
+#else
+compareTerm (F Invk [F Invk [t]]) t' = compareTerm t t'
+compareTerm t (F Invk [F Invk [t']]) = compareTerm t t'
+compareTerm (F Exp [t0, G t1]) t' | M.null t1 = compareTerm t0 t'
+compareTerm t (F Exp [t0, G t1]) | M.null t1 = compareTerm t t0
+compareTerm (F Exp [F Exp [t, G t0], G t1]) t' =
+    compareTerm (F Exp [t, G (mul t0 t1)]) t'
+compareTerm t (F Exp [F Exp [t', G t0], G t1])  =
+    compareTerm t (F Exp [t', G (mul t0 t1)])
+#endif
+compareTerm (F Bltk [t0, t1]) (F Bltk [t0', t1']) =
+    if (compareTerm t0 t1 == GT) then (compareTerm (F Bltk [t1, t0]) (F Bltk [t0', t1']))
+    else (if (compareTerm t0' t1' == GT) then (compareTerm (F Bltk [t0,t1]) (F Bltk [t1', t0']))
+                                              else compareTermLists [t0, t1] [t0', t1'])
+compareTerm (F s u) (F s' u') =
+    case compare s s' of
+      EQ -> compareTermLists u u'
+      o -> o
+compareTerm (D x) (D y) = compare x y
+compareTerm (P p) (P p') = compare p p'
+compareTerm (I _) (C _) = LT
+compareTerm (C _) (I _) = GT
+compareTerm (I _) (F _ _) = LT
+compareTerm (F _ _) (I _) = GT
+compareTerm (I _) (G _) = LT
+compareTerm (G _) (I _) = GT
+compareTerm (I _) (D _) = LT
+compareTerm (D _) (I _) = GT
+compareTerm (I _) (P _) = LT
+compareTerm (P _) (I _) = GT
+compareTerm (C _) (F _ _) = LT
+compareTerm (F _ _) (C _) = GT
+compareTerm (C _) (G _) = LT
+compareTerm (G _) (C _) = GT
+compareTerm (C _) (D _) = LT
+compareTerm (D _) (C _) = GT
+compareTerm (C _) (P _) = LT
+compareTerm (P _) (C _) = GT
+compareTerm (F _ _) (G _) = LT
+compareTerm (G _) (F _ _) = GT
+compareTerm (F _ _) (D _) = LT
+compareTerm (D _) (F _ _) = GT
+compareTerm (F _ _) (P _) = LT
+compareTerm (P _) (F _ _) = GT
+compareTerm (G _) (D _) = LT
+compareTerm (D _) (G _) = GT
+compareTerm (G _) (P _) = LT
+compareTerm (P _) (G _) = GT
+compareTerm (D _) (P _) = LT
+compareTerm (P _) (D _) = GT
+
+compareTermLists :: [Term] -> [Term] -> Ordering
+compareTermLists [] [] = EQ
+compareTermLists (t : u) (t' : u') =
+    case compareTerm t t' of
+      EQ -> compareTermLists u u'
+      o -> o
+compareTermLists [] _ = LT
+compareTermLists _ [] = GT
+
+instance Ord Term where
+    compare = compareTerm
+
+-- Basic terms are introduced by defining a function used to decide if
+-- a term is well-formed.  The context of an occurrence of an identifier
+-- determines its sort.  A term that contains just an identifier and its
+-- sort information is called a variable.  The sort of a variable is
+-- one of mesg, text, data, name, skey, and akey.
+
+-- Terms that represent algebra variables.
+isVar :: Term -> Bool
+isVar (I _) = True           -- Sort: mesg
+isVar (F s [I _]) =
+    -- Sorts: text, data, name, skey, and akey
+    s == Text || s == Data || s == Name || s == Skey || s == Akey || s == Base
+isVar (G t) = isGroupVar t
+isVar _ = False
+
+-- Note that isVar of (D _) is false.
+isNodeVar :: Term -> Bool
+isNodeVar (D _) = True
+isNodeVar _ = False
+
+-- Extract the identifier from a variable
+varId :: Term -> Id
+varId (I x) = x
+varId (F Text [I x]) = x
+varId (F Data [I x]) = x
+varId (F Name [I x]) = x
+varId (F Skey [I x]) = x
+varId (F Akey [I x]) = x
+varId (F Base [I x]) = x
+varId (G t) | isGroupVar t = getGroupVar t
+varId (D x) = x
+varId _ = C.assertError "Algebra.varId: term not a variable with its sort"
+
+isAcquiredVar :: Term -> Bool
+isAcquiredVar (I _) = True
+isAcquiredVar (F Base [I _]) = True
+isAcquiredVar (G x) = isExprVar x
+isAcquiredVar _ = False
+
+-- A list of terms are well-formed if each one has the correct
+-- structure and every occurrence of an identifier in a term has the
+-- same sort.  Variable environments are used to check the sort
+-- condition.  It maps an identifier to a variable that contains the
+-- identifier.
+
+-- termsWellFormed u ensures all terms in u use each identifier at the
+-- same sort, and makes sure every term has the correct structure.
+termsWellFormed :: [Term] -> Bool
+termsWellFormed u =
+    loop emptyVarEnv u
+    where
+      loop _ [] = True
+      loop env (t : u) =
+          case termWellFormed env t of
+            Nothing -> False
+            Just env' -> loop env' u
+
+newtype VarEnv = VarEnv (Map Id Term) deriving Show
+
+emptyVarEnv :: VarEnv
+emptyVarEnv = VarEnv M.empty
+
+-- Check the structure and sort condition.
+
+termWellFormed :: VarEnv -> Term -> Maybe VarEnv
+termWellFormed xts t@(I x) =
+    extendVarEnv xts x t        -- Mesg variable
+termWellFormed xts t@(F Text [I x]) =
+    extendVarEnv xts x t        -- Text variable
+termWellFormed xts t@(F Data [I x]) =
+    extendVarEnv xts x t        -- Data variable
+termWellFormed xts t@(F Name [I x]) =
+    extendVarEnv xts x t        -- Name variable
+termWellFormed xts t@(F Skey [I x]) =
+    extendVarEnv xts x t        -- Symmetric key variable
+termWellFormed xts (F Skey [F Ltk [I x, I y]]) =
+    -- Long term shared symmetric key
+    doubleTermWellFormed xts (F Name [I x]) (F Name [I y])
+termWellFormed xts (F Skey [F Bltk [I x, I y]]) =
+    -- Bidirectional Long term key
+    doubleTermWellFormed xts (F Name [I x]) (F Name [I y])
+termWellFormed xts (F Akey [t]) = -- Asymmetric key terms
+    case t of
+      I x -> extendVarEnv xts x (F Akey [I x])
+      F Invk [I x] -> extendVarEnv xts x (F Akey [I x])
+      F Pubk [I x] -> extendVarEnv xts x (F Name [I x])
+      F Pubk [C _, I x] -> extendVarEnv xts x (F Name [I x])
+      F Invk [F Pubk [I x]] -> extendVarEnv xts x (F Name [I x])
+      F Invk [F Pubk [C _, I x]] -> extendVarEnv xts x (F Name [I x])
+      _ -> Nothing
+termWellFormed xts (F Base [t]) =
+    baseVarEnv xts t
+    where
+      baseVarEnv xts t@(I x) =
+          extendVarEnv xts x (F Base [t])
+      baseVarEnv xts (F Genr []) =
+          Just xts
+      baseVarEnv xts (F Exp [t0, G t1]) =
+          do
+            xts <- baseVarEnv xts t0
+            termWellFormed xts (G t1)
+      baseVarEnv _ _ = Nothing
+termWellFormed xts (G t) =
+    foldM expnVarEnv xts (M.assocs t)
+    where
+      expnVarEnv xts (x, (be, _)) =
+          extendVarEnv xts x (groupVar be x)
+termWellFormed xts (C _) =
+    Just xts                    -- Tags
+termWellFormed xts (F Cat [t0, t1]) =
+    doubleTermWellFormed xts t0 t1  -- Concatenation
+termWellFormed xts (F Enc [t0, t1]) =
+    doubleTermWellFormed xts t0 t1  -- Encryption
+termWellFormed xts (F Hash [t]) =
+    termWellFormed xts t
+termWellFormed _ _ = Nothing
+
+-- Extend when sorts agree
+extendVarEnv :: VarEnv -> Id -> Term -> Maybe VarEnv
+extendVarEnv (VarEnv env) x t =
+    case M.lookup x env of
+      Nothing -> Just $ VarEnv $ M.insert x t env
+      Just t' -> if t == t' then Just (VarEnv env) else Nothing
+
+doubleTermWellFormed :: VarEnv -> Term -> Term -> Maybe VarEnv
+doubleTermWellFormed xts t0 t1 =
+    do
+      xts <- termWellFormed xts t0
+      termWellFormed xts t1
+
+-- Is the sort of the term a base sort?
+isAtom :: Term -> Bool
+isAtom (I _) = False
+isAtom (C _) = False
+isAtom (F s _) =
+    s == Text || s == Data || s == Name || s == Skey || s == Akey
+isAtom (G x) = isBasisVar x
+isAtom (D _) = False
+isAtom (P _) = False
+
+-- Is the term numeric?
+isNum :: Term -> Bool
+isNum (F Base _) = True
+isNum (G _) = True
+isNum _ = False
+
+-- Does a variable occur in a term?
+occursIn :: Term -> Term -> Bool
+occursIn t t' | isVar t =
+  subterm (I $ varId t) t'
+occursIn t _ =
+  error $ "Algebra.occursIn: Bad variable " ++ show t
+
+subterm :: Term -> Term -> Bool
+subterm t t' | t == t' =
+  True
+subterm t (F _ u) =
+  any (subterm t) u
+subterm (I x) (G t') =
+  M.member x t'
+subterm (G t) (G t') | isBasisVar t = -- For constituent
+  M.member (getGroupVar t) t'
+subterm _ _ = False
+
+-- Fold f through a term applying it to each variable in the term.
+foldVars :: (a -> Term -> a) -> a -> Term -> a
+foldVars f acc t@(I _) = f acc t          -- Mesg variable
+foldVars f acc t@(F Text [I _]) = f acc t -- Text variable
+foldVars f acc t@(F Data [I _]) = f acc t -- Data variable
+foldVars f acc t@(F Name [I _]) = f acc t -- Name variable
+foldVars f acc t@(F Skey [I _]) =
+    f acc t                     -- Symmetric key variable
+foldVars f acc (F Skey [F Ltk [I x, I y]]) =
+    -- Long term shared symmetric key
+    f (f acc (F Name [I x])) (F Name [I y])
+foldVars f acc (F Skey [F Bltk [I x, I y]]) =
+    -- Bidirectional Long term shared symmetric key
+    f (f acc (F Name [I x])) (F Name [I y])
+foldVars f acc t@(F Akey [I _]) = f acc t -- Asymmetric keys
+foldVars f acc (F Akey [F Invk [I x]]) = f acc (F Akey [I x])
+foldVars f acc (F Akey [F Pubk [I x]]) = f acc (F Name [I x])
+foldVars f acc (F Akey [F Pubk [C _, I x]]) = f acc (F Name [I x])
+foldVars f acc (F Akey [F Invk [F Pubk [I x]]]) = f acc (F Name [I x])
+foldVars f acc (F Akey [F Invk [F Pubk [C _, I x]]]) = f acc (F Name [I x])
+foldVars f acc (F Base [t]) =
+    baseAddVars acc t
+    where
+      baseAddVars acc t@(I _) =
+          f acc (F Base [t])
+      baseAddVars acc (F Genr []) =
+          acc
+      baseAddVars acc (F Exp [t0, G t1]) =
+          foldVars f (baseAddVars acc t0) (G t1)
+      baseAddVars _ _ = C.assertError "Algebra.foldVars: Bad term"
+foldVars f acc (G t) =
+    M.foldlWithKey expnAddVars acc t
+    where
+      expnAddVars acc x (be, _) =
+          f acc (groupVar be x)
+foldVars _ acc (C _) = acc        -- Tags
+foldVars f acc (F Cat [t0, t1]) = -- Concatenation
+    foldVars f (foldVars f acc t0) t1
+foldVars f acc (F Enc [t0, t1]) = -- Encryption
+    foldVars f (foldVars f acc t0) t1
+foldVars f acc (F Hash [t])     = -- Hashing
+    foldVars f acc t
+foldVars f acc t@(D _) = f acc t          -- Node variable
+foldVars _ _ t = error $ "Algebra.foldVars: Bad term " ++ show t
+
+-- Fold f through a term applying it to each term that is carried by the term.
+foldCarriedTerms :: (a -> Term -> a) -> a -> Term -> a
+foldCarriedTerms f acc t@(F Cat [t0, t1]) = -- Concatenation
+    foldCarriedTerms f (foldCarriedTerms f (f acc t) t0) t1
+foldCarriedTerms f acc t@(F Enc [t0, _]) = -- Encryption
+    foldCarriedTerms f (f acc t) t0
+--foldCarriedTerms f acc t@(F Base [F Exp [_, t1]]) = -- Exponents
+--    f (f acc t) t1
+foldCarriedTerms f acc t = f acc t     -- atoms and tags
+
+-- Is a term carried by another term?
+carriedBy :: Term -> Term -> Bool
+carriedBy t t' =
+    t == t' ||
+      case t' of
+        F Cat [t0, t1] -> carriedBy t t0 || carriedBy t t1
+        F Enc [t0, _] -> carriedBy t t0
+        _ -> False
+
+-- Is a term relevant to t held by another term t'?
+relevantCarriedBy :: Set Term -> Term -> Term -> Bool
+relevantCarriedBy avoid t t' =
+    relevant avoid t t' ||
+      case t' of
+        F Cat [t0, t1] -> relevantCarriedBy avoid t t0 || relevantCarriedBy avoid t t1
+        F Enc [t0, _] -> relevantCarriedBy avoid t t0
+        _ -> False
+
+-- Is atom a constituent of a term?  In other words, is atom among
+-- the set of atoms required to construct the term?
+constituent :: Term -> Term -> Bool
+constituent t t' | isAtom t =
+  subterm t t'
+constituent t _ =
+  error $ "Algebra.constituent: Bad atom " ++ show t
+
+-- The key used to decrypt an encrypted term, otherwise Nothing.
+decryptionKey :: Term -> Maybe Term
+decryptionKey (F Enc [_, t]) = Just (inv t)
+decryptionKey _ = Nothing
+
+buildable :: Set Term -> Set Term -> Term -> Bool
+buildable knowns unguessable term =
+    ba term
+    where
+      ba (I _) = True           -- A mesg sorted variable is always buildable
+--      ba (F Genr _) = True      -- as is the generator
+      ba (C _) = True           -- So is a tag
+      ba (F Cat [t0, t1]) =
+          ba t0 && ba t1
+      ba t@(F Enc [t0, t1]) =
+          S.member t knowns || ba t0 && ba t1
+      ba t@(F Hash [t1]) =
+          S.member t knowns || ba t1
+      ba t@(F Base _) = bb t
+      ba t = isAtom t && not (S.member t unguessable)
+      -- Buildable base term
+      bb (F Base [I _]) = True           -- A variable of sort base is always buildable
+      bb (F Base [F Genr _]) = True     -- and so is the generator
+      bb t@(F Base [F Exp [t0, G t1]]) =
+        any (\t2 -> (getBase t2 == t0) && relevant unguessable t2 t)
+           (S.toList knowns) || bb (F Base [t0]) && be t1
+      bb (_) = False
+      -- Buildable exponent
+      be exp =
+        all (flip notElem ids) $ M.keys exp
+      -- Exponent variables with origination assumptions
+      ids = getExpnOrigAssumptions unguessable
+      -- Known exponent without non-known variables
+      -- kns = map (stripExpn ids) (getExpns knowns)
+
+getExpnOrigAssumptions :: Set Term -> [Id]
+getExpnOrigAssumptions terms =
+    concatMap f $ S.elems terms
+    where
+      f (G t) = M.keys t        -- This is an approximation
+      f _ = []
+
+{--
+stripExpn :: [Id] -> Group -> Group
+stripExpn ids grp =
+    foldl f grp $ M.keys grp
+    where
+      f grp key
+          | notElem key ids = M.delete key grp
+          | otherwise = grp
+
+getExpns :: Set Term -> [Group]
+getExpns terms =
+    foldl f [M.empty] $ S.elems terms
+    where
+      f a (G t) = t:a
+      f a _ = a
+
+termGen :: Group -> Gen
+termGen t =
+    Gen (1 + maxl (map idInt (M.keys t)))
+    where
+      idInt (Id (i, _)) = i
+      maxl [] = 0
+      maxl xs = maximum xs
+
+instOf :: Group -> Group -> Bool
+instOf grp pat =
+    maybe False (const True) (match (G pat) (G grp) (gen, emptyEnv))
+    where
+      gen = mash (termGen grp) (termGen pat)
+--}
+
+-- Penetrator derivable predicate and checking for unrealized skeletons.
+
+derivable :: Set Term -> Set Term -> Term -> Bool
+derivable avoid sent term =
+    let (knowns, unknowns) = decompose sent avoid in
+    buildable knowns unknowns term
+
+-- Compute the decomposition given some known terms and some unguessable
+-- atoms.  The code is quite tricky.  It iterates until the known
+-- terms don't change.  The known terms ends up with all the
+-- encryptions that are known.
+decompose :: Set Term -> Set Term -> (Set Term, Set Term)
+decompose knowns unguessable =
+    loop unguessable knowns S.empty []
+    where
+      loop unguessable knowns old []
+          | old == knowns = (knowns, unguessable) -- Done
+          | otherwise = loop unguessable knowns knowns (S.elems knowns)
+      loop unguessable knowns old (t@(F Cat _) : todo) =
+          loop unguessable (decat t (S.delete t knowns)) old todo
+      loop unguessable knowns old ((F Enc [t0, t1]) : todo)
+          | buildable knowns unguessable (inv t1) = -- Add plaintext
+              loop unguessable (decat t0 knowns) old todo
+          | otherwise = loop unguessable knowns old todo
+      loop unguessable knowns old ((F Hash [_]) : todo) =
+          loop unguessable knowns old todo -- Hash can't be decomposed
+      -- New case here: don't delete exponentiated values
+      loop unguessable knowns old (F Base [F Exp [_, _]] : todo) =
+          loop unguessable knowns old todo
+      --  New case here: don't delete exponents that
+      -- aren't in unguessable
+      loop unguessable knowns old (t@(G _) : todo)
+          | S.notMember t unguessable =
+              loop unguessable knowns old todo
+      loop unguessable knowns old (t : todo) =
+          loop (S.delete t unguessable) (S.delete t knowns) old todo
+      -- Decat
+      decat (F Cat [t0, t1]) s = decat t1 (decat t0 s)
+      decat t s = S.insert t s
+
+-- Inverts an asymmetric key
+inv :: Term -> Term
+inv (F Akey [F Invk [t]]) = F Akey [t]
+inv (F Akey [t]) = F Akey [F Invk [t]]
+inv (I _) = error "Algebra.inv: Cannot invert a variable of sort mesg"
+inv t = t
+
+-- Extracts every encryption that is carried by a term along with its
+-- encryption key.
+encryptions :: Term -> [(Term, [Term])]
+encryptions t =
+    reverse $ loop t []
+    where
+      loop (F Cat [t, t']) acc =
+          loop t' (loop t acc)
+      loop t@(F Enc [t', t'']) acc =
+          loop t' (adjoin (t, [t'']) acc)
+      loop t@(F Hash [t']) acc =
+          adjoin (t, [t']) acc
+--      loop t@(F Base [F Exp [_, t'']]) acc =
+--          adjoin (t, [t'']) acc
+      loop _ acc = acc
+      adjoin x xs
+          | x `elem` xs = xs
+          | otherwise = x : xs
+
+-- Put a base expression in the form g, g^e, or b or b^e where b is a variable.
+expCollapse :: Term -> Term
+expCollapse (F Base [F Genr ts]) = F Base [F Genr ts]
+-- expCollapse (F Genr _) = F Base [F Genr []]
+expCollapse (F Base [F Exp [F Exp [b, G e0], G e1]]) =
+  case expCollapse (F Base [F Exp [b, G e0]]) of
+    F Base [F Exp [b', G e0']] -> F Base [F Exp [b', G (mul e0' e1)]]
+    _ -> error ("Algebra.hs: expCollapse returned non-base element")
+expCollapse (F Base [F Exp [b, G e]]) = F Base [F Exp [b, G e]]
+expCollapse (F Base [I t]) = F Base [I t]
+expCollapse _ = error ("Algebra.hs: expCollapse called on non-base element")
+
+getBase :: Term -> Term
+getBase (F Base [(F Genr _)]) = F Base [F Genr []]
+getBase t@(F Base _) =
+  case expCollapse t of
+    F Base [F Exp [b, _]] -> b
+    _ -> t  -- If not exponentiated, the term is the base.
+getBase t = t
+
+relevant :: Set Term -> Term -> Term -> Bool
+relevant avoid t1@(F Base _) t2@(F Base _) =
+    i1 == i2
+    where
+      i1 = indicator avoid t1
+      i2 = indicator avoid t2 -- compare indicators.
+relevant _ t1 t2 = t1 == t2
+
+-- Extract the exponent of the term restricted to its map on exponent
+-- variables in avoid.
+indicator :: Set Term -> Term -> Group
+indicator avoid t@(F Base _) =
+  case expCollapse t of
+    F Base [F Genr _] -> M.empty
+    F Base [I _] -> M.empty
+    F Base [F Exp [_, G m]] -> M.intersection m indicatorBasis
+    _ -> error ("Algebra.hs: expCollapse returned non-base element")
+  where
+    numAvoid = S.map extrExpn $ S.filter isExpn avoid
+    isExpn (G g) = isBasisVar g
+    isExpn _ = False
+    extrExpn (G t) = t
+    extrExpn _ = error ("Algebra.hs: extrExpn called on a non-exponent")
+    indicatorBasis = S.fold mul M.empty numAvoid
+indicator _ t = error ("Algebra.hs: indicator called on a non-base " ++ show t)
+
+-- Returns the encryptions that carry something relevant to the target.
+-- If something relevant to the target is carried outside all encryptions,
+-- or is exposed because a decription key is derivable, Nothing is returned.
+protectors :: Set Term -> Set Term -> Term -> Term -> Maybe [Term]
+protectors avoid sent target source =
+--  z ("protectors", avoid, sent, target, source) $
+    do
+      ts <- bare source S.empty
+      return $ S.elems ts
+    where
+      bare source acc
+          | source == target = Nothing
+          | relevant avoid source target =
+            case (getBase source == getBase target) of
+                 True -> Nothing
+                 False -> Just (S.insert source acc)
+      bare (F Cat [t, t']) acc =
+          maybe Nothing (bare t') (bare t acc)
+      bare t@(F Enc [t', key]) acc =
+          if relevantCarriedBy avoid target t' then
+              if (derivable avoid sent) (inv key) then
+                  bare t' acc
+              else
+                  Just (S.insert t acc)
+          else
+              Just acc
+      bare t acc =
+        if relevant avoid target t then
+          Just (S.insert t acc)
+        else
+          Just acc
+
+instance C.Term Term where
+    derivable = derivable
+    isNum = isNum
+    isVar = isVar
+    isAcquiredVar = isAcquiredVar
+    forceVar = forceVar
+    subNums = subNums
+    indicator = calcIndicator
+    isAtom = isAtom
+    isNodeVar = isNodeVar
+    termsWellFormed = termsWellFormed
+    occursIn = occursIn
+    foldVars = foldVars
+    foldCarriedTerms = foldCarriedTerms
+    carriedBy = carriedBy
+    constituent = constituent
+    decryptionKey = decryptionKey
+    decompose = decompose
+    buildable = buildable
+    encryptions = encryptions
+    protectors = protectors
+    loadTerm = loadTerm
+
+-- Places
+
+-- A place names a one subterm within a term.  It is a list of
+-- integers giving a path through a term to that named subterm.  Each
+-- integer in the list identifies the subterm in a function
+-- application on the path to the named subterm.  The integer is the
+-- index of the subterm in the application's list of terms.
+
+-- The places and replace code fail to find the variable
+-- (F Akey [I x]) in (F Akey [Invk [I x]]).
+
+newtype Place = Place [Int] deriving (Show, Eq)
+
+-- Returns the places a variable occurs within a term.
+places :: Term -> Term -> [Place]
+places var source =
+    f [] [] source
+    where
+      f paths path source
+          | var == source = Place (reverse path) : paths
+      f paths path (F _ u) =
+          g paths path 0 u
+      f paths path (G t) =
+          groupPlaces (varId var) paths path 0 (linearize t)
+      f paths _ _ = paths
+      g paths _ _ [] = paths
+      g paths path i (t : u) =
+          g (f paths (i: path) t) path (i + 1) u
+
+linearize :: Group -> [Id]
+linearize t =
+    do
+      (x, (_, n)) <- M.assocs t
+      replicate (if n >= 0 then n else negate n) x
+
+groupPlaces ::  Id -> [Place] -> [Int] -> Int -> [Id] -> [Place]
+groupPlaces _ paths _ _ [] = paths
+groupPlaces x paths path i (y:ys) =
+    let paths' = if x == y then
+                     Place (reverse (i : path)) : paths
+                 else paths in
+    groupPlaces x paths' path (i + 1) ys
+
+-- Returns the places a term is carried by another term.
+carriedPlaces :: Term -> Term -> [Place]
+carriedPlaces target source =
+    f [] [] source
+    where
+      f paths path source
+          | target == source = Place (reverse path) : paths
+      f paths path (F Cat [t, t']) =
+          f (f paths  (0 : path) t) (1 : path) t'
+      f paths path (F Enc [t, _]) =
+          f paths (0 : path) t
+--      f paths path (F Base [F Exp [_, t]]) =
+--        f paths (1 : 0 : path) t
+      f paths _ _ = paths
+
+-- Returns the places a term is carried by another term.
+carriedRelPlaces :: Term -> Term -> Set Term -> [Place]
+carriedRelPlaces target source avoid =
+    f [] [] source
+    where
+      f paths path source
+          | relevant avoid source target = Place (reverse path) : paths
+      f paths path (F Cat [t, t']) =
+          f (f paths  (0 : path) t) (1 : path) t'
+      f paths path (F Enc [t, _]) =
+          f paths (0 : path) t
+--      f paths path (F Base [F Exp [_, t]]) =
+--        f paths (1 : 0 : path) t
+      f paths _ _ = paths
+
+-- Replace a variable within a term at a given place.
+replace :: Term -> Place -> Term -> Term
+replace var (Place ints) source =
+    loop ints source
+    where
+      loop [] _ = var
+      loop (i : path) (F s u) =
+          F s (C.replaceNth (loop path (u !! i)) i u)
+      loop _ _ = C.assertError "Algebra.replace: Bad path to term"
+
+factors :: Group -> [(Id, (Bool, Int))]
+factors t =
+    do
+      (x, (be, n)) <- M.assocs t
+      case n >= 0 of
+        True -> replicate n (x, (be, 1))
+        False -> replicate (negate n) (x, (be, -1))
+
+-- Return the ancestors of the term at the given place.
+ancestors :: Term -> Place -> [Term]
+ancestors source (Place ints) =
+    loop [] ints source
+    where
+      loop ts [] _ = ts
+      loop ts (i: path) t@(F _ u) =
+          loop (t : ts) path (u !! i)
+      loop ts [_] t@(G _) = t : ts
+      loop _ _ _ = C.assertError "Algebra.ancestors: Bad path to term"
+
+prefix :: Place -> Place -> Bool
+prefix (Place l) (Place l') = L.isPrefixOf l l'
+
+strip :: Place -> Place -> Maybe Place
+strip (Place l) (Place l') =
+  loop l l'
+  where
+    loop [] l' = Just $ Place l'
+    loop (i : l) (i' : l') | i == i' = loop l l'
+    loop _ _ = Nothing
+
+instance C.Place Term Place where
+    places = places
+    carriedPlaces = carriedPlaces
+    carriedRelPlaces = carriedRelPlaces
+    replace = replace
+    ancestors = ancestors
+    placeIsPrefixOf = prefix
+    placeStripPrefix = strip
+
+-- Genericize: transform h^e -> (h^e)^e' where e' is a cloned
+-- variable, cloned off the first variable in e.
+genericize :: Gen -> Term -> (Gen, Term)
+genericize gen (F Base [F Exp [base, G grp]]) =
+  (gen', F Base [F Exp [base, G (mul grp exp')]])
+  where
+    (gen', gexp') = clone gen (G exp)
+    exp = if (null (M.toList grp)) then
+             C.assertError "Algebra.genericize: Something odd happened"
+          else
+            M.fromList [let (x, (_,n)) = head (M.toList grp) in
+                         (x, (False,n))]
+    exp' = case gexp' of
+      G x -> x
+      _ -> C.assertError "Algebra.genericize: Something odd happened"
+genericize g t = (g, t)
+
+{-
+genericVersion :: Gen -> Term -> (Gen, Term)
+genericVersion gen (F Base [F Exp [F Genr _, G grp]]) =
+  (gen', (F Base [F Exp [I id', G grp]]))
+  where
+    (gen', id') = freshId gen "g"
+genericVersion gen (F Base [F Exp [I id, G grp]]) =
+  (gen', (F Base [F Exp [t', G grp]]))
+  where
+    (gen', t') = clone gen (I id)
+genericVersion gen (F Base [F Exp [F Exp [base, G grp], G grp']]) =
+  genericVersion gen (F Base [F Exp [base, G (mul grp grp')]])
+genericVersion gen t = (gen, t)
+-}
+
+-- Rename the identifiers in a term.  Gen keeps the state of the
+-- renamer.  (Question: should alist be replaced by a Map?)
+clone :: Gen -> Term -> (Gen, Term)
+clone gen t =
+    (gen', t')
+    where
+      (_, gen', t') = cloneTerm ([], gen) t
+      cloneTerm (alist, gen) t =
+          case t of             -- The association list maps
+            I x ->              -- identifiers to identifier.
+                case lookup x alist of
+                  Just y -> (alist, gen, I y)
+                  Nothing ->
+                      let (gen', y) = cloneId gen x in
+                      ((x, y) : alist, gen', I y)
+            C c -> (alist, gen, C c)
+            F sym u ->
+                let (alist', gen', u') =
+                        foldl cloneTermList (alist, gen, []) u in
+                (alist', gen', F sym $ reverse u')
+            G t ->
+                let (alist', gen', ts) =
+                        M.foldlWithKey cloneGroupList (alist, gen, []) t in
+                (alist', gen', G $ group ts)
+            D x ->              -- identifiers to identifier.
+                case lookup x alist of
+                  Just y -> (alist, gen, D y)
+                  Nothing ->
+                      let (gen', y) = cloneId gen x in
+                      ((x, y) : alist, gen', D y)
+            P p -> (alist, gen, P p)
+      cloneTermList (alist, gen, u) t =
+          let (alist', gen', t') = cloneTerm (alist, gen) t in
+          (alist', gen', t' : u)
+      cloneGroupList (alist, gen, ts) x (be, n) =
+          case lookup x alist of
+            Just y -> (alist, gen, (y, (be, n)) : ts)
+            Nothing ->
+                let (gen', y) = cloneId gen x in
+                ((x, y) : alist, gen', (y, (be, n)) : ts)
+
+instance C.Gen Term Gen where
+    origin = origin
+    genericize = genericize
+--    genericVersion = genericVersion
+    clone = clone
+    loadVars = loadVars
+
+-- Functions used in both unification and matching
+
+type IdMap = Map Id Term
+
+emptyIdMap :: IdMap
+emptyIdMap = M.empty
+
+-- Apply a substitution to a term
+idSubst :: IdMap -> Term -> Term
+idSubst _ (F Exp []) = C.assertError "DiffieHellman.Algebra: Bad exponentiation"
+idSubst subst (I x) =
+    M.findWithDefault (I x) x subst
+idSubst _ t@(C _) = t
+idSubst subst (F Invk [t]) =
+    case idSubst subst t of
+      F Invk [t] -> t           -- (invk (invk x)) = x
+      t -> F Invk [t]
+idSubst subst (F Exp [t0, G t1]) =
+    case idSubst subst t0 of    -- (exp (exp g x) y) = (exp g (mul x y))
+      F Exp [t0', G t1'] ->
+          case mul t1' $ groupSubst subst t1 of
+            t2 | M.null t2 -> t0'
+               | otherwise -> F Exp [t0', G t2]
+      t -> expSubst subst t t1
+idSubst subst (F s u) =
+    F s (map (idSubst subst) u)
+idSubst subst (G t) =
+    G $ groupSubst subst t
+idSubst subst (D x) =
+    M.findWithDefault (D x) x subst
+idSubst _ t@(P _) = t
+
+expSubst :: IdMap -> Term -> Group -> Term
+expSubst subst t0 t1 =
+    case groupSubst subst t1 of
+      t1' | M.null t1' -> t0    -- (exp g (one)) = g
+          | otherwise -> F Exp [t0, G t1']
+
+groupSubst :: IdMap -> Group -> Group
+groupSubst subst t =
+    M.foldrWithKey f M.empty t
+    where
+      f x (be, c) t =
+          mul (expg (groupLookup subst be x) c) t
+
+groupLookup :: IdMap -> Bool -> Id -> Group
+groupLookup subst be x =
+    case M.findWithDefault (groupVar be x) x subst of
+      G t -> t
+      w -> error ("Algebra.groupLookup: Bad substitution: " ++
+                  show x ++ " -> " ++ show w)
+
+showMap :: (Show a, Show b) => Map a b -> ShowS
+showMap m =
+    showAssocs (M.assocs m)
+    where
+      showAssocs [] = id
+      showAssocs ((x,y):m) =
+          showString "\n " . shows x . showString " -> " .
+          shows y . showAssocs m
+
+-- Unification and substitution
+
+-- The rewrite rules used are:
+--
+-- (vars (h base) (x y expn))
+--
+-- 1.  ((exp h x) y) ==> (exp h (mul x y))
+-- 2.  (exp h (one)) ==> h
+-- 3.  unify((exp(h, x)), (exp(h, y)), s) ==>
+--         unify(x, y, s)
+-- 4   unify((exp(h, x)), (exp((gen), y)), s) ==>
+--         unify(h, (exp gen (mul y (rec x))), s)
+-- 5.  unify((exp((gen), x)), (exp(h, y)), s) ==>
+--         unify((exp(h, x)), (exp((gen), y)), s)
+
+newtype Subst = Subst IdMap deriving (Eq, Ord)
+
+instance Show Subst where
+    showsPrec _ (Subst s) = showString "Subst (" . showMap s . showChar ')'
+
+emptySubst :: Subst
+emptySubst = Subst emptyIdMap
+
+-- Apply a substitution created by unification
+substitute :: Subst -> Term -> Term
+substitute (Subst s) t =
+    idSubst s t
+
+-- Composition of substitutions
+
+-- substitute (compose s0 s1) t = substitute s0 (substitute s1 t)
+
+-- 1. apply s0 to range of s1 to obtain s2;
+-- 2. remove bindings is s0 where domains of s0 and s1 overlap to form s3;
+-- 3. remove trivial bindings from s2 to form s4; and
+-- 4. take the union of s4 and s3.
+
+compose :: Subst -> Subst -> Subst
+compose (Subst s0) (Subst s1) =
+    let s2 = M.map (substitute (Subst s0)) s1        -- Step 1
+        s4 = M.filterWithKey nonTrivialBinding s2 in -- Step 3
+    Subst (M.union s4 s0)       -- Steps 2 and 4, union is left-biased
+
+nonTrivialBinding :: Id -> Term -> Bool
+nonTrivialBinding x (I y) = x /= y
+nonTrivialBinding x t@(G _) = not (t == groupVar True x || t == groupVar False x)
+nonTrivialBinding _ _ = True
+
+-- During unification, variables determined to be equal are collected
+-- into an equivalence class.  Multiple lookups of each variable in
+-- the internal representation of a substitution finds the canonical
+-- representive of the class.  The chase function finds the current
+-- canonical representitive.
+
+-- Get the canonical representative of equivalent identifiers making use
+-- of this algebra's axiom.
+chase :: Subst -> Term -> Term
+chase (Subst s) (I x) =
+    case M.lookup x s of
+      Nothing -> I x
+      Just t -> chase (Subst s) t
+chase (Subst s) (D x) =
+    case M.lookup x s of
+      Nothing -> D x
+      Just t -> chase (Subst s) t
+chase s (F Invk [t]) = chaseInvk s t
+chase s (F Exp [t0, G t1]) = chaseExp s t0 t1
+chase _ t = t
+
+chaseInvk :: Subst -> Term -> Term
+chaseInvk (Subst s) (I x) =
+    case M.lookup x s of
+      Nothing -> F Invk [I x]
+      Just t -> chaseInvk (Subst s) t
+chaseInvk s (F Invk [t]) = chase s t
+chaseInvk _ t = F Invk [t]
+
+chaseExp :: Subst -> Term -> Group -> Term
+chaseExp s t0 t1
+    | M.null t1 = chase s t0
+chaseExp s@(Subst ss) (I x) t1 =
+    case chase s (I x) of
+      F Exp [t0', G t1'] -> -- chaseExp s t0' (mul t1 t1')
+        if M.null t1t1'
+           then t0'
+           else F Exp [t0', G t1t1']
+        where t1t1' = mul t1' (groupSubst ss t1)
+      t0 -> F Exp [t0, chaseGroup s t1]
+chaseExp s (F Exp [t0', G t1']) t1 =
+    chaseExp s t0' (mul t1 t1')
+chaseExp s t0 t1 = F Exp [t0, chaseGroup s t1]
+
+chaseGroup :: Subst -> Group -> Term
+chaseGroup (Subst s) x = G $ groupSubst s x
+
+-- Does x occur in t?
+occurs :: Id -> Term -> Bool
+occurs x (I y) = x == y
+occurs _ (C _) = False
+occurs x (F _ u) = any (occurs x) u
+occurs x (G t) = elem x (M.keys t)
+occurs x (D y) = x == y
+occurs _ (P _) = False
+
+type GenSubst = (Gen, Subst)
+
+unifyChase :: Term -> Term -> GenSubst -> [GenSubst]
+unifyChase t t' (g, s) = unifyTerms (chase s t) (chase s t') (g, s)
+
+unifyTerms :: Term -> Term -> GenSubst -> [GenSubst]
+unifyTerms (I x) (I y) (g, Subst s)
+    | x == y = [(g, Subst s)]
+    | otherwise = [(g, Subst $ M.insert x (I y) s)]
+unifyTerms (I x) t (g, Subst s)
+    | occurs x t = []
+    | otherwise = [(g, Subst $ M.insert x t s)]
+unifyTerms t (I x) s = unifyTerms (I x) t s
+unifyTerms (C c) (C c') s
+    | c == c' = [s]
+    | otherwise = []
+unifyTerms (F Invk [I x]) (F Pubk [I y]) s =
+    unifyTerms (I x) (F Invk [F Pubk [I y]]) s
+unifyTerms (F Invk [I x]) (F Pubk [C c, I y]) s =
+    unifyTerms (I x) (F Invk [F Pubk [C c, I y]]) s
+unifyTerms (F Pubk [I x]) (F Invk [I y]) s =
+    unifyTerms (I y) (F Invk [F Pubk [I x]]) s
+unifyTerms (F Pubk [C c, I x]) (F Invk [I y]) s =
+    unifyTerms (I y) (F Invk [F Pubk [C c, I x]]) s
+unifyTerms (F Bltk u) (F Bltk u') s =
+    L.nub $ unifyTermLists u u' s ++ unifyTermLists u (reverse u') s
+unifyTerms (F Base [t0]) (F Base [t1]) s =
+    unifyBase t0 t1 s
+unifyTerms (F sym u) (F sym' u') s
+    | sym == sym' = unifyTermLists u u' s
+    | otherwise = []
+unifyTerms (G t) (G t') s =
+    unifyGroup t t' s
+unifyTerms (D x) (D y) (g, Subst s)
+    | x == y = [(g, Subst s)]
+    | otherwise = [(g, Subst $ M.insert x (D y) s)]
+unifyTerms (D x) (P p) (g, Subst s) =
+    [(g, Subst $ M.insert x (P p) s)]
+unifyTerms t (D x) s = unifyTerms (D x) t s
+unifyTerms (P p) (P p') s
+    | p == p' = [s]
+    | otherwise = []
+unifyTerms _ _ _ = []
+
+-- unifyBase: the two terms were both encapsulated in F Base [].
+-- feed the appropriate inputs to unifyExp.
+-- Take h to mean h^1 for either base variable h or h = (gen).
+-- Fall back to unify algorithm when left side is F Genr [].
+unifyBase :: Term -> Term -> GenSubst -> [GenSubst]
+unifyBase (F Exp [t0, G t1]) (F Exp [t0', G t1']) gs
+  = unifyExp t0 t1 t0' t1' gs
+unifyBase (F Exp [t0, G t1]) (I x) gs
+  = unifyExp t0 t1 (I x) (M.empty) gs
+unifyBase (F Exp [t0, G t1]) (F Genr []) gs
+  = unifyExp t0 t1 (F Genr []) (M.empty) gs
+unifyBase (I x) (F Exp [t0', G t1']) gs
+  = unifyExp (I x) (M.empty) t0' t1' gs
+unifyBase (I x) (I y) gs
+  = unifyExp (I x) (M.empty) (I y) (M.empty) gs
+unifyBase (I x) (F Genr []) gs
+  = unifyExp (I x) (M.empty) (F Genr []) (M.empty) gs
+unifyBase t0 t1 gs
+  = unifyTerms t0 t1 gs
+
+-- unifyExp: not guaranteed that inputs are not F Exp expressions.
+-- guaranteed that t0 and t0' are (I x), (F Genr _), or (F Exp _).
+-- Both t0 and t0' should not be F Exp, though, as this would indicate a non-canonical form.
+unifyExp :: Term -> Group -> Term -> Group -> GenSubst -> [GenSubst]
+unifyExp (F Exp t0) t1 _ _ _ =
+  error ("Algebra.unifyExp: Got input not in canonical form " ++ show (F Exp t0) ++ show t1)
+unifyExp _ _ (F Exp t0) t1 _ =
+  error ("Algebra.unifyExp: Got input not in canonical form " ++ show (F Exp t0) ++ show t1)
+-- Force into canonical form.
+--unifyExp (F Exp [t0, G e]) t1 t0' t1' gs =
+--  unifyExp t0 (mul e t1) t0' t1' gs
+--unifyExp t0 t1 (F Exp [t0', G e]) t1' gs =
+--  unifyExp t0 t1 t0' (mul e t1') gs
+unifyExp t0 t1 t0' t1' s
+    | t0 == t0' = unifyGroup t1 t1' s
+unifyExp (I x1) t0 (I x2) t1' (g, Subst s) =
+      unifyGroup (mul t0 z) t1' (g', Subst $ M.insert x1 (F Exp [(I x2), G z]) s)
+      where
+        (g', zid) = freshId g "z"
+        z = groupVarGroup zid
+unifyExp (I x) t1 (F Genr []) t1' (g, Subst s)
+    | t1 == t1' =
+        [(g, Subst $ M.insert x (F Genr []) s)]
+    | otherwise =
+        [(g, Subst (M.insert x (F Exp [F Genr [], G $ mul t1' (invert t1)]) s))]
+unifyExp (F Genr []) t1 (I x) t1' s =
+    unifyExp (I x) t1' (F Genr []) t1 s
+unifyExp _ _ _ _ _ = []
+
+unifyTermLists :: [Term] -> [Term] -> GenSubst -> [GenSubst]
+unifyTermLists [] [] s = [s]
+unifyTermLists (t : u) (t' : u') s =
+    do
+      s' <- unifyChase t t' s
+      unifyTermLists u u' s'
+unifyTermLists _ _ _ = []
+
+unifyGroup :: Group -> Group -> GenSubst -> [GenSubst]
+unifyGroup t0 t1 (g, Subst s) =
+    do
+      let t = groupSubst s (mul t0 (invert t1))
+      (_, g', s') <- matchGroup t M.empty S.empty g s
+      return (g', Subst s')
+
+-- The exported unifier converts the internal representation of a
+-- substitution into the external form using chaseMap.
+
+unify :: Term -> Term -> GenSubst -> [GenSubst]
+unify t t' s =
+    do
+      (g, s) <- unifyChase t t' s
+      return (g, chaseMap s)
+
+-- Apply the chasing version of substitution to the range of s.
+
+chaseMap :: Subst -> Subst
+chaseMap (Subst s) =
+    Subst $ M.map (substChase (Subst s)) s
+
+-- A chasing version of substitution.
+
+substChase :: Subst -> Term -> Term
+substChase subst t =
+    case chase subst t of
+      t@(I _) -> t
+      t@(C _) -> t
+      F Invk [t] ->
+          case substChase subst t of
+            F Invk [t] -> t           -- Apply axiom
+            t -> F Invk [t]
+      F Exp [t0, G t1] ->
+          case substChase subst t0 of
+            F Exp [t0', G t1'] ->
+              case mul t1' $ groupChase subst t1 of
+                t2 | M.null t2 -> t0'
+                   | otherwise -> F Exp [t0', G t2]
+            t -> expChase subst t t1
+      F s u ->
+          F s (map (substChase subst) u)
+      G t -> G $ groupChase subst t
+      t@(D _) -> t
+      t@(P _) -> t
+
+expChase :: Subst -> Term -> Group -> Term
+expChase subst t0 t1 =
+    case groupChase subst t1 of
+      t1' | M.null t1' -> t0
+          | otherwise -> F Exp [t0, G t1']
+
+groupChase :: Subst -> Group -> Group
+groupChase (Subst subst) t = groupSubst subst t
+
+destroyer :: Term -> Maybe Subst
+destroyer t@(G m) | isVar t =
+  Just $ Subst (M.fromList [(head $ M.keys m, G M.empty)])
+destroyer _ = Nothing
+
+instance C.Subst Term Gen Subst where
+   emptySubst = emptySubst
+   destroyer = destroyer
+   substitute = substitute
+   unify = unify
+   compose = compose
+
+-- Matching and instantiation
+
+newtype Env = Env (Set Id, IdMap) deriving (Eq, Ord)
+
+instance Show Env where
+    showsPrec _ (Env (v, r)) =
+        showString "Env (\n " . shows v .
+        showChar ',' . showMap r . showChar ')'
+
+-- An environment may contain an explicit identity mapping, whereas a
+-- substitution is erroneous if it has one.  The set of variables
+-- associated with a map is the variables in the range that were
+-- generated by matching and should be treated as variables when using
+-- unification to perform matching.  The other variables in the range
+-- are treated as constants.
+
+-- An environment contains an IdMap and the set of variables
+-- generated while matching.
+
+emptyEnv :: Env
+emptyEnv = Env (S.empty, emptyIdMap)
+
+-- Apply a substitution created my matching
+instantiate :: Env -> Term -> Term
+instantiate (Env (_, r)) t = idSubst r t
+
+-- Matching
+
+type GenEnv = (Gen, Env)
+
+-- The matcher has the property that when pattern P and term T match
+-- then instantiate (match P T emptyEnv) P = T.
+
+-- Important discipline to maintain during match:
+-- Terms are either "source" or "destination / flex" terms, and these two
+-- categories should be kept strictly separate.
+--   the first parameter is a source term.
+--   the second parameter is a destination/flex term.
+--   v is a set of destination/flex IDs.
+--   g is a generator for the destination/flex algebra
+--   variables in the domain of r are source variables
+--   terms in the range of r are destination/flex terms.
+match ::  Term -> Term -> GenEnv -> [GenEnv]
+match (I x) t (g, Env (v, r)) =
+  case M.lookup x r of
+    Nothing -> [(g, Env (v, M.insert x t r))]
+    Just t' -> if t == t' then [(g, Env (v, r))] else []
+match (C c) (C c') ge = if c == c' then [ge] else []
+match (F Base [t0]) (F Base [t1]) ge =
+  matchBase t0 t1 ge
+match (F Bltk u) (F Bltk u') ge =
+  L.nub $ matchLists u u' ge ++ matchLists u (reverse u') ge
+match (F s u) (F s' u') ge
+  | s == s' = matchLists u u' ge
+match (F Invk [t]) t' ge =
+  match t (F Invk [t']) ge
+match (G t) (G t') (g, Env (v, r)) =
+  do
+    (v', g', r') <- matchGroup t t' v g r
+    return (g', Env(v', r'))
+match (D x) t (g, Env (v, r)) =
+  case M.lookup x r of
+    Nothing -> [(g, Env (v, M.insert x t r))]
+    Just t' -> if t == t' then [(g, Env (v, r))] else []
+match (P p) (P p') r = if p == p' then [r] else []
+match _ _ _ = []
+
+-- On input t, outputs (b, e) such that if t is of sort base then
+-- t = b^e and b is a variable or (gen).
+-- If t is not of sort base, outputs (t, 1).
+calcBase :: Term -> (Term, Group)
+calcBase (I x) = ((I x), M.empty)
+calcBase (F Genr _) = (F Genr [], M.empty)
+calcBase (F Exp [(I x), G e]) = ((I x), e)
+calcBase (F Exp [F Genr _, G e]) = (F Genr [], e)
+calcBase (F Exp [F Exp [b, G e1], G e2]) = calcBase (F Exp [b, G $ mul e1 e2])
+-- Well-formed versions.  Is this necessary?
+calcBase (F Base [I x]) = (F Base [I x], M.empty)
+calcBase (F Base [F Genr _]) = (F Base [F Genr []], M.empty)
+calcBase (F Base [F Exp [(I x), G e]]) = (F Base [I x], e)
+calcBase (F Base [F Exp [F Genr _, G e]]) = (F Base [F Genr []], e)
+calcBase (F Base [F Exp [F Exp [b, G e1], G e2]]) = calcBase (F Base [F Exp [b, G $ mul e1 e2]])
+calcBase t = (t, M.empty)
+
+-- matchBase: the two terms were both encapsulated in F Base [].
+-- feed the appropriate inputs to matchExp.
+-- Take h to mean h^1 for either base variable h or h = (gen).
+-- Fall back to match algorithm when left side is F Genr [].
+matchBase :: Term -> Term -> GenEnv -> [GenEnv]
+matchBase (F Exp [t0, G t1]) (F Exp [t0', G t1']) ge
+  = matchExp t0 t1 t0' t1' ge
+matchBase (F Exp [t0, G t1]) (I x) ge
+  = matchExp t0 t1 (I x) (M.empty) ge
+matchBase (F Exp [t0, G t1]) (F Genr []) ge
+  = matchExp t0 t1 (F Genr []) (M.empty) ge
+matchBase (I x) (F Exp [t0', G t1']) ge
+  = matchExp (I x) (M.empty) t0' t1' ge
+matchBase (I x) (I y) ge
+  = matchExp (I x) (M.empty) (I y) (M.empty) ge
+matchBase (I x) (F Genr []) ge
+  = matchExp (I x) (M.empty) (F Genr []) (M.empty) ge
+matchBase t0 t1 ge
+  = match t0 t1 ge
+
+{-
+  case M.lookup x r of
+    Nothing -> match (I x) (F Exp [b,e]) (g, Env (v,r))
+    Just (F Exp [b',e']) -> if (bb == bb') then
+                match (G M.empty) (G (mul ee (invert ee'))) (g, Env (v, r)) else []
+                where
+                  (bb', ee') = calcBase (F Exp [b',e'])
+    Just (I y) -> if ((I y) == bb) then
+                    match (G M.empty) (G ee) (g, Env (v, r)) else []
+    Just _ -> []
+  where
+    (bb, ee) = calcBase t1
+match (F Base [I x]) (F Base [I y]) (g, Env (v, r)) =
+  case M.lookup x r of
+    Nothing -> match (I x) (I y) (g, Env (v,r))
+    Just (F Exp [b',e']) -> if (bb' == (I y)) then
+                match (G M.empty) (G ee') (g, Env (v,r)) else []
+                where
+                  (bb', ee') = calcBase (F Exp [b',e'])
+    Just _ -> match (I x) (I y) (g, Env (v, r))
+-}
+
+-- matchExp: not guaranteed that inputs are not F Exp expressions.
+-- guaranteed that t0 is either an I x or an F Exp [] term.
+-- guaranteed that t0' is I x, F Genr, or F Exp.
+-- in match t0 t1 t0' t1' ge: t0 and t1 are source material, t0', t1' are destination/flex material.
+-- Both t0 and t0' should not be F Exp, though, as this would indicate a non-canonical form.
+matchExp ::  Term -> Group -> Term -> Group -> GenEnv -> [GenEnv]
+matchExp (F Exp [t0, G e]) t1 _ _ _ =
+    error ("Algebra.matchExp: Input not in canonical form" ++ show (F Exp [F Exp [t0, G e], G t1]))
+matchExp _ _ (F Exp [t0, G e]) t1 _ =
+    error ("Algebra.matchExp: Input not in canonical form" ++ show (F Exp [F Exp [t0, G e], G t1]))
+-- Force both inputs into canonical form
+--matchExp (F Exp [t0, G e]) t1 t0' t1' ge =
+--    matchExp t0 (mul e t1) t0' t1' ge
+--matchExp t0 t1 (F Exp [t0', G e]) t1' ge =
+--    matchExp t0 t1 t0' (mul e t1') ge
+matchExp (I x) t1 t0' t1' ge@(g, Env (v, r)) =
+    case M.lookup x r of
+      -- if x is already mapped, it needs to be mapped to a power of the base of t0'
+      Just t  -- t is destination/flex material
+          | fst (calcBase t0') == fst (calcBase t) ->
+            match (G t1) (G (mul t1' (mul (snd $ calcBase t0') (invert (snd $ calcBase t))))) ge
+          | otherwise -> []
+      _ -> matchLists [I x, G t1] [F Exp [t0', G w], G (mul t1' (invert w))]
+           (g', Env (S.insert wid v, r))
+      where
+        (g', wid) = freshId g "w"
+        w = groupVarGroup wid
+matchExp (F Genr []) t1 t0' t1' ge =
+    matchLists [F Genr [], G t1] [t0', G t1'] ge
+matchExp t e t' e' _ = error ("Algebra.matchExp: Bad match term" ++ show t ++ show e ++ show t' ++ show e')
+
+-- in matchLists u u' ge: u is a list of source terms and u' is a list of destination/flex terms.
+matchLists :: [Term] -> [Term] -> GenEnv -> [GenEnv]
+matchLists [] [] ge = [ge]
+matchLists (t : u) (t' : u') ge =
+  do
+    ge' <- match t t' ge
+    matchLists u u' ge'
+matchLists _ _ _ = []
+
+-- Matching in a group
+
+-- t0 is the pattern
+-- t1 is the target term
+-- v is the set of previously freshly generated variables
+-- g is the generator
+
+-- Returns complete set of unifiers.  Each unifier include the set of
+-- variables fresh generated and a generator.
+
+matchGroup ::  Group -> Group -> Set Id -> Gen ->
+               IdMap -> [(Set Id, Gen, IdMap)]
+matchGroup t0 t1 v g r =
+  let (t0', t1') = merge t0 t1 r       -- Apply subst to LHS
+      (v', g', r') = genVars v g t0' r -- Gen vars for non-fresh vars
+      d = mkInitMatchDecis t1' in      -- Ensure expns on RHS stay distinct
+  case partition (groupSubst r' t0') t1' v' of
+    ([], []) -> return (v', g', r')
+    ([], t) -> constSolve t v' g' r' d -- No variables of sort expr here
+    (t0, t1) -> solve t0 t1 v' g' r' d
+
+-- Apply subst to LHS and add results to RHS
+merge ::  Group -> Group -> IdMap -> (Group, Group)
+merge t t' r =
+    (group t0, t0')
+    where
+      (t0, t0') = loop (M.assocs t) ([], t')
+      loop [] acc = acc
+      loop (p@(x, (_, c)) : t0) (t1, t1') =
+          case M.lookup x r of
+            Nothing -> loop t0 (p : t1, t1')
+            Just (G t) ->
+                loop t0 (t1, mul (expg t (negate c)) t1')
+            Just t ->
+                error $ "Algebra.merge: expecting an expn but got " ++ show t
+
+-- Generate vars for each non-fleshly generated vars
+genVars :: Set Id -> Gen -> Group -> IdMap -> (Set Id, Gen, IdMap)
+genVars v g t r =
+  M.foldlWithKey genVar (v, g, r) t
+  where
+    genVar (v, g, r) x (be, _) =
+      (S.insert x' v, g', M.insert x (groupVar be x') r)
+      where
+        (g', x') = cloneId g x
+
+-- A set of decisions records expn variables that have been identified
+-- and those that are distinct.
+data Decision t = Decision
+  { same :: [(t, t)],
+    dist :: [(t, t)] }
+  deriving Show
+
+-- Create an initial set of decisions
+mkDecis :: Decision Id
+mkDecis =
+  Decision {
+    same = [],
+    dist = [] }
+
+-- Ensure bases elements in t are never identified
+mkInitMatchDecis :: Group -> Decision Id
+mkInitMatchDecis t =
+  mkDecis { dist = [(x, y) | x <- v, y <- v, x /= y] }
+  where
+    v = [x | (x, (be, _)) <- M.assocs t, be]
+
+-- Move fresh variables on the RHS of the equation to the LHS
+-- Move variables of sort expn on the LHS to the RHS
+partition ::  Group -> Group -> Set Id -> ([Maplet], [Maplet])
+partition t0 t1 v =
+  (M.assocs lhs, M.assocs rhs)
+  where
+    (v1, c1) = M.partitionWithKey g t1 -- Fresh variables go in v1
+    g x _ = S.member x v
+    (v0, c0) = M.partition f t0        -- Basis elements go in c0
+    f (be, _) = not be
+    lhs = mul v0 (invert v1)
+    rhs = mul c1 (invert c0)
+
+-- Solve equation when there are no variables of sort expr on LHS.
+-- Treat all variables as constants.
+constSolve :: [Maplet] -> Set Id -> Gen -> IdMap ->
+              Decision Id -> [(Set Id, Gen, IdMap)]
+constSolve t v g r d
+  | any (\(_, (be, _)) -> not be) t = [] -- Fail expr var is on RHS
+  | otherwise = constSolve1 t v g r d    -- All vars are expn
+
+constSolve1 :: [Maplet] -> Set Id -> Gen ->
+               IdMap -> Decision Id -> [(Set Id, Gen, IdMap)]
+constSolve1 [] v g r _ = return (v, g, r)
+constSolve1 t v g r d =
+  case orientDecis v $ nextDecis d t of
+    [] -> []                    -- All decisions already made
+    ((x, y):_) ->               -- Pick first undecided pair
+      distinct ++ identified
+      where
+        distinct = constSolve1 t v g r neq
+        neq = d {dist = (x, y):(y, x):dist d} -- Add new constraints
+        -- eliminate x
+        identified = constSolve1 t' v' g r' d'
+        t' = identify x y t     -- Equate x y in t
+        v' = S.delete x v       -- Eliminate x in v
+        r' = eliminate x y' r   -- And in r
+        y' = groupVar True y
+        d' = d {same = (x, y):same d} -- And note decision
+
+-- Find a pair of variables for which no decision has been made.
+nextDecis :: Decision Id -> [Maplet] -> [(Id, Id)]
+nextDecis d t =
+  [(x, y) | x <- vars, y <- vars, x < y,
+    not $ decided d x y]
+  where
+    vars = foldr f [] t
+    f (x, (True, _)) v = x:v
+    f (_, (False, _)) v = v
+    decided d x y =             -- Is x and y decided?
+      u == v ||
+      any f (dist d)
+      where
+        u = chase x       -- Find canonical representitive for x and y
+        v = chase y
+        f (w, z) = chase w == u && chase z == v
+        chase = listChase (same d)
+
+-- Find canonical representive of the set of identified variables.
+listChase :: Eq t => [(t, t)] -> t -> t
+listChase d x =
+  case lookup x d of
+    Nothing -> x
+    Just y -> listChase d y
+
+-- Ensure first var in pair is in v.
+orientDecis :: Set Id -> [(Id, Id)] -> [(Id, Id)]
+orientDecis v undecided =
+  map f undecided
+  where
+    f (x, y)
+      | S.notMember x v = (y, x)
+      | otherwise = (x, y)
+
+-- Modify t by replacing x by y.
+identify :: Id -> Id -> [Maplet] -> [Maplet]
+identify x y t =
+  case lookup x t of
+    Nothing -> error ("Algebra.identify: bad lookup of " ++ show x
+                      ++ " in " ++ show t)
+    Just (_, c) ->
+      filter f (map g t)
+      where
+        f (z, (_, c)) = z /= x && c /= 0
+        g m@(z, (be, d))
+          | z == y = (z, (be, c + d))
+          | otherwise = m
+
+-- Solve when variables of sort expr are on LHS.  This involves
+-- solving using the group axioms.  The algorithm for matching in the
+-- group without added constant symbols is the same as the one for
+-- unification with constant symbols.
+--
+-- For this description, additive notation is used for the group.  To
+-- show sums, we write
+--
+--     sum[i] c[i]*x[i] for c[0]*x[0] + c[1]*x[1] + ... + c[n-1]*x[n-1].
+--
+-- The unification problem is to solve
+--
+--     sum[i] c[i]*x[i] = sum[j] d[j]*y[j]
+--
+-- where x[i] is a variable and y[j] is a constant symbol.
+--
+-- The algorithm used to find solutions is described in Vol. 2 of The
+-- Art of Computer Programming / Seminumerical Alorithms, 2nd Ed.,
+-- 1981, by Donald E. Knuth, pg. 327.
+--
+-- The algorithm's initial values are the linear equation (c,d) and an
+-- empty substitution s.
+--
+-- 1.  Let c[i] be the smallest non-zero coefficient in absolute value.
+--
+-- 2.  If c[i] < 0, multiply c and d by -1 and goto step 1.
+--
+-- 3.  If c[i] = 1, a general solution of the following form has been
+-- found:
+--
+--       x[i] = sum[j] -c'[j]*x[j] + d[k] for all k
+--
+--  where c' is c with c'[i] = 0.  Use the equation to eliminate x[i]
+--  from the range of the current substitution s.  If variable x[i] is
+--  in the original equation, add the mapping to substitution s.
+--
+-- 4.  If c[i] divides every coefficient in c,
+--
+--     * if c[i] divides every constant in d, divide c and d by c[i]
+--       and goto step 3,
+--
+--     * otherwise fail because there is no solution.  In this case
+--       expn vars must be identified.
+--
+-- 5.  Otherwise, eliminate x[i] as above in favor of freshly created
+-- variable x[n], where n is the length of c.
+--
+--      x[n] = sum[j] (c[j] div c[i] * x[j])
+--
+-- Goto step 1 and solve the equation:
+--
+--      c[i]*x[n] + sum[j] (c[j] mod c[i])*x[j] = d[k] for all k
+
+solve ::  [Maplet] -> [Maplet] -> Set Id -> Gen ->
+          IdMap -> Decision Id -> [(Set Id, Gen, IdMap)]
+solve t0 t1 v g r d =
+  let (x, ci, i) = smallest t0 in -- ci is the smallest coefficient,
+  case compare ci 0 of            -- x is its variable, i its position
+    GT -> agSolve x ci i t0 t1 v g r d
+    LT -> agSolve x (-ci) i (mInverse t0) (mInverse t1) v g r d -- Step 2
+    EQ -> C.assertError "Algebra.solve: zero coefficient found"
+
+-- Find the factor with smallest coefficient in absolute value.
+-- Returns the variable, the coefficient, and the position within the
+-- list.
+smallest :: [Maplet] -> (Id, Int, Int)
+smallest [] = C.assertError "Algebra.smallest given an empty list"
+smallest t =
+  loop (Id (0, "x")) 0 0 0 0 t
+  where
+    loop v ci i _ _ [] = (v, ci, i)
+    loop v ci i a j ((x, (_, c)):t) =
+      if a < abs c then
+        loop x c j (abs c) (j + 1) t
+      else
+        loop v ci i a (j + 1) t
+
+-- The group axioms are abbreviated by AG.
+agSolve :: Id -> Int -> Int -> [Maplet] -> [Maplet] -> Set Id -> Gen ->
+          IdMap -> Decision Id -> [(Set Id, Gen, IdMap)]
+agSolve x 1 i t0 t1 v g r _ =    -- Solve for x and return answer
+  return (S.delete x v, g, eliminate x t r) -- Step 3
+  where
+    t = G $ group (t1 ++ (mInverse (omit i t0)))
+agSolve x ci i t0 t1 v g r d
+  | divisible ci t0 =           -- Step 4
+    if divisible ci t1 then     -- Solution found
+      agSolve x 1 i (divide ci t0) (divide ci t1) v g r d
+    else         -- No possible solution without identifying variables
+      identSolve x ci i t0 t1 v g r d
+  | otherwise =                 -- Step 5, eliminate x in favor of x'
+      solve t0' t1 (S.insert x' $ S.delete x v) g' r' d
+      where
+        (g', x') = cloneId g x
+        t = G $ group ((x', (False, 1)) :
+                       mInverse (divide ci (omit i t0)))
+        r' = eliminate x t r
+        t0' = (x', (False, ci)) : modulo ci (omit i t0)
+
+eliminate :: Id -> Term -> IdMap -> IdMap
+eliminate x t r =
+  M.map (idSubst (M.singleton x t)) r
+
+omit :: Int -> [a] -> [a]
+omit 0 (_:l) = l
+omit n _ | n < 0 = C.assertError "Algebra.omit: negative number given to omit"
+omit n (_:l) = omit (n - 1) l
+omit _ [] = C.assertError "Algebra.omit: number given to omit too large"
+
+divisible :: Int -> [Maplet] -> Bool
+divisible ci t =
+  all (\(_, (_, c)) -> mod c ci == 0) t
+
+divide :: Int -> [Maplet] -> [Maplet]
+divide ci t = map (mMapCoef $ flip div ci) t
+
+modulo :: Int -> [Maplet] -> [Maplet]
+modulo ci t =
+  [(x, (be, c')) |
+   (x, (be, c)) <- t,
+   let c' = mod c ci,
+   c' /= 0]
+
+-- Explore two choices as to whether to identify a pair of variables.
+identSolve :: Id -> Int -> Int -> [Maplet] -> [Maplet] -> Set Id -> Gen ->
+              IdMap -> Decision Id -> [(Set Id, Gen, IdMap)]
+identSolve z ci i t0 t1 v g r d =
+  case orientDecis v $ nextDecis d t1 of
+    [] -> []
+    ((x, y):_) ->
+      distinct ++ identified
+      where
+        distinct = identSolve z ci i t0 t1 v g r neq
+        neq = d {dist = (x, y):(y, x):dist d}
+        -- eliminate x
+        identified = agSolve z ci i t0 t1' v' g r' d'
+        t1' = identify x y t1   -- Equate x y in t1
+        v' = S.delete x v       -- Eliminate x in v
+        r' = eliminate x y' r   -- And in r
+        y' = groupVar True y
+        d' = d {same = (x, y):same d}
+
+-- Does every varible in ts not occur in the domain of e?
+-- Trivial bindings in e are ignored.
+identityEnvFor :: GenEnv -> [Term] -> Maybe GenEnv
+identityEnvFor ge ts =
+    let env@(_, Env (_, r)) = nonTrivialEnv ge in
+    if all (allId $ flip S.notMember $ M.keysSet r) ts then
+        Just env
+    else
+        Nothing
+
+allId :: (Id -> Bool) -> Term -> Bool
+allId f (I x) = f x
+allId _ (C _) = True
+allId f (F _ u) = all (allId f) u
+allId f (G t) = all f (M.keys t)
+allId f (D x) = f x
+allId _ (P _) = True
+
+-- Eliminate all trivial bindings so that an environment can be used
+-- as a substitution.
+nonTrivialEnv :: GenEnv -> GenEnv
+nonTrivialEnv (g, Env (v, r)) =
+  (g, Env (v, M.filterWithKey nonTrivialBinding r))
+
+{-
+nonTrivialEnv :: GenEnv -> GenEnv
+nonTrivialEnv (g, Env (v, r)) =
+    nonGroupEnv (M.assocs r) M.empty []
+    where
+      nonGroupEnv [] env grp =
+          groupEnv g v env grp grp
+      nonGroupEnv ((x, I y):r) env grp
+          | x == y = nonGroupEnv r env grp
+      nonGroupEnv ((x, G y):r) env grp
+          | isGroupVar y && varId (G y) == x =
+              nonGroupEnv r env grp
+          | otherwise = nonGroupEnv r env ((x, y):grp)
+      nonGroupEnv ((x, y):r) env grp = nonGroupEnv r (M.insert x y env) grp
+
+groupEnv :: Gen -> Set Id -> IdMap -> [(Id, Group)] -> [(Id, Group)] -> GenEnv
+groupEnv g v env grp [] =
+    (g, Env (v, foldl (\env (x, y) -> M.insert x (G y) env) env grp))
+groupEnv g v env grp ((x, t):map)
+    | M.lookup x t /= Just 1 = groupEnv g v env grp map
+    | otherwise =
+        let (t0, t1) = partition M.empty (mul t (M.singleton x (-1))) v in
+        case matchGroup (group t0) (group t1) S.empty g of
+          Nothing -> groupEnv g v env grp map
+          Just (v', g', subst, _) ->
+              let grp' = L.delete (x, t) grp
+                  grp'' = L.map (\(x, t) -> (x, groupSubst subst t)) grp' in
+              groupEnv g' (S.union v' v) env grp'' grp''
+-}
+
+-- Cast an environment into a substitution by filtering out trivial
+-- bindings.
+
+substitution :: Env -> Subst
+substitution (Env (_, r)) =
+    Subst $ M.filterWithKey nonTrivialBinding r
+
+-- Add type information to an environment, and return it as a list of
+-- associations.
+
+reify :: [Term] -> Env -> [(Term, Term)]
+reify domain (Env (_, env)) =
+    map (loop domain) $ M.assocs env
+    where
+      loop [] (x, _) =
+          error $ "Algebra.reify: variable missing from domain " ++ idName x
+      loop (I x : _) (y, t)
+          | x == y = (I x, t)
+      loop (F Text [I x] : _) (y, t)
+          | x == y = (F Text [I x], F Text [t])
+      loop (F Data [I x] : _) (y, t)
+          | x == y = (F Data [I x], F Data [t])
+      loop (F Name [I x] : _) (y, t)
+          | x == y = (F Name [I x], F Name [t])
+      loop (F Skey [I x] : _) (y, t)
+          | x == y = (F Skey [I x], F Skey [t])
+      loop (F Akey [I x] : _) (y, t)
+          | x == y = (F Akey [I x], F Akey [t])
+      loop (F Base [I x] : _) (y, t)
+          | x == y = (F Base [I x], F Base [t])
+      loop (G x : _) (y, G t)
+          | isGroupVar x && varId (G x) == y = (G x, G t)
+      loop (D x : _) (y, t)
+          | x == y = (D x, t)
+      loop (_ : domain) pair = loop domain pair
+
+-- Ensure the range of an environment contains only variables and that
+-- the environment is injective.
+{- matchRenaming :: GenEnv -> Bool
+matchRenaming (_, Env (_, e)) =
+  loop S.empty $ M.elems e
+  where
+    loop _ [] = True
+    loop s (I x:e) =
+      S.notMember x s && loop (S.insert x s) e
+    loop s (G y:e) | isGroupVar y =
+      let x = getGroupVar y in
+      S.notMember x s && loop (S.insert x s) e
+    loop _ _ = False -}
+
+matchRenaming :: GenEnv -> Bool
+matchRenaming (gen, Env (v, e)) =
+    nonGrp S.empty (M.elems e) &&
+    groupMatchRenaming v gen (M.foldrWithKey grp M.empty e)
+    where
+      nonGrp _ [] = True
+      nonGrp s (I x:e) =
+          not (S.member x s) && nonGrp (S.insert x s) e
+      nonGrp s (G _:e) = nonGrp s e -- Check group bindings elsewhere
+      nonGrp _ _ = False
+      grp x (G t) map = M.insert x t map
+      grp _ _ map = map
+
+-- For exponents, what we're looking for is an invertible
+-- map.  It doesn't have to be a strict renaming.
+-- For instance x -> yz, w -> z is not a renaming, but z -> w, y -> w^{-1}x inverts it.
+groupMatchRenaming :: Set Id -> Gen -> Map Id Group -> Bool
+groupMatchRenaming v gen map =
+    loop S.empty $ M.elems map
+    where
+      loop _ [] = True
+      loop s (t:ge)
+          | M.null t = False
+          | isGroupVar t =
+              let x = varId (G t) in
+              not (S.member x s) && loop (S.insert x s) ge
+          | M.size t == 1 && snd (head (M.elems t)) == -1 =
+              let x = getGroupVar t in
+              not (S.member x s) && loop (S.insert x s) ge
+          | otherwise = any (groupMatchElim v gen map t) (M.assocs t)
+
+groupMatchElim :: Set Id -> Gen -> Map Id Group -> Group -> (Id, (Bool, Int)) -> Bool
+groupMatchElim v gen ge t (x, (be,1)) =
+    let (t0, t1) = partition M.empty (mul t (M.singleton x (be,-1))) v in
+    case matchGroup (group t0) (group t1) S.empty gen M.empty of
+      [] -> False
+      ((v', gen', subst):_) ->
+          groupMatchRenaming (S.union v' v) gen' $ M.map (groupSubst subst) ge
+groupMatchElim _ _ _ _ _ = False
+
+nodeMatch ::  Term -> (Int, Int) -> GenEnv -> [GenEnv]
+nodeMatch t p env = match t (P p) env
+
+nodeLookup :: Env -> Term -> Maybe (Int, Int)
+nodeLookup env t =
+  case instantiate env t of
+    P p -> Just p
+    _ -> Nothing
+
+instance C.Env Term Gen Subst Env where
+   emptyEnv = emptyEnv
+   instantiate = instantiate
+   match = match
+   identityEnvFor e ts = maybe [] (: []) $ identityEnvFor e ts
+   substitution = substitution
+   reify = reify
+   matchRenaming = matchRenaming
+   nodeMatch = nodeMatch
+   nodeLookup = nodeLookup
+
+-- Term specific loading functions
+
+loadVars :: Monad m => Gen -> [SExpr Pos] -> m (Gen, [Term])
+loadVars gen sexprs =
+    do
+      pairs <- mapM loadVarPair sexprs
+      (g, vars) <- foldM loadVar (gen, []) (concat pairs)
+      return (g, reverse vars)
+
+loadVarPair :: Monad m => SExpr Pos -> m [(SExpr Pos, SExpr Pos)]
+loadVarPair (L _ (x:xs)) =
+    let (t:vs) = reverse (x:xs) in
+    return [(v,t) | v <- reverse vs]
+loadVarPair x = fail (shows (annotation x) "Malformed vars declaration")
+
+loadVar :: Monad m => (Gen, [Term]) -> (SExpr Pos, SExpr Pos) ->
+           m (Gen, [Term])
+loadVar (gen, vars) (S pos name, S pos' sort) =
+    case loadLookup pos vars False name of
+      Right _ ->
+          fail (shows pos "Duplicate variable declaration for " ++ name)
+      Left _ ->
+          do
+            let (gen', x) = freshId gen name
+            p <- mkVar x
+            return (gen', p : vars)
+    where
+      mkVar x =
+          let t = I x in
+          case sort of
+            "mesg" -> return t
+            "text" -> return $ F Text [t]
+            "data" -> return $ F Data [t]
+            "name" -> return $ F Name [t]
+            "skey" -> return $ F Skey [t]
+            "akey" -> return $ F Akey [t]
+            "base" -> return $ F Base [t]
+            "expr" -> return $ groupVar False x
+            "expn" -> return $ groupVar True x
+            "node" -> return (D x)
+            _ -> fail (shows pos' "Sort " ++ sort ++ " not recognized")
+loadVar _ (x,_) = fail (shows (annotation x) "Bad variable syntax")
+
+loadLookup :: Pos -> [Term] -> Bool -> String -> Either String Term
+loadLookup pos [] _ name = Left (shows pos $ "Identifier " ++ name ++ " unknown")
+loadLookup pos (t@(G _) : u) True name =
+    let name' = idName (varId t) in
+    if name' == name then Left (shows pos $ "Disallowed bare exponent")
+                          else loadLookup pos u True name
+loadLookup pos (t : u) flag name =
+    let name' = idName (varId t) in
+    if name' == name then Right t else loadLookup pos u flag name
+
+loadLookupName :: Monad m => Pos -> [Term] -> String -> m Term
+loadLookupName pos vars name =
+    either fail f (loadLookup pos vars True name)
+    where
+      f t@(F Name [I _]) = return t
+      f _ = fail (shows pos $ "Expecting " ++ name ++ " to be a name")
+
+loadLookupAkey :: Monad m => Pos -> [Term] -> String -> m Term
+loadLookupAkey pos vars name =
+    either fail f (loadLookup pos vars True name)
+    where
+      f t@(F Akey [I _]) = return t
+      f _ = fail (shows pos $ "Expecting " ++ name ++ " to be an akey")
+
+-- Load term and check that it is well-formed.
+loadTerm :: Monad m => [Term] -> Bool -> SExpr Pos -> m Term
+loadTerm vars strict (S pos s) =
+    either fail return (loadLookup pos vars strict s)
+loadTerm _ _ (Q _ t) =
+    return (C t)
+loadTerm vars strict (L pos (S _ s : l)) =
+    case lookup s loadDispatch of
+      Nothing -> fail (shows pos "Keyword " ++ s ++ " unknown")
+      Just f -> f pos strict vars l
+loadTerm _ _ x = fail (shows (annotation x) "Malformed term")
+
+type LoadFunction m = Pos -> Bool -> [Term] -> [SExpr Pos] -> m Term
+
+loadDispatch :: Monad m => [(String, LoadFunction m)]
+loadDispatch =
+    [("pubk", loadPubk)
+    ,("privk", loadPrivk)
+    ,("invk", loadInvk)
+    ,("ltk", loadLtk)
+    ,("bltk", loadBltk)
+    ,("gen", loadGen)
+    ,("exp", loadExp)
+    ,("one", loadOne)
+    ,("rec", loadRec)
+    ,("mul", loadMul)
+    ,("cat", loadCat)
+    ,("enc", loadEnc)
+    ,("hash", loadHash)
+    ]
+
+-- Atom constructors: pubk privk invk ltk
+
+loadPubk :: Monad m => LoadFunction m
+loadPubk _ _ vars [S pos s] =
+    do
+      t <- loadLookupName pos vars s
+      return $ F Akey [F Pubk [I $ varId t]]
+loadPubk _ _ vars [Q _ c, S pos s] =
+    do
+      t <- loadLookupName pos vars s
+      return $ F Akey [F Pubk [C c, I $ varId t]]
+loadPubk pos _ _ _ = fail (shows pos "Malformed pubk")
+
+loadPrivk :: Monad m => LoadFunction m
+loadPrivk _ _ vars [S pos s] =
+    do
+      t <- loadLookupName pos vars s
+      return $ F Akey [F Invk [F Pubk [I $ varId t]]]
+loadPrivk _ _ vars [Q _ c, S pos s] =
+    do
+      t <- loadLookupName pos vars s
+      return $ F Akey [F Invk [F Pubk [C c, I $ varId t]]]
+loadPrivk pos _ _ _ = fail (shows pos "Malformed privk")
+
+loadInvk :: Monad m => LoadFunction m
+loadInvk _ _ vars [S pos s] =
+    do
+      t <- loadLookupAkey pos vars s
+      return $ F Akey [F Invk [I $ varId t]]
+loadInvk pos _ _ _ = fail (shows pos "Malformed invk")
+
+loadLtk :: Monad m => LoadFunction m
+loadLtk _ _ vars [S pos s, S pos' s'] =
+    do
+      t <- loadLookupName pos vars s
+      t' <- loadLookupName pos' vars s'
+      return $ F Skey [F Ltk [I $ varId t, I $ varId t']]
+loadLtk pos _ _ _ = fail (shows pos "Malformed ltk")
+
+loadBltk :: Monad m => LoadFunction m
+loadBltk _ _ vars [S pos s, S pos' s'] =
+    do
+      t <- loadLookupName pos vars s
+      t' <- loadLookupName pos' vars s'
+      return $ F Skey [F Bltk [I $ varId t, I $ varId t']]
+loadBltk pos _ _ _ = fail (shows pos "Malformed bltk")
+
+-- Base and exponents
+
+loadGen :: Monad m => LoadFunction m
+loadGen _ _ _ [] =
+    return $ F Base [F Genr []]
+loadGen pos _ _ _ = fail (shows pos "Malformed gen")
+
+loadExp :: Monad m => LoadFunction m
+loadExp _ _ vars [x, x'] =
+    do
+      t <- loadBase vars x
+      t' <- loadExpr vars False x'
+      return $ F Base [idSubst emptyIdMap $ F Exp [t, G t']]
+loadExp pos _ _ _ = fail (shows pos "Malformed exp")
+
+loadBase :: Monad m => [Term] -> SExpr Pos -> m Term
+loadBase vars x =
+    do
+      t <- loadTerm vars False x
+      case t of
+        F Base [t] -> return t
+        _ -> fail (shows (annotation x) "Malformed base")
+
+loadExpr :: Monad m => [Term] -> Bool -> SExpr Pos -> m Group
+loadExpr vars False x =
+    do
+      t <- loadTerm vars False x
+      case t of
+        G t -> return t
+        _ -> fail (shows (annotation x) "Malformed expr")
+loadExpr _ True x =
+    do
+      fail (shows (annotation x) "Disallowed bare exponent")
+
+loadOne :: Monad m => LoadFunction m
+loadOne _ False _ [] =
+    return $ G M.empty
+loadOne pos True _ _ = fail (shows pos "Disallowed bare exponent")
+loadOne pos _ _ _ = fail (shows pos "Malformed one")
+
+loadRec :: Monad m => LoadFunction m
+loadRec _ False vars [x] =
+    do
+      t <- loadExpr vars False x
+      return $ G $ invert t
+loadRec pos True _ _ = fail (shows pos "Disallowed bare exponent")
+loadRec pos _ _ _ = fail (shows pos "Malformed rec")
+
+loadMul :: Monad m => LoadFunction m
+loadMul _ False vars xs =
+    do
+      t <- foldM f M.empty xs
+      return $ G t
+    where
+      f acc x =
+          do
+            t <- loadExpr vars False x
+            return $ mul t acc
+loadMul pos True _ _ = fail (shows pos "Disallowed bare exponent")
+
+-- Term constructors: cat enc
+
+loadCat :: Monad m => LoadFunction m
+loadCat _ strict vars (l : ls) =
+    do
+      ts <- mapM (loadTerm vars strict) (l : ls)
+      return $ foldr1 (\a b -> F Cat [a, b]) ts
+loadCat pos _ _ _ = fail (shows pos "Malformed cat")
+
+loadEnc :: Monad m => LoadFunction m
+loadEnc pos strict vars (l : l' : ls) =
+    do
+      let (butLast, last) = splitLast l (l' : ls)
+      t <- loadCat pos strict vars butLast
+      t' <- loadTerm vars strict last
+      return $ F Enc [t, t']
+loadEnc pos _ _ _ = fail (shows pos "Malformed enc")
+
+splitLast :: a -> [a] -> ([a], a)
+splitLast x xs =
+    loop [] x xs
+    where
+      loop z x [] = (reverse z, x)
+      loop z x (y : ys) = loop (x : z) y ys
+
+loadHash :: Monad m => LoadFunction m
+loadHash _ strict vars (l : ls) =
+   do
+     ts <- mapM (loadTerm vars strict) (l : ls)
+     return $ F Hash [foldr1 (\a b -> F Cat [a, b]) ts]
+loadHash pos _ _ _ = fail (shows pos "Malformed hash")
+
+-- Term specific displaying functions
+
+newtype Context = Context [(Id, String)] deriving Show
+
+displayVars :: Context -> [Term] -> [SExpr ()]
+displayVars _ [] = []
+displayVars ctx vars =
+    let (v,t):pairs = map (displayVar ctx) vars in
+    loop t [v] pairs
+    where
+      loop t vs [] = [L () (reverse (t:vs))]
+      loop t vs ((v',t'):xs)
+          | t == t' = loop t (v':vs) xs
+          | otherwise = L () (reverse (t:vs)):loop t' [v'] xs
+
+displayVar :: Context -> Term -> (SExpr (), SExpr ())
+displayVar ctx (I x) = displaySortId "mesg" ctx x
+displayVar ctx (F Text [I x]) = displaySortId "text" ctx x
+displayVar ctx (F Data [I x]) = displaySortId "data" ctx x
+displayVar ctx (F Name [I x]) = displaySortId "name" ctx x
+displayVar ctx (F Skey [I x]) = displaySortId "skey" ctx x
+displayVar ctx (F Akey [I x]) = displaySortId "akey" ctx x
+displayVar ctx (F Base [I x]) = displaySortId "base" ctx x
+displayVar ctx t@(G x)
+    | isBasisVar x = displaySortId "expn" ctx (varId t)
+    | isGroupVar x = displaySortId "expr" ctx (varId t)
+displayVar ctx (D x) = displaySortId "node" ctx x
+displayVar _ _ =
+    C.assertError "Algebra.displayVar: term not a variable with its sort"
+
+displaySortId :: String -> Context -> Id -> (SExpr (), SExpr ())
+displaySortId sort ctx x = (displayId ctx x, S () sort)
+
+displayId :: Context -> Id -> SExpr ()
+displayId (Context ctx) x =
+    case lookup x ctx of
+      Nothing ->
+          let msg = idName x ++ " in a display context" in
+          error $ "Algebra.displayId: Cannot find variable " ++ msg
+      Just name -> S () name
+
+displayTerm :: Context -> Term -> SExpr ()
+displayTerm ctx (I x) = displayId ctx x
+displayTerm ctx (F Text [I x]) = displayId ctx x
+displayTerm ctx (F Data [I x]) = displayId ctx x
+displayTerm ctx (F Name [I x]) = displayId ctx x
+displayTerm ctx (F Skey [I x]) = displayId ctx x
+displayTerm ctx (F Skey [F Ltk [I x, I y]]) =
+    L () [S () "ltk", displayId ctx x, displayId ctx y]
+displayTerm ctx (F Skey [F Bltk [I x, I y]])
+  |  x > y = displayTerm ctx (F Skey [F Bltk [I y, I x]])
+  | otherwise = L () [S () "bltk", displayId ctx x, displayId ctx y]
+displayTerm ctx (F Akey [t]) =
+    case t of
+      I x -> displayId ctx x
+      F Invk [I x] -> L () [S () "invk", displayId ctx x]
+      F Pubk [I x] -> L () [S () "pubk", displayId ctx x]
+      F Pubk [C c, I x] -> L () [S () "pubk", Q () c, displayId ctx x]
+      F Invk [F Pubk [I x]] -> L () [S () "privk", displayId ctx x]
+      F Invk [F Pubk [C c, I x]] ->
+          L () [S () "privk", Q () c, displayId ctx x]
+      _ -> error ("Algebra.displayAkey: Bad term " ++ show t)
+displayTerm ctx (F Base [t]) =
+    displayBase t
+    where
+      displayBase (I x) = displayId ctx x
+      displayBase (F Genr []) =
+          L () [S () "gen"]
+      displayBase (F Exp [t0, G t1]) =
+          L () [S () "exp", displayBase t0, displayTerm ctx (G t1)]
+      displayBase t = error ("Algebra.displayBase: Bad term " ++ show t)
+displayTerm ctx (G t) =
+    displayExpn t
+    where
+      displayExpn t
+          | M.null t = L () [S () "one"]
+          | otherwise =
+              case factors t of
+                [f] -> displayFactor f
+                fs -> L () (S () "mul" : map displayFactor fs)
+      displayFactor (x, (_, n))
+          | n >= 0 = displayId ctx x
+          | otherwise = L () [S () "rec", displayId ctx x]
+displayTerm _ (C t) = Q () t
+displayTerm ctx (F Cat [t0, t1]) =
+    L () (S () "cat" : displayTerm ctx t0 : displayList ctx t1)
+displayTerm ctx (F Enc [t0, t1]) =
+    L () (S () "enc" : displayEnc ctx t0 t1)
+displayTerm ctx (F Hash [t]) =
+    L () (S () "hash" : displayList ctx t)
+displayTerm ctx (D x) = displayId ctx x
+displayTerm _ (P (z, i)) = L () [N () z, N () i]
+displayTerm _ t = error ("Algebra.displayTerm: Bad term " ++ show t)
+
+displayList :: Context -> Term -> [SExpr ()]
+displayList ctx (F Cat [t0, t1]) = displayTerm ctx t0 : displayList ctx t1
+displayList ctx t = [displayTerm ctx t]
+
+displayEnc :: Context -> Term -> Term -> [SExpr ()]
+displayEnc ctx (F Cat [t0, t1]) t = displayTerm ctx t0 : displayEnc ctx t1 t
+displayEnc ctx t0 t1 = [displayTerm ctx t0, displayTerm ctx t1]
+
+displayEnv :: Context -> Context -> Env -> [SExpr ()]
+displayEnv ctx ctx' (Env (_, r)) =
+    map (\(x, t) -> L () [displayTerm ctx x, displayTerm ctx' t]) r'
+    where
+      r' = map (\(x, t) -> (I x, inferSort t)) $ M.assocs r
+
+-- displaySubst c s displays a substitution s in context c, where some
+-- variables that occur in s might not be in c.  Enough sort
+-- inference is performed so as to allow the extension of the context.
+displaySubst :: Context -> Subst -> [SExpr ()]
+displaySubst ctx s@(Subst r) =
+    map (\(x, t) -> L () [displayTerm ctx' x, displayTerm ctx' t]) r'
+    where
+      r' = map (\(x, t) -> (I x, inferSort (substitute s t))) $ M.assocs r
+      ctx' = foldl (\ctx (x, t) -> addToContext ctx [x, t]) ctx r'
+
+inferSort :: Term -> Term
+inferSort t@(F Invk _) = F Akey [t]
+inferSort t@(F Pubk _) = F Akey [t]
+inferSort t@(F Ltk _) = F Skey [t]
+inferSort t@(F Bltk _) = F Skey [t]
+inferSort t@(F Genr _) = F Base [t]
+inferSort t@(F Exp _) = F Base [t]
+inferSort t = t
+
+emptyContext :: Context
+emptyContext = Context []
+
+-- Generate names for output renaming as necessary.
+-- Assumes the input is a list of term that are well-formed
+addToContext :: Context -> [Term] -> Context
+addToContext ctx u =
+    foldl (foldVars varContext) ctx u
+
+varContext :: Context -> Term -> Context
+varContext ctx t =
+    let x = varId t
+        name = rootName $ idName x in
+    if hasId ctx x then
+        ctx
+    else
+        if hasName ctx name then
+            extendContext ctx x (genName ctx name)
+        else
+            extendContext ctx x name
+
+hasId :: Context -> Id -> Bool
+hasId (Context ctx) id =
+    maybe False (const True) (lookup id ctx)
+
+hasName :: Context -> String -> Bool
+hasName (Context ctx) name =
+    maybe False (const True) (L.find ((name ==) . snd) ctx)
+
+extendContext :: Context -> Id -> String -> Context
+extendContext (Context ctx) x name =
+    Context $ (x, name) : ctx
+
+genName :: Context -> String -> String
+genName ctx name =
+    loop 0
+    where
+      root = '-' : reverse name
+      loop :: Int -> String
+      loop n =
+          let name' = revapp root (show n) in
+          if hasName ctx name' then
+              loop (n + 1)
+          else
+              name'
+      revapp [] s = s
+      revapp (c : cs) s = revapp cs (c : s)
+
+rootName :: String -> String
+rootName name =
+    noHyphen 0 name
+    where
+      noHyphen _ [] = name
+      noHyphen i (c : s)
+          | c == '-' = hyphen i (i + 1) s
+          | otherwise = noHyphen (i + 1) s
+      hyphen i _ [] = rootName $ take i name
+      hyphen i j (c : s)
+          | isDigit c  = hyphen i (j + 1) s
+          | otherwise = noHyphen j (c : s)
+
+instance C.Context Term Gen Subst Env Context where
+    emptyContext = emptyContext
+    addToContext = addToContext
+    displayVars = displayVars
+    displayTerm = displayTerm
+    displayEnv = displayEnv
+    displaySubst = displaySubst
 
 instance C.Algebra Term Place Gen Subst Env Context
diff --git a/src/CPSA/DiffieHellman/IntLinEq.hs b/src/CPSA/DiffieHellman/IntLinEq.hs
new file mode 100644
--- /dev/null
+++ b/src/CPSA/DiffieHellman/IntLinEq.hs
@@ -0,0 +1,197 @@
+-- Integer Solutions of Linear Inhomogeneous Equations
+
+-- Copyright (c) 2009 The MITRE Corporation
+--
+-- This program is free software: you can redistribute it and/or
+-- modify it under the terms of the BSD License as published by the
+-- University of California.
+
+-- |
+-- Module      : CPSA.DiffieHellman.IntLinEq
+-- Copyright   : (c) 2009 The MITRE Corporation
+-- License     : BSD
+--
+-- Integer Solutions of Linear Inhomogeneous Equations
+--
+-- A linear equation with integer coefficients is represented as a
+-- pair of lists of non-zero integers, the coefficients and the
+-- constants.  If there are no constants, the linear equation
+-- represented by (c, []) is the homogeneous equation:
+--
+-- >     c[0]*x[0] + c[1]*x[1] + ... + c[n-1]*x[n-1] = 0
+--
+-- where n is the length of c.  Otherwise, (c, d) represents the
+-- inhomogeneous equation:
+--
+-- >     c[0]*x[0] + c[1]*x[1] + ... + c[n-1]*x[n-1] = g
+--
+-- where g = gcd(d[0], d[1], ..., d[m-1]), and m is the length of d.
+-- Thus g is the greatest common denominator of the elements of d.
+--
+-- A solution is a partial map from variables to terms, and a term is
+-- a pair of lists of integers, the variable part of the term followed
+-- by the constant part.  The variable part may specify variables not
+-- in the input.  In other words, the length of the coefficents in the
+-- answer may exceed the length of the coefficients in the input.  For
+-- example, the solution of
+--
+-- >     64x - 41y = 1
+--
+-- is x = -41z - 16 and y = -64z - 25.  The computed solution is read
+-- off the list returned as an answer.
+--
+-- >     intLinEq [64,-41] [1] =
+-- >         [(0,([0,0,0,0,0,0,-41],[-16])),
+-- >         (1,([0,0,0,0,0,0,-64],[-25]))]
+--
+-- The algorithm used to find solutions is described in Vol. 2 of The
+-- Art of Computer Programming \/ Seminumerical Alorithms, 2nd Ed.,
+-- 1981, by Donald E. Knuth, pg. 327.  To show sums, we write
+--
+-- >     sum[i] c[i]*x[i] for c[0]*x[0] + c[1]*x[1] + ... + c[n-1]*x[n-1].
+--
+-- The algorithm's initial values are the linear equation (c,d) and an
+-- empty substitution s.
+--
+-- 1.  Let c[i] be the smallest non-zero coefficient in absolute value.
+--
+-- 2.  If c[i] < 0, multiply c and d by -1 and goto step 1.
+--
+-- 3.  If c[i] = 1, a general solution of the following form has been
+-- found:
+--
+-- >     x[i] = sum[j] -c'[j]*x[j] + d[k] for all k
+--
+--  where c' is c with c'[i] = 0.  Use the equation to eliminate x[i]
+--  from the range of the current substitution s.  If variable x[i] is
+--  in the original equation, add the mapping to substitution s.
+--
+-- 4.  If c[i] divides every coefficient in c,
+--
+--     * if c[i] divides every constant in d, divide c and d by c[i]
+--       and goto step 3,
+--
+--     * otherwise fail because there is no solution.
+--
+-- 5.  Otherwise, eliminate x[i] as above in favor of freshly created
+-- variable x[n], where n is the length of c.
+--
+-- >    x[n] = sum[j] (c[j] div c[i] * x[j])
+--
+-- Goto step 1 and solve the equation:
+--
+-- >    c[i]*x[n] + sum[j] (c[j] mod c[i])*x[j] = d[k] for all k
+
+module CPSA.DiffieHellman.IntLinEq
+    (LinEq, Subst, intLinEq) where
+
+-- | A linear equation with integer coefficients is represented as a
+-- pair of lists of non-zero integers, the coefficients and the
+-- constants.
+type LinEq = ([Int], [Int])
+
+-- | A solution to a linear equation is a partial map from variables
+-- to terms, and a term is a pair of lists of integers, the variable
+-- part of the term followed by the constant part.  The variable part
+-- may specify variables not in the input.  In other words, the length
+-- of the coefficents in the answer may exceed the length of the
+-- coefficients in the input.
+type Subst = [(Int, LinEq)]
+
+-- | Find integer solutions to a linear equation or fail when there
+-- are no solutions.
+intLinEq :: Monad m => LinEq -> m Subst
+intLinEq (coefficients, constants) =
+    intLinEqLoop (length coefficients) (coefficients, constants) []
+
+-- The algorithm used to find solutions is described in Vol. 2 of The
+-- Art of Computer Programming / Seminumerical Alorithms, 2nd Ed.,
+-- 1981, by Donald E. Knuth, pg. 327.
+
+-- On input, n is the number of variables in the original problem, c
+-- is the coefficients, d is the constants, and subst is a list of
+-- eliminated variables.
+intLinEqLoop :: Monad m => Int -> LinEq -> Subst -> m Subst
+intLinEqLoop n (c, d) subst =
+    -- Find the smallest non-zero coefficient in absolute value
+    let (i, ci) = smallest c in
+    case () of
+      _ | ci < 0 -> intLinEqLoop n (invert c, invert d) subst
+      --  Ensure the smallest coefficient is positive
+        | ci == 0 -> fail "bad problem"
+      --  Lack of non-zero coefficients is an error
+        | ci == 1 ->
+      --  A general solution of the following form has been found:
+      --    x[i] = sum[j] -c'[j]*x[j] + d[k] for all k
+      --  where c' is c with c'[i] = 0.
+            return $ eliminate n (i, (invert (zero i c), d)) subst
+        | divisible ci c ->
+      --  If all the coefficients are divisible by c[i], a solution is
+      --  immediate if all the constants are divisible by c[i],
+      --  otherwise there is no solution.
+            if divisible ci d then
+                let c' = divide ci c
+                    d' = divide ci d in
+                return $ eliminate n (i, (invert (zero i c'), d')) subst
+            else
+                fail "no solution"
+        | otherwise ->
+      --  Eliminate x[i] in favor of freshly created variable x[n],
+      --  where n is the length of c.
+      --    x[n] = sum[j] (c[j] div c[i] * x[j])
+      --  The new equation to be solved is:
+      --    c[i]*x[n] + sum[j] (c[j] mod c[i])*x[j] = d[k] for all k
+            intLinEqLoop n (map (\x -> mod x ci) c ++ [ci], d) subst'
+            where
+              subst' = eliminate n (i, (invert c' ++ [1], [])) subst
+              c' = divide ci (zero i c)
+
+-- Find the smallest non-zero coefficient in absolute value
+smallest :: [Int] -> (Int, Int)
+smallest xs =
+    foldl f (-1, 0) (zip [0..] xs)
+    where
+      f (i, n) (j, x)
+        | n == 0 = (j, x)
+        | x == 0 || abs n <= abs x = (i, n)
+        | otherwise = (j, x)
+
+invert :: [Int] -> [Int]
+invert t = map negate t
+
+-- Zero the ith position in a list
+zero :: Int -> [Int] -> [Int]
+zero _ [] = []
+zero 0 (_:xs) = 0 : xs
+zero i (x:xs) = x : zero (i - 1) xs
+
+-- Eliminate a variable from the existing substitution.  If the
+-- variable is in the original problem, add it to the substitution.
+eliminate :: Int -> (Int, LinEq) -> Subst -> Subst
+eliminate n m@(i, (c, d)) subst =
+    if i < n then
+        m : map f subst
+    else
+        map f subst
+    where
+      f m'@(i', (c', d')) =     -- Eliminate i in c' if it occurs in c'
+          case get i c' of
+            0 -> m'             -- i is not in c'
+            ci -> (i', (addmul ci (zero i c') c, addmul ci d' d))
+      -- Find ith coefficient
+      get _ [] = 0
+      get 0 (x:_) = x
+      get i (_:xs) = get (i - 1) xs
+      -- addnum n xs ys sums xs and ys after multiplying ys by n
+      addmul 1 [] ys = ys
+      addmul n [] ys = map (* n) ys
+      addmul _ xs [] = xs
+      addmul n (x:xs) (y:ys) = (x + n * y) : addmul n xs ys
+
+divisible :: Int -> [Int] -> Bool
+divisible small t =
+    all (\x -> mod x small == 0) t
+
+divide :: Int -> [Int] -> [Int]
+divide small t =
+    map (\x -> div x small) t
diff --git a/src/CPSA/Graph/Config.hs b/src/CPSA/Graph/Config.hs
--- a/src/CPSA/Graph/Config.hs
+++ b/src/CPSA/Graph/Config.hs
@@ -18,8 +18,8 @@
       gap :: Float,             -- Gap width in dashed lines
       mx :: Float,              -- Width of margin
       my :: Float,              -- Height of margin
-      tx :: Float,              -- Distance between tree leaves
-      ty :: Float,              -- Distance between tree levels
+      tx :: Float,              -- Distance between tree levels
+      ty :: Float,              -- Distance between tree leaves
       ta :: Float,              -- Font ascent
       td :: Float,              -- Font descent
       dx :: Float,              -- Distance between strands
diff --git a/src/CPSA/Graph/Loader.hs b/src/CPSA/Graph/Loader.hs
--- a/src/CPSA/Graph/Loader.hs
+++ b/src/CPSA/Graph/Loader.hs
@@ -11,11 +11,11 @@
 -- modify it under the terms of the BSD License as published by the
 -- University of California.
 
-module CPSA.Graph.Loader (Preskel, Dir (..), Vertex, protocol, role, env,
-                          inst, part, lastVertex, vertices, Node, vnode,
+module CPSA.Graph.Loader (Preskel, Dir (..), Vertex, protocol, role, env, inst,
+                          part, lastVertex, vertices, Node, vnode, aborted,
                           strands, label, parent, seen, unrealized, shape,
-                          empty, protSrc, preskelSrc, initial, strand, pos,
-                          prev, next, msg, dir, succs, preds,
+                          protSrc, preskelSrc, initial, strand, pos, leadstosuccs,
+                          prev, next, msg, dir, succs, preds, empty,
                           State, loadFirst, loadNext)
                           where
 
@@ -35,8 +35,9 @@
       strands :: Int,           -- Number of strands
       initial :: [Vertex],      -- The initial node in each strand
       unrealized :: Maybe [Vertex], -- Nodes not realized if available
+      empty :: Bool,            -- Is preskel marked as an empty cohort?
       shape :: Bool,            -- Is preskel a shape?
-      empty :: Bool,            -- Does preskel have an empty cohort?
+      aborted :: Bool,          -- Was preskel aborted?
       protSrc :: SExpr Pos,     -- Source for the protocol
       preskelSrc :: SExpr Pos } -- Source for this preskeleton
     deriving Show
@@ -67,6 +68,7 @@
       next :: Maybe Vertex,     -- Strand next
       preds :: [Vertex],        -- Cross strand predecessors
       succs :: [Vertex],        -- Cross strand successors
+      leadstosuccs :: [Vertex],      -- Cross strand "leadsto" successors
       strand :: Int,            -- Strand ID
       pos :: Int }              -- Position in strand
 
@@ -257,9 +259,13 @@
       let heights = map (length . trace) insts
       unrealized <- loadNodes heights (assoc "unrealized" xs)
       let shape = maybe False (const True) (assoc "shape" xs)
-      let empty = elem "empty cohort" (qassoc "comment" xs)
+      let empty = (comment "empty cohort" xs)
+      let aborted = (comment "aborted" xs)
       let orderings = maybe [] id (assoc "precedes" xs)
-      pairs <- loadOrderings heights orderings
+      let lt = maybe [] id (assoc "leadsto" xs)
+      pairs <- loadOrderings heights orderings True
+      leadsto <- loadOrderings heights lt False
+      let leadsto' = filter (\((s0,_),(s1,_)) -> s0 /= s1) leadsto
       let graph = adj heights pairs
       let pairs' = reduce graph pairs
       let strands = length insts
@@ -275,8 +281,9 @@
                              strands = strands,
                              initial = initial,
                              unrealized = unrealized',
-                             shape = shape,
                              empty = empty,
+                             shape = shape,
+                             aborted = aborted,
                              protSrc = src p,
                              preskelSrc = s }
             where
@@ -289,6 +296,7 @@
                             next = getNext ht (s, p),
                             preds = getPreds (s, p),
                             succs = getSuccs (s, p),
+                            leadstosuccs = getLeadstoSuccs (s, p),
                             strand = s,
                             pos = p } |
                           (p, evt) <- zip [0..] (trace inst) ] |
@@ -297,7 +305,12 @@
               evtMsg (L _ [S _ _, t]) = t
               evtMsg x = x      -- Handle bad syntax
               evtDir (L _ [S _ "send", _]) = OutDir
-              evtDir (L _ [S _ "sync", _]) = SyncDir
+              evtDir (L _ [S _ "init", _, _]) = SyncDir
+              evtDir (L _ [S _ "init", _]) = SyncDir
+              evtDir (L _ [S _ "obsv", _, _]) = SyncDir
+              evtDir (L _ [S _ "obsv", _]) = SyncDir
+              evtDir (L _ [S _ "tran", _, _, _]) = SyncDir
+              evtDir (L _ [S _ "tran", _, _]) = SyncDir
               evtDir _ = InDir  -- Handle bad syntax
               getNode (s, p) = nodes !! s !! p
               getPrev (s, p)
@@ -308,6 +321,7 @@
                   | otherwise = Nothing
               getPreds n = [ getNode n0 | (n0, n1) <- pairs', n == n1 ]
               getSuccs n = [ getNode n1 | (n0, n1) <- pairs', n == n0 ]
+              getLeadstoSuccs n = [ getNode n1 | (n0, n1) <- leadsto', n == n0 ]
               unrealized' =
                   maybe Nothing (Just . map getNode) unrealized
 
@@ -391,6 +405,17 @@
 alist ((L _ (S _ _ : _)) : xs) = alist xs
 alist xs = fail (shows (annotation $ head xs) "Malformed association list")
 
+comment :: String -> [SExpr Pos] -> Bool
+comment key alist =
+  case assoc "comment" alist of
+    Nothing -> False
+    Just cs -> loop cs
+  where
+    loop [] = False
+    loop ((Q _ val):rest) = (val == key || loop rest)
+                            --    loop ((Q _ val):rest) = (val == "\""++key++"\"" || loop rest)
+    loop (_:rest) = loop rest
+
 -- Lookup value in alist, appending values with the same key
 assoc :: String -> [SExpr Pos] -> Maybe [SExpr Pos]
 assoc key alist =
@@ -406,16 +431,6 @@
 -- assoc key alist =
 --    concat [ rest | L _ (S _ head : rest) <- alist, key == head ]
 
-qassoc :: String -> [SExpr Pos] -> [String]
-qassoc key xs =
-  case assoc key xs of
-    Nothing -> []
-    Just vals ->
-      concatMap f vals
-      where
-        f (Q _ s) = [s]
-        f _ = []
-
 nassoc :: Monad m => String -> [SExpr Pos] -> m (Maybe Int)
 nassoc key xs =
     case assoc key xs of
@@ -440,26 +455,26 @@
             ns <- mapM num val
             return (Just ns)
 
-loadOrderings :: Monad m => [Int] -> [SExpr Pos] -> m [Pair]
-loadOrderings heights x =
+loadOrderings :: Monad m => [Int] -> [SExpr Pos] -> Bool -> m [Pair]
+loadOrderings heights x strict =
     foldM f [] x
     where
       f ns x =
           do
-            np <- loadPair heights x
+            np <- loadPair heights x strict
             return (adjoin np ns)
 
-loadPair :: Monad m => [Int] -> SExpr Pos -> m Pair
-loadPair heights (L pos [x0, x1]) =
+loadPair :: Monad m => [Int] -> SExpr Pos -> Bool -> m Pair
+loadPair heights (L pos [x0, x1]) strict =
     do
       n0 <- loadNode heights x0
       n1 <- loadNode heights x1
-      case sameStrands n0 n1 of  -- Same strand
+      case (strict && sameStrands n0 n1) of  -- Same strand
         True -> fail (shows pos "Malformed pair -- nodes in same strand")
         False -> return (n0, n1)
     where
       sameStrands (s0, _) (s1, _) = s0 == s1
-loadPair _ x = fail (shows (annotation x) "Malformed pair")
+loadPair _ x _ = fail (shows (annotation x) "Malformed pair")
 
 loadNode :: Monad m => [Int] -> SExpr Pos -> m Node
 loadNode heights (L pos [N _ s, N _ p])
diff --git a/src/CPSA/Graph/Main.hs b/src/CPSA/Graph/Main.hs
--- a/src/CPSA/Graph/Main.hs
+++ b/src/CPSA/Graph/Main.hs
@@ -27,6 +27,7 @@
       prefix :: Bool,           -- Use prefix notation?
       purgeTraces :: Bool,      -- Purge traces?
       scripted :: Bool,         -- Use scripting?
+      comp :: Bool,          -- Use compact images?
       margin :: Int }           -- Output line length
     deriving Show
 
@@ -55,11 +56,11 @@
               hPutStrLn h "<?xml version=\"1.0\"?>"
               hPutStrLn h ("<!-- " ++ cpsaVersion ++ " -->")
               let conf = config (prefix params) (purgeTraces params)
-                         (scripted params)
+                         (scripted params) (comp params)
               case format params of
-                XHTML -> expandedView h (conf False)
+                XHTML -> expandedView h conf
                          (margin params) cmts preskels
-                SVG -> compactView h (conf True) preskels
+                SVG -> compactView h conf preskels
                 _ -> error "Bad case in main"
 
 -- Load comments and preskeletons
@@ -154,7 +155,7 @@
       Option ['m'] ["margin"]   (ReqArg Margin "INT")
       ("set output margin (default " ++ show defaultMargin ++ ")"),
       Option ['i'] ["infix"]    (NoArg InfixFlag) "output uses infix notation",
-      Option ['p'] ["purge-traces"] (NoArg PurgeFlag)  "purge traces",
+      Option ['s'] ["show-traces"] (NoArg PurgeFlag)   "show traces",
       Option ['h'] ["help"]     (NoArg Help)           "show help message",
       Option ['v'] ["version"]  (NoArg Info)           "show version number" ]
 
@@ -164,8 +165,9 @@
     loop flags (Params { file = Nothing, -- By default, no output file
                          format = XHTML, -- and use expanded format
                          prefix = True,
-                         purgeTraces = False,
+                         purgeTraces = True,
                          scripted = False,
+                         comp = False,
                          margin = defaultMargin })
     where
       loop [] params = return params
@@ -179,13 +181,13 @@
       loop (Scripted : flags) params =
           loop flags $ params { scripted = True }
       loop (Compact : flags) params =
-          loop flags $ params { format = SVG }
+          loop flags $ params { comp = True }
       loop (Text : flags) params =
           loop flags $ params { format = LaTeX }
       loop (InfixFlag : flags) params =
           loop flags $ params { prefix = False }
       loop (PurgeFlag : flags) params =
-          loop flags $ params { purgeTraces = True }
+          loop flags $ params { purgeTraces = False }
       loop (Margin value : flags) params =
           case readDec value of
             [(margin, "")] ->
@@ -215,18 +217,19 @@
              stroke = 0.08 * font,
              dash = 0.50 * font,
              gap = 0.20 * font,
-             tx = 4.16 * font,
-             ty = 6.25 * font,
-             ta = 1.75 * font,
-             td = 1.16 * font,
-             dx = 8.33 * font,
-             dy = 6.25 * font,
+             tx = 4.16 * font * factor,
+             ty = 6.25 * font * (if compact then 0.4 else 1.0),
+             ta = 1.75 * font * factor,
+             td = 1.16 * font * (if compact then 0.4 else 1.0),
+             dx = 8.33 * font * factor,
+             dy = 6.25 * font * factor,
              mx = 3.33 * font,
              my = 3.33 * font,
              br = 0.50 * font,
-             compact = compact,
+             compact = False,
              notation = if prefix then Prefix else Infix,
              purge = purge,
              scripts = scripts }
     where
       font = 12
+      factor = if compact then 0.7 else 1.0
diff --git a/src/CPSA/Graph/Preskeleton.hs b/src/CPSA/Graph/Preskeleton.hs
--- a/src/CPSA/Graph/Preskeleton.hs
+++ b/src/CPSA/Graph/Preskeleton.hs
@@ -14,6 +14,7 @@
 import CPSA.Graph.SVG
 import CPSA.Graph.Loader
 import CPSA.Graph.Layout
+import qualified Data.List as L
 
 showMsg :: Config -> SExpr a -> String
 showMsg conf x =
@@ -53,15 +54,16 @@
 
 -- Add a cross strand arrow
 addEdge :: Config -> Rank -> Vertex -> Float -> Float ->
-           [Element] -> Vertex -> [Element]
-addEdge conf rank src x1 y1 elements n =
+           String -> [Element] -> Vertex -> [Element]
+addEdge conf rank src x1 y1 color elements n =
     let (x2, y2) = npos conf rank (vnode n) in
-    arrow conf (sameMsg src n) x1 y1 x2 y2 : elements
+    arrow conf (sameMsg src n) x1 y1 x2 y2 color : elements
 
 sameMsg :: Vertex -> Vertex -> Bool
 sameMsg src dest =
   case (dir src, dir dest) of
     (OutDir, InDir) -> msg src == msg dest
+    (SyncDir, SyncDir) -> True
     _ -> False
 
 -- Add a strand node
@@ -70,14 +72,17 @@
     let (x, y) = npos conf rank (vnode node)
         bullet = circ conf (nodeColor k node) x y
         es = tooltip (showMsg conf $ msg node) [bullet] : elements
-        es' = foldl (addEdge conf rank node x y) es (succs node) in
-    maybe es' (addNode conf k rank es') (next node)
+        es' = foldl (addEdge conf rank node x y "black") es (succs node L.\\ leadstosuccs node)
+        es'' = foldl (addEdge conf rank node x y "blue") es' (leadstosuccs node) in
+    maybe es'' (addNode conf k rank es'') (next node)
 
 nodeColor :: Preskel -> Vertex -> Maybe String
 nodeColor k node =
   case dir node of
     OutDir -> Nothing           -- Transmission nodes are black
-    SyncDir -> Just "gray"      -- State synchronization nodes are gray
+    SyncDir
+      | elem node (maybe [] id (unrealized k)) -> Just "orange"
+      | otherwise -> Just "gray" -- Realized nodes are gray
     InDir
       | elem node (maybe [] id (unrealized k)) -> Just "red"
       | otherwise -> Just "blue" -- Realized nodes are blue
diff --git a/src/CPSA/Graph/SVG.hs b/src/CPSA/Graph/SVG.hs
--- a/src/CPSA/Graph/SVG.hs
+++ b/src/CPSA/Graph/SVG.hs
@@ -75,8 +75,8 @@
       style = [("stroke-width", showL (stroke conf)), ("stroke", "gray")]
 
 -- An arrow that is curved when its horizontal length exceeds a limit.
-arrow :: Config -> Bool -> Float -> Float -> Float -> Float -> Element
-arrow conf solid x1 y1 x3 y3 =
+arrow :: Config -> Bool -> Float -> Float -> Float -> Float -> String -> Element
+arrow conf solid x1 y1 x3 y3 color =
     ec "path" [("d", path), ("style", props style)] []
     where
       (x2, y2) = shorten (br conf) x1 y1 x3 y3
@@ -90,7 +90,7 @@
       style = if solid then solidStyle else dashedStyle
       solidStyle =
           [("stroke-width", showL (stroke conf)),
-           ("stroke", "black"),
+           ("stroke", color),
            ("marker-end", "url(#arrow)"),
            ("fill", "none")]
       dashedStyle = ("stroke-dasharray",
@@ -103,6 +103,7 @@
     | AliveDup                  -- duplicate node is alive
     | DeadTree                  -- tree node is dead
     | DeadDup                   -- duplication node is dead
+    | Realized                  -- realized but not a shape
 
 -- A button that displays a preskeleton
 kbutton :: Config -> Float -> Float -> ButtonKind -> Int -> Element
@@ -117,11 +118,13 @@
       color AliveDup = "green"
       color DeadTree = "red"
       color DeadDup = "orange"
+      color Realized = "blue"
       italic AliveTree props = props
-      italic Shape props = props
+      italic Shape props = ("font-weight", "bold"):props
       italic AliveDup props = ("font-style", "italic"):props
       italic DeadTree props = props
       italic DeadDup props = ("font-style", "italic"):props
+      italic Realized props = props
 
 onclick :: Config -> Int -> String
 onclick conf label =
diff --git a/src/CPSA/Graph/Tree.hs b/src/CPSA/Graph/Tree.hs
--- a/src/CPSA/Graph/Tree.hs
+++ b/src/CPSA/Graph/Tree.hs
@@ -53,7 +53,7 @@
     where
       live kids dups =
           maybe True null (unrealized k) ||
-          null kids && null dups && not (empty k) ||
+          (null kids && null dups && (not $ empty k)) ||
           any alive kids || any alive dups
       x [] [] = 1
       -- The width of a duplicate is one
@@ -206,13 +206,19 @@
 folddup f z t =
     foldl (f False) (foldl (f True) z (duplicates t)) (children t)
 
+realized :: Preskel -> Bool
+realized k =
+    maybe False null (unrealized k)
+
 button :: Config -> Float -> Float -> Bool -> Tree -> Element
 button conf x y dup t =
     kbutton conf x y kind (label (vertex t))
     where
       kind =
-          case (alive t, dup) of
-            (True, False) -> if shape (vertex t) then Shape else AliveTree
-            (True, True) -> AliveDup
-            (False, False) -> DeadTree
-            (False, True) -> DeadDup
+          case (alive t, dup, shape (vertex t), realized (vertex t)) of
+            (True, False, True, _) -> Shape
+            (True, False, False, True) -> Realized
+            (True, False, _, _) -> AliveTree
+            (True, True, _, _) -> AliveDup
+            (False, False, _, _) -> DeadTree
+            (False, True, _, _) -> DeadDup
diff --git a/src/CPSA/Lib/Algebra.hs b/src/CPSA/Lib/Algebra.hs
--- a/src/CPSA/Lib/Algebra.hs
+++ b/src/CPSA/Lib/Algebra.hs
@@ -55,6 +55,10 @@
     -- extracted from the other term?
     carriedBy :: t -> t -> Bool
 
+    -- Is atom a constituent of a term?  In other words, is atom among
+    -- the set of atoms required to construct the term?
+    constituent :: t -> t -> Bool
+
     -- Returns the key used to decrypt an encryption term, otherwise
     -- Nothing.
     decryptionKey :: t -> Maybe t
@@ -86,37 +90,38 @@
     -- encryptions protect the target, only the outside one is
     -- returned.  The inside encryption is the one that is carried by
     -- the outside encryption.
-    protectors :: (t -> Bool) -> t -> t -> Maybe [t]
+    protectors :: Set t -> Set t -> t -> t -> Maybe [t]
 
-    -- The next two functions are used to perform a dataflow analysis
-    -- of a trace.  The analysis finds minimal sets of atoms that
-    -- must be available initially to complete a run of the trace.
+    -- Given a list of variables, load a term from an S-expression.
+    loadTerm :: Monad m => [t] -> Bool -> SExpr Pos -> m t
 
-    -- The algebra specific part of the analysis focuses on a term
-    -- used to send or receive a message.  Each term is analyzed in
-    -- the context of two sets of terms.  A Flow t is a pair of sets
-    -- of terms (initial, available).  The first set contains the base
-    -- terms initially available.  The second set contains the terms
-    -- currently available.  The analysis of a term produces the set
-    -- of pairs the reflect the possible extensions associated with
-    -- sending or receiving the term.
-    outFlow, inFlow :: t -> Flow t -> Set (Flow t)
+    -- Determines if an element is "numeric", meaning that it is
+    -- part of a numeric sort.
+    isNum :: t -> Bool
 
-    -- Given a list of variables, load a term from an S-expression.
-    loadTerm :: Monad m => [t] -> SExpr Pos -> m t
+    -- Finds all (outermost) numeric subterms occurring in a given term
+    subNums :: t -> Set t
 
--- A parameter flow analysis is performed using a pair of sets of terms
-type Flow t = (Set t, Set t)
+    -- Given a term t, return the first variable in t.
+    forceVar :: t -> t
 
+    -- Determines whether a given target is derivable, given a set
+    -- of known messages and an avoidance set.
+    derivable :: Set t -> Set t -> t -> Bool
+
+    -- Returns the indicator in a given variable of a term.
+    indicator :: t -> t -> Maybe Int
+
 -- The place at which a term occurs in another term
 
-class (Term t, Show p) => Place t p | t -> p, p -> t where
+class (Term t, Eq p, Show p) => Place t p | t -> p, p -> t where
     -- places variable source returns a list of places at which the
     -- variable occurs in the term.
     places :: t -> t -> [p]
     -- carriedPlaces target source returns a list of places at which
     -- the target is carried in the term.
     carriedPlaces :: t -> t -> [p]
+    carriedRelPlaces :: t -> t -> Set t -> [p]
     -- replace variable place source returns the term that results
     -- from replacing the variable at the give place in the source
     -- term.  The sort of the variable must match the one used to
@@ -125,6 +130,12 @@
     -- ancestors source place extracts the terms in the source that
     -- contain the term at the given place.
     ancestors :: t -> p -> [t]
+    -- placeIsPrefixOf place place' returns true if place is a prefix
+    -- of place'.
+    placeIsPrefixOf :: p -> p -> Bool
+    -- placeStripPrefix prefix place drops a prefix from a place or
+    -- return Nothing when prefix is not a prefix of place.
+    placeStripPrefix :: p -> p -> Maybe p
 
 -- Generation of terms with fresh variables.
 
@@ -137,9 +148,18 @@
     -- generated by the generator.
     clone :: g -> t -> (g, t)
 
+    -- Given a generator and a single numeric term, create a generic
+    -- representative of values derivable from that term.  Produces
+    -- a gen because this generates a variable.
+    genericize :: g -> t -> (g, t)
+
+    -- Given a generator and a single term, create a generic
+    -- representative of values relevant to that term
+    -- genericVersion :: g -> t -> (g, t)
+
     -- Given a generator, load a list of variables or return an error
     -- message.  Each element of the list is an identifier and a sort.
-    -- The variables are returned in the reverse order.
+    -- The varibles are returned in the reverse order.
     loadVars :: Monad m => g -> [SExpr Pos] -> m (g, [t])
 
 -- Substitutions
@@ -149,6 +169,7 @@
 -- produces the same term.
 class (Term t, Gen t g, Ord s, Show s) => Subst t g s | t -> s, s -> t where
     emptySubst :: s
+    destroyer :: t -> Maybe s
     substitute :: s -> t -> t
     unify :: t -> t -> (g, s) -> [(g, s)]
     compose :: s -> s -> s
diff --git a/src/CPSA/Lib/AlgebraLibrary.hs b/src/CPSA/Lib/AlgebraLibrary.hs
new file mode 100644
--- /dev/null
+++ b/src/CPSA/Lib/AlgebraLibrary.hs
@@ -0,0 +1,60 @@
+module CPSA.Lib.AlgebraLibrary where
+
+import CPSA.Lib.Utilities
+import CPSA.Lib.Algebra
+
+{--
+import CPSA.Lib.Debug
+--}
+
+-- Useful operations on variables
+
+-- Are the vars in ts a subset of the ones in ts'?
+varSubset :: Algebra t p g s e c => [t] -> [t] -> Bool
+varSubset ts ts' =
+    all (flip elem (varsInTerms ts')) (varsInTerms ts)
+
+varsInTerms :: Algebra t p g s e c => [t] -> [t]
+varsInTerms ts =
+    foldl addVars [] ts
+
+addVars :: Algebra t p g s e c => [t] -> t -> [t]
+addVars ts t = foldVars (flip adjoin) ts t
+
+matchMany :: Algebra t p g s e c => [t] -> [t] -> (g,e) -> [(g,e)]
+matchMany [] [] ge = [ge]
+matchMany [] _ _ = []
+matchMany _ [] _ = []
+matchMany (t:ts) (t':ts') ge = concatMap (matchMany ts ts') (match t t' ge)
+
+matchMany_v :: Algebra t p g s e c => [t] -> [t] -> (g,e) -> [(g,e)]
+matchMany_v [] [] ge = [ge]
+matchMany_v [] _ _ = []
+matchMany_v _ [] _ = []
+matchMany_v (t:ts) (t':ts') ge = concatMap (matchMany_v ts ts') (match t t' ge)
+
+-- stripExp x t: apply the map (x -> 1) to t and return the result.
+stripExp :: Algebra t p g s e c => t -> t -> t
+stripExp x t
+  | (not $ isNum x) = t
+  | otherwise = case destroyer x of
+    Nothing -> t
+    Just s -> substitute s t
+
+-- zeroIndicator: zero out the indicator of all restricted variables in t.
+zeroIndicator :: Algebra t p g s e c => t -> (g,e) -> [t] -> [(g,e)]
+zeroIndicator _ ge [] = [ge]
+zeroIndicator t ge (v:vs) =
+  concatMap (\ge -> zeroIndicator t ge vs) (zeroIndicatorIn t v ge)
+
+-- zeroIndicatorIn: zero out the indicator of v in t.
+zeroIndicatorIn :: Algebra t p g s e c => t -> t -> (g,e) -> [(g,e)]
+zeroIndicatorIn t v ge
+  | indicator t v == Just 0 = [ge]
+  | indicator t v == Nothing = [ge] -- shouldn't happen
+  | otherwise =
+    match t target ge
+  where
+    target = case destroyer v of
+      Just s -> substitute s t
+      Nothing -> assertError ("Couldn't destroy restricted variable in zeroIndicatorIn " ++ show v ++ " " ++ show t)
diff --git a/src/CPSA/Lib/CPSA.hs b/src/CPSA/Lib/CPSA.hs
--- a/src/CPSA/Lib/CPSA.hs
+++ b/src/CPSA/Lib/CPSA.hs
@@ -22,8 +22,7 @@
                       module CPSA.Lib.Pretty,
                       module CPSA.Lib.Printer,
                       module CPSA.Lib.Notation,
-                      module CPSA.Lib.Algebra,
-                      Event (..), flow) where
+                      module CPSA.Lib.Algebra) where
 
 import CPSA.Lib.Utilities
 import CPSA.Lib.SExpr
@@ -31,4 +30,3 @@
 import CPSA.Lib.Printer
 import CPSA.Lib.Notation
 import CPSA.Lib.Algebra
-import CPSA.Lib.Protocol(Event (..), flow)
diff --git a/src/CPSA/Lib/Characteristic.hs b/src/CPSA/Lib/Characteristic.hs
--- a/src/CPSA/Lib/Characteristic.hs
+++ b/src/CPSA/Lib/Characteristic.hs
@@ -10,9 +10,9 @@
 
 import Control.Monad
 import qualified Data.List as L
-import CPSA.Lib.Utilities
 import CPSA.Lib.SExpr
 import CPSA.Lib.Algebra
+import CPSA.Lib.Declaration
 import CPSA.Lib.Protocol
 import CPSA.Lib.Goal
 import CPSA.Lib.Strand
@@ -199,24 +199,20 @@
     let nr = foldr mkNon [] as
     let ar = foldr mkPnon [] as
     let ur = foldr mkUniq [] as
-    let (nr', ar', ur') = foldl addInstOrigs (nr, ar, ur) insts
+    let gr = foldr mkUgen [] as
+    let decls = mkDcls nr ar ur gr
     let prios = []
-    let k = mkPreskel g p goals insts o nr' ar' ur' prios comment
+    let k = mkPreskel g p goals insts o [] decls comment prios
     mapM_ (checkUniqAt nmap k) as
-    case termsWellFormed $ nr' ++ ar' ++ ur' ++ kterms k of
+    case termsWellFormed $ (termsInDlist decls) ++ kterms k of
       False -> fail (shows pos "Terms in skeleton not well formed")
       True -> return ()
     case verbosePreskelWellFormed k of
       Right () -> return k
       Left msg -> fail $ shows pos
                   $ showString "Skeleton not well formed: " msg
-
-addInstOrigs :: Algebra t p g s e c => ([t], [t], [t]) ->
-                Instance t e -> ([t], [t], [t])
-addInstOrigs (nr, ar, ur) i =
-    (foldl (flip adjoin) nr $ inheritRnon i,
-     foldl (flip adjoin) ar $ inheritRpnon i,
-     foldl (flip adjoin) ur $ inheritRunique i)
+  where
+    termsInDlist olist = concat $ map dterms (concatMap snd olist)
 
 mkPrec :: Eq t => [(t, (Int, Int))] ->
           (Pos, AForm t) -> [Pair] -> [Pair]
@@ -224,6 +220,13 @@
   (nMapLookup n nmap, nMapLookup n' nmap) : o
 mkPrec _ _ o = o
 
+mkDcls :: [t] -> [t] -> [t] -> [t] -> SkelDeclList t
+mkDcls nr ar ur gr =
+  [("non-orig", map simpleDInst nr), ("pen-non-orig", map simpleDInst ar),
+   ("uniq-orig", map simpleDInst ur), ("uniq-gen", map simpleDInst gr)]
+  where
+    simpleDInst t = declInst [t] []
+
 mkNon :: (Pos, AForm t) -> [t] -> [t]
 mkNon (_, Non t) ts = t : ts
 mkNon _ ts = ts
@@ -236,6 +239,11 @@
 mkUniq (_, Uniq t) ts = t : ts
 mkUniq (_, UniqAt t _) ts = t : ts
 mkUniq _ ts = ts
+
+mkUgen :: (Pos, AForm t) -> [t] -> [t]
+mkUgen (_, Ugen t) ts = t : ts
+mkUgen (_, UgenAt t _) ts = t : ts
+mkUgen _ ts = ts
 
 checkUniqAt :: (Algebra t p g s e c, Monad m) => [(t, Node)] ->
                Preskel t g s e -> (Pos, AForm t) -> m ()
diff --git a/src/CPSA/Lib/Cohort.hs b/src/CPSA/Lib/Cohort.hs
--- a/src/CPSA/Lib/Cohort.hs
+++ b/src/CPSA/Lib/Cohort.hs
@@ -6,99 +6,69 @@
 -- modify it under the terms of the BSD License as published by the
 -- University of California.
 
-module CPSA.Lib.Cohort (Mode(..), reduce, unrealized) where
+module CPSA.Lib.Cohort (Mode(..), reduce, unrealized, minPriority) where
 
 import Control.Monad
 import qualified Data.Set as S
 import Data.Set (Set)
 import qualified Data.List as L
+import qualified Data.Tuple as T
 import CPSA.Lib.Algebra
+import CPSA.Lib.State
 import CPSA.Lib.Protocol
 import CPSA.Lib.Strand
+import CPSA.Lib.Utilities
 
 {-- Debugging support
-import System.IO.Unsafe
-
-z :: Show a => a -> b -> b
-z x y = unsafePerformIO (print x >> return y)
-
-zz :: Show a => a -> a
-zz x = z x x
-
-zn :: Show a => a -> Maybe b -> Maybe b
-zn x Nothing = z x Nothing
-zn _ y = y
-
-zf :: Show a => a -> Bool -> Bool
-zf x False = z x False
-zf _ y = y
-
-zt :: Algebra t p g s e c => t -> String
-zt t =
-    show (displayTerm (addToContext emptyContext [t]) t)
-
-zs :: Algebra t p g s e c => Set t -> String
-zs s =
-    show $ map (displayTerm (addToContext emptyContext ts)) ts
-    where
-      ts = S.toList s
+import CPSA.Lib.Debug
+--import CPSA.Lib.DebugLibrary
 
-zi :: Algebra t p g s e c => Instance t e -> String
-zi inst =
-    show (map f e)
-    where
-      domain = rvars (role inst)
-      e = reify domain (env inst)
-      range = map snd e
-      f (x, t) = (displayTerm (context domain) x,
-                  displayTerm (context range) t)
-      context ts = addToContext emptyContext ts
 --}
 
 -- Compile time switches for expermentation.
 
 -- Include the escape set in the set of target terms
-useEcapeSetInTargetTerms :: Bool
-useEcapeSetInTargetTerms = False -- True
+useEscapeSetInTargetTerms :: Bool
+useEscapeSetInTargetTerms = False -- True
 
 -- Filter a cohort for skeletons that solve the test.  Turn off only
 -- to debug the other parts of the test solving algorithm.
 useSolvedFilter :: Bool
 useSolvedFilter = True -- False
 
--- Use thinning during generalization.
-useThinningDuringGeneralization :: Bool
-useThinningDuringGeneralization = False -- True
+-- Use pruning during generalization.
+usePruningDuringGeneralization :: Bool
+usePruningDuringGeneralization = False -- True
 
 -- Minimum priority to solve
 minPriority :: Int
 minPriority = 1
 
--- Penetrator derivable predicate and checking for unrealized skeletons.
-
-derivable :: Algebra t p g s e c => Set t -> Set t -> t -> Bool
-derivable avoid sent term =
-    let (knowns, unknowns) = decompose sent avoid in
-    buildable knowns unknowns term
-
 -- Returns the nodes in a preskeleton that are not realized.
 unrealized :: Algebra t p g s e c => Preskel t g s e -> [Node]
 unrealized k =
     foldl unrealizedInStrand [] (strands k)
     where
-      (a, _) = avoid k
+      a = avoid k
       unrealizedInStrand acc s =
           fst $ foldl unrealizedInNode (acc, S.empty) (nodes s)
       unrealizedInNode (acc, ns) n =
-          case inbnd $ event n of
-            Nothing -> (acc, ns)
-            Just t ->
-                let ns' = addSendingBefore ns n
-                    ts = termsInNodes ns' in
-                case derivable a ts t of
-                  True -> (acc, ns')
-                  False -> (graphNode n : acc, ns')
+          case event n of
+            In t ->
+              let ns' = addSendingBefore ns n
+                  ts = transmissionsBefore ns n in
+              case derivable a ts t of
+                True -> (acc, ns')
+                False -> (graphNode n : acc, ns')
+            Sync (Tran (Just _, _, _)) | not (explainable k n (leadsto k)) ->
+              (graphNode n : acc, ns)
+            _ -> (acc, ns)
 
+transmissionsBefore :: Algebra t p g s e c => Set (Vertex t e) ->
+                       Vertex t e -> Set t
+transmissionsBefore vs v =
+    termsInNodes (addSendingBefore vs v)
+
 addSendingBefore :: Algebra t p g s e c => Set (Vertex t e) ->
                     Vertex t e  -> Set (Vertex t e)
 addSendingBefore s n =
@@ -108,25 +78,33 @@
         | S.member n s = s
         | otherwise = addSendingBefore (addIfSending s n) n
       addIfSending s n =
-          case outbnd $ event n of
-            Nothing -> s
-            Just _ -> S.insert n s
+          case event n of
+            Out _ -> S.insert n s
+            _ -> s
 
 termsInNodes :: Algebra t p g s e c => Set (Vertex t e) -> Set t
 termsInNodes ns =
-  S.map (evtTerm . event) ns
+  S.foldl' f S.empty ns
+  where
+    f ts n =
+      L.foldl' (flip S.insert) ts (evtMesgTerms (event n))
 
--- Returns that atoms that cannot be guess when determining if a
--- term is derivable from some other terms, and the atoms that
--- uniquely originate in this skeleton.
-avoid :: Algebra t p g s e c => Preskel t g s e -> (Set t, [t])
-avoid k =
-    (S.unions [ns, as, us], L.nub ((kpnon k) ++ u))
-    where
-      ns = S.fromList (knon k)
-      as = S.fromList (kpnon k)
-      u = uniqOrig k
-      us = S.fromList u
+-- Is node n a tranition or observation node that is explainable,
+-- either because its current state is a variable of sort message or
+-- because an immediate transition produces the current state.
+explainable :: Algebra t p g s e c => Preskel t g s e -> Vertex t e -> [Pair] -> Bool
+explainable k n leadsto =
+  case (event n) of
+    Sync t -> case (now t) of
+      Nothing ->  True
+      Just st -> case lookup (s,i) (map T.swap leadsto) of
+        Nothing -> isAcquiredVar st
+        Just (s2,i2) -> case (trace (insts k !! s2) !! i2) of
+          Sync t2 -> Just st == (next t2)
+          _ -> False
+    _ -> True
+  where
+    (s,i) = graphNode n
 
 -- Suppose k --v,p-> k', where k |-phi,sigma-> k'.  Let t=msg(k, v)@p,
 -- t'=sigma(t), T=sigma(esc(k, v, t)), and t"=msg(k', phi(v)).
@@ -137,7 +115,7 @@
 -- 2. for some t in outpred(k', phi(v)), t' is not carried only within
 --    T in t, or
 --
--- 3. targetterms(t', T) \ sigma(targetterms(t, esc(k, v, t)) /= empty
+-- 3. targetterms(t', T) \ sigma(targetterms(t, esc(k, v, t))) /= empty
 --    and there are variables in k's protocol that are not atoms, or
 --
 -- 4. the decryption key for an element of T is derivable, or
@@ -149,16 +127,16 @@
 -- pos    = p
 -- ek     = encription key if ct is an encyption else nothing
 -- escape = esc(k, v, t)
--- k      = k
+-- k'     = k
 -- (s, p) = v and n
 -- subst  = sigma
 solved :: Algebra t p g s e c => t -> p -> [t] -> Set t ->
           Preskel t g s e -> Node -> s -> Bool
 solved ct pos eks escape k (s, p) subst =
     -- Condition 1
-    isAncestorInSet escape' t pos ||
+    isAncestorInSet escape' t pos || derivable a escape' ct' ||
     -- Condition 2
-    any (not . carriedOnlyWithin ct' escape') (S.toList ts) ||
+    any (\t -> (not $ carriedOnlyWithinRel ct' escape' t a)) (S.toList ts) ||
     -- Condition 3
     not (varsAllAtoms (protocol k)) && not (S.null targetTermsDiff) ||
     -- Condition 4
@@ -167,15 +145,15 @@
     any (derivable a ts) eks
     where
       v = vertex k (s, p)       -- Look up vertex in k
-      t = evt id erro (event v)  -- Term at v
-      erro = const $ error "Cohort.solved: got an outbound term"
+      t = evt id erro errs (event v)  -- Term at v
+      erro = const $ assertError "Cohort.solved: got an outbound term"
+      errs = const $ assertError "Cohort.solved: got a state synchronization term"
       ct' = substitute subst ct -- Mapped critical term
       escape' = S.map (substitute subst) escape
-      mappedTargetTerms = S.map (substitute subst) (targetTerms ct escape)
-      targetTermsDiff = S.difference (targetTerms ct' escape') mappedTargetTerms
-      vs = addSendingBefore S.empty v
-      ts = termsInNodes  vs     -- Outbound predecessors
-      (a, _) = avoid k
+      mappedTargetTerms = S.map (substitute subst) (snd $ targetTerms (gen k) ct escape)
+      targetTermsDiff = S.difference (snd $ targetTerms (gen k) ct' escape') mappedTargetTerms
+      ts = transmissionsBefore S.empty v -- Outbound predecessors
+      a = avoid k
 
 maybeSolved :: Algebra t p g s e c => t -> p -> [t] -> Set t ->
                Preskel t g s e -> Node -> s -> Bool
@@ -195,77 +173,65 @@
 reduce :: Algebra t p g s e c => Mode -> Preskel t g s e ->
           [Preskel t g s e]
 reduce mode k =
-    maybe (whenRealized k) id (findTest mode k u a)
+    firstJust (map (testNode mode k a) ns)
+                  (whenRealized k) -- Skeleton is realized
     where
-      (a, u) = avoid k
+      triples = L.sortBy priorityOrder
+                [(s,i,p) | s <- [0..((length $ strands k)-1)],
+                           i <- [0..((height $ instidx s)-1)],
+                           let p = priority k (s,i)]
+      short = filter (\(_, _, p)-> p >= minPriority) triples
+      ns = map (\(s,i,_) -> (nodes (strandidx s) !! i)) short
+      a = avoid k
+      instidx s = (insts k) !! s
+      strandidx s = (strands k) !! s
       whenRealized k =
           if noGeneralization mode then [] else maximize k
-
-prioritizeVertices :: Algebra t p g s e c => Preskel t g s e ->
-                      [Vertex t e] -> [Vertex t e]
-prioritizeVertices k vs =
-     map fst $ filter keep $ L.sortBy prios $ map addPrio vs
-     where
-       addPrio v = (v, priority k (sid $ strand v, pos v))
-       prios (_, p) (_, p') = compare p' p
-       keep (_, p) = p >= minPriority
-
-priority :: Algebra t p g s e c => Preskel t g s e -> Node -> Int
-priority k (s, i) =
-  case lookup (s, i) (kpriority k) of
-    Just p -> p
-    Nothing -> rpriority (role $ insts k !! s) !! i
+      priorityOrder (s0,i0,p0) (s1,i1,p1)
+        | p0 /= p1 = compare p1 p0  -- reverse, so that higher number = higher priority
+        | s0 /= s1 = compareStrandOrder mode s0 s1
+        | otherwise = compareNodeOrder mode (strandidx s0) i0 i1
 
-nodeOrder :: Algebra t p g s e c => Mode ->
-             Preskel t g s e -> [Vertex t e]
-nodeOrder mode k =
-    concatMap (nodeVisitOrder mode) (strandVisitOrder mode (strands  k))
+compareStrandOrder :: Mode -> Int -> Int -> Ordering
+compareStrandOrder mode s0 s1 =
+  if visitOldStrandsFirst mode then (compare s0 s1)
+  else (compare s1 s0)
 
-strandVisitOrder :: Mode -> [a] -> [a]
-strandVisitOrder mode ss =
-    if visitOldStrandsFirst mode then
-        ss                      -- Visit old strands first
-    else
-        reverse ss     -- Visit recently added strands first (default)
+compareNodeOrder :: Algebra t p g s e c => Mode -> Strand t e ->
+                    Int -> Int -> Ordering
+compareNodeOrder mode s i0 i1 =
+  if (reverseNodeOrder mode == rsearch (role $ inst s)) then (compare i0 i1)
+  else (compare i1 i0)
 
-nodeVisitOrder :: Algebra t p g s e c => Mode ->
-                  Strand t e -> [Vertex t e]
-nodeVisitOrder mode s =
-    if reverseNodeOrder mode == rsearch (role $ inst s) then
-        nodes s                -- Visit earliest nodes first (default)
-    else
-        reverse $ nodes s       -- Visit latest nodes first
+-- Returns the first Just value in a list or the default when there is
+-- none.
+firstJust :: [Maybe a] -> a -> a
+firstJust [] x = x
+firstJust (Just x : _) _ = x
+firstJust (Nothing : xs) x = firstJust xs x
 
--- Look for a test node in a strand
-findTest :: Algebra t p g s e c => Mode -> Preskel t g s e ->
-              [t] -> Set t -> Maybe [Preskel t g s e]
-findTest mode k u a =
-    loop (prioritizeVertices k $ nodeOrder mode k)
-    where
-      loop [] = Nothing
-      loop (n : nodes) =
-          case inbnd $ event n of
-            Nothing -> loop nodes
-            Just t ->
-                let ns = addSendingBefore S.empty n
-                    ts = termsInNodes ns    -- Public messages
-                    der = derivable a ts in -- Derivable before node
-                if der t then
-                    loop nodes
-                else
-                    Just $ testNode mode k u ts der (graphNode n) t
+testNode :: Algebra t p g s e c => Mode -> Preskel t g s e ->
+                   Set t -> Vertex t e -> Maybe [Preskel t g s e]
+testNode mode k a n =
+   case event n of
+     In t ->
+       let ts = transmissionsBefore S.empty n in -- Public messages
+       if derivable a ts t then Nothing
+       else Just $ solveNode mode k a ts (graphNode n) t
+     Sync t | not (explainable k n (leadsto k)) ->
+       Just $ solveSyncNode mode k (graphNode n) (now t)
+     _ -> Nothing
 
 -- Look for a critical term that makes this node a test node.
-testNode :: Algebra t p g s e c => Mode -> Preskel t g s e ->
-            [t] -> Set t -> (t -> Bool) -> Node -> t ->
+solveNode :: Algebra t p g s e c => Mode -> Preskel t g s e ->
+            Set t -> Set t -> Node -> t ->
             [Preskel t g s e]
-testNode mode k u ts derivable n t =
+solveNode mode k a ts n t =
     loop cts
     where
-      loop [] = error (
-        "Cohort.testNode missing test at " ++ show n ++ "\n" ++ show t)
+      loop [] = assertError ("Cohort.solveNode missing test at " ++ show n)
       loop ((ct, eks) : cts) =
-          case escapeSet ts derivable ct of
+          case escapeSet a ts ct of
             Nothing -> loop cts
             Just escape ->
                 places (carriedPlaces ct t)
@@ -273,35 +239,48 @@
                   places [] = loop cts -- Find position at which
                   places (p : ps)      -- ct has escaped
                       | isAncestorInSet escape t p = places ps
-                      | otherwise = solveNode k ct p eks n t escape
+                      | otherwise = solvePath k ct p eks n t escape ts
       cts =                     -- Potential critical messages
           if nonceFirstOrder mode then
-              map f (filter (flip carriedBy t) u) ++
-              filter g (map h (encryptions t))
+            nonces ++ encs
           else
-              filter g (map h (encryptions t)) ++
-              map f (filter (flip carriedBy t) u)
+            encs ++ nonces
+      -- include all carried terms that are in a or
+      -- are numeric.
+      nonces = map f (filter (flip carriedBy t) (S.toList a)) ++
+               (filter (\x -> ff a x) $ foldCarriedTerms fnum [] t)
+      encs = filter g (map h (encryptions t))
+      fnum nums t | isNum t = nums ++ [(t, [])]
+                  | otherwise = nums
       f ct = (ct, [])           -- A nonce tests has no eks
       g (_, []) = False         -- An encryption test must have
       g _ = True                -- at least one non-derivable key
       -- Dump derivable encryption keys
-      h (ct, eks) = (ct, filter (not . derivable) eks)
+      h (ct, eks) = (ct, filter (not . (derivable a ts)) eks)
+      ff a (t, _) = any (nonTrivIndicator t) (S.elems a)
+      nonTrivIndicator t e = case indicator t e of
+        Just n -> n /= 0
+        Nothing -> False
 
--- Compute the escape set
+-- Compute the relevant escape set
 escapeSet :: Algebra t p g s e c => Set t ->
-             (t -> Bool) -> t -> Maybe (Set t)
-escapeSet ts derivable ct =
+             Set t -> t -> Maybe (Set t)
+escapeSet a ts ct =
     foldM f S.empty (S.toList ts)
     where
       f e t =
           do
-            es <- protectors derivable ct t
+            es <- protectors a ts ct t
             return (foldl (flip S.insert) e es)
 
-carriedOnlyWithin :: Algebra t p g s e c => t -> Set t -> t -> Bool
-carriedOnlyWithin target escape source =
-    all (isAncestorInSet escape source) (carriedPlaces target source)
+--carriedOnlyWithin :: Algebra t p g s e c => t -> Set t -> t -> Bool
+--carriedOnlyWithin target escape source =
+--    all (isAncestorInSet escape source) (carriedPlaces target source)
 
+carriedOnlyWithinRel :: Algebra t p g s e c => t -> Set t -> t -> Set t -> Bool
+carriedOnlyWithinRel target escape source avoid =
+    all (isAncestorInSet escape source) (carriedRelPlaces target source avoid)
+
 -- isAncestorInSet set source position is true if there is one ancestor of
 -- source at position that is in the set.
 isAncestorInSet :: Algebra t p g s e c => Set t -> t -> p -> Bool
@@ -311,20 +290,21 @@
 -- Solve critical message at position pos at node n.
 -- ct = t @ pos
 -- t  = msg(k, n)
-solveNode :: Algebra t p g s e c => Preskel t g s e ->
-             t -> p -> [t] -> Node -> t -> Set t ->
+solvePath :: Algebra t p g s e c => Preskel t g s e ->
+             t -> p -> [t] -> Node -> t -> Set t -> Set t ->
              [Preskel t g s e]
-solveNode k ct pos eks n t escape =
-    mgs $ cons ++ augs ++ lsns
+solvePath k ct pos eks n t escape ts =
+    mgs $ cons ++ augs ++ lsns ++ asols
     where
+      asols = algebraSolutions k ct pos eks n t escape ts cause
       cons = contractions k ct pos eks n t escape cause
       augs = augmentations k ct pos eks n escape cause
       lsns = addListeners k ct pos eks n t escape cause
       cause = Cause (dir eks) n ct escape
 
 -- Filter out all but the skeletons with the most general homomorphisms.
-
-mgs :: Algebra t p g s e c => [(Preskel t g s e, [Sid])] -> [Preskel t g s e]
+mgs :: Algebra t p g s e c => [(Preskel t g s e, [Sid])] ->
+       [Preskel t g s e]
 mgs cohort =
   reverse $ map fst $ loop cohort []
   where
@@ -367,11 +347,14 @@
                 t -> p -> [t] -> Node -> t -> Set t ->
                 Cause t -> [(Preskel t g s e, [Sid])]
 contractions k ct pos eks n t escape cause =
-    [ (k, phi) |
-          let anc = ancestors t pos,
-          subst <- solve escape anc (gen k, emptySubst),
+    [ (k, phi) | subst <- solve escape anc (gen k, emptySubst),
           (k, n, phi, subst') <- contract k n cause subst,
           maybeSolved ct pos eks escape k n subst' ]
+    where
+      -- stick to only proper ancestors if ct is numeric;
+      -- algebraSolve is strictly more general otherwise
+      anc = if (isNum ct) then ancs else (ct : ancs)
+      ancs = (ancestors t pos)
 
 solve :: Algebra t p g s e c => Set t -> [t] -> (g, s) -> [(g, s)]
 solve escape ancestors subst =
@@ -380,21 +363,22 @@
           s <- unify a e subst ]
 
 carriedOnlyWithinAtSubst :: Algebra t p g s e c =>
-                            t -> Set t -> t -> (g, s) -> Bool
-carriedOnlyWithinAtSubst  ct escape t (_, subst) =
-    carriedOnlyWithin ct' escape' t'
+                            t -> Set t -> t -> (g, s) -> Set t -> Bool
+carriedOnlyWithinAtSubst  ct escape t (_, subst) avoid =
+    carriedOnlyWithinRel ct' escape' t' avoid
     where
       ct' = substitute subst ct
       escape' = S.map (substitute subst) escape
       t' = substitute subst t
 
-fold :: Algebra t p g s e c => t -> Set t -> t -> (g, s) -> [(g, s)]
-fold ct escape t (gen, subst) =
+fold :: Algebra t p g s e c => t -> Set t -> t -> Set t -> (g, s) -> [(g, s)]
+fold ct escape t avoid (gen, subst) =
     [ (gen', compose subst' subst) |
-      (gen', subst') <- foldl f [(gen, emptySubst)] (carriedPlaces ct' t') ]
+      (gen', subst') <- foldl f [(gen, emptySubst)] (carriedRelPlaces ct' t' avoid') ]
     where
       ct' = substitute subst ct
       escape' = S.map (substitute subst) escape
+      avoid' = S.map (substitute subst) avoid
       t' = substitute subst t
       f substs p =
           [ s | subst <- substs, s <- solve escape' (ancestors t' p) subst ]
@@ -410,22 +394,20 @@
                 Cause t -> [(Preskel t g s e, [Sid])]
 augmentations k ct pos eks n escape cause =
     [ k' | r <- roles (protocol k),
-           k' <- roleAugs k ct pos eks n escape cause targets r ]
+           k' <- roleAugs g' k ct pos eks n escape cause targets r ]
     where
-      targets = S.toList (targetTerms ct escape)
+      targets = S.toList tterms
+      (g', tterms) = targetTerms (gen k) ct escape
 
-roleAugs :: Algebra t p g s e c => Preskel t g s e ->
+roleAugs :: Algebra t p g s e c => g -> Preskel t g s e ->
             t -> p -> [t] -> Node -> Set t -> Cause t ->
             [t] -> Role t -> [(Preskel t g s e, [Sid])]
-roleAugs k ct pos eks n escape cause targets role =
-    [ (k', phi) |
-           (subst', inst) <-
-               transformingNode ct escape targets role subst,
-           (k', n', phi, subst'') <-
-               augment k n cause role subst' inst,
+roleAugs g k ct pos eks n escape cause targets role =
+  [ (k', phi) | (subst', inst) <- transformingNode ct escape targets role subst (avoid k),
+           (k', n', phi, subst'') <- augment k n cause role subst' inst False,
            maybeSolved ct pos eks escape k' n' subst'' ]
     where
-      subst = cloneRoleVars (gen k) role
+      subst = cloneRoleVars g role
 
 -- Generate a fresh set of role variables
 cloneRoleVars :: Algebra t p g s e c => g -> Role t -> (g, s)
@@ -437,53 +419,63 @@
           let (gen', t') = clone gen t in
           case match t t' (gen', env) of
             (gen'', env') : _ -> grow ts gen'' env'
-            [] -> error "Cohort.grow: Internal error"
+            [] -> assertError "Cohort.cloneRoleVars: Internal error"
 
+-- Identify all distinct potential transforming nodes
 transformingNode :: Algebra t p g s e c => t -> Set t ->
-                    [t] -> Role t -> (g, s) ->
+                    [t] -> Role t -> (g, s) -> Set t ->
                     [((g, s), Instance t e)]
-transformingNode ct escape targets role subst =
-    loop 1 [] [] (rtrace role)
-    where
+transformingNode ct escape targets role subst avoid =
+  loop 1 [] [] (rtrace role)
+  where
       -- loop height past acc trace
       loop _ _ acc [] = acc
+      -- receptions cannot be transforming
       loop ht past acc (In t : c) =
           loop (ht + 1) (In t : past) acc c
+      loop ht past acc (Sync t : c) =
+          loop (ht + 1) (Sync t : past) acc c
       loop ht past acc (Out t : c) =
           loop (ht + 1) (Out t : past) acc' c
           where
             substs = carriedBindings targets t subst
-            substs' = cowt ct escape past substs
-            acc' = maybeAug ct escape role ht substs' acc t
+            substs' = cowt ct escape (stripSync past) substs avoid
+--            substs' = cowt ct escape past substs avoid
+            acc' = maybeAug ct escape role ht substs' acc t avoid
 
 -- Terms considered for binding with the carried terms in an outbound
 -- term.
-targetTerms :: Algebra t p g s e c => t -> Set t -> Set t
-targetTerms ct escape =
-    if useEcapeSetInTargetTerms then
-       targetTermsWithEscapeSet
+targetTerms :: Algebra t p g s e c => g -> t -> Set t -> (g, Set t)
+targetTerms g ct escape =
+    if useEscapeSetInTargetTerms then
+       (g', targetTermsWithEscapeSet)
     else
-       S.difference targetTermsWithEscapeSet escape
+       (g', S.difference targetTermsWithEscapeSet escape)
     where
-      targetTermsWithEscapeSet = S.fold f (S.singleton ct) escape
+      -- hack: including both ct and ct' for cases where ct' leads to something
+      -- that doesn't pass the solved filter.
+      targetTermsWithEscapeSet = S.fold f (S.insert ct $ S.singleton ct') escape
       f t ts =
           foldl (flip S.insert) ts
                 (concatMap (ancestors t) (carriedPlaces ct t))
+      (g', ct') = genericize g ct -- genericVersion g ct
 
 -- Find bindings for terms in the test.
 carriedBindings :: Algebra t p g s e c => [t] -> t -> (g, s) -> [(g, s)]
 carriedBindings targets outbound subst =
-    [ s |
-      subterm <- S.toList (foldCarriedTerms (flip S.insert) S.empty outbound),
-      target <- targets,
-      s <- unify subterm target subst ]
+  concatMap (\(subterm, target) -> unify subterm target subst) stPairs
+  where
+    stPairs = [(subterm,target)|
+               subterm <- S.toList (foldCarriedTerms (flip S.insert) S.empty outbound),
+               target <- targets]
 
 -- Ensure the critical term is carried only within the escape set of
 -- every term in the past using fold from cows.
 cowt :: Algebra t p g s e c => t -> Set t ->
-        Trace t -> [(g, s)] -> [(g, s)]
-cowt ct escape c substs =
-    nubSnd $ concatMap (cowt0 ct escape c) substs
+        Trace t -> [(g, s)] -> Set t -> [(g, s)]
+-- cowt 0 _ _ _ _ _ = error ("cowt recursion limit reached")
+cowt ct escape c substs avoid =
+    nubSnd $ concatMap (cowt0 ct escape c avoid) substs
 
 -- Remove pairs with the same second element.
 nubSnd :: Eq b => [(a, b)] -> [(a, b)]
@@ -492,40 +484,47 @@
 
 -- Handle one substitution at a time.
 cowt0 :: Algebra t p g s e c => t -> Set t ->
-         Trace t -> (g, s) -> [(g, s)]
-cowt0 ct escape c subst =
+         Trace t -> Set t -> (g, s) -> [(g, s)]
+cowt0 ct escape c avoid subst =
     if all (f subst) c then     -- Substitution works
         [subst]
     else                        -- Substitution needs refinement
-        cowt ct escape c (foldn ct escape c [subst])
+        cowt ct escape c (foldn ct escape c [subst] avoid) avoid
     where
       f subst evt =
-          carriedOnlyWithinAtSubst ct escape (evtTerm evt) subst
+          carriedOnlyWithinAtSubst ct escape (evtTerm evt) subst (S.map (substitute (snd subst)) avoid)
 
 -- Apply fold to each message in the trace.
 foldn :: Algebra t p g s e c => t -> Set t ->
-         Trace t -> [(g, s)] -> [(g, s)]
-foldn _ _ [] substs = substs
-foldn ct escape (evt : c) substs =
-    foldn ct escape c (concatMap (fold ct escape (evtTerm evt)) substs)
+         Trace t -> [(g, s)] -> Set t -> [(g, s)]
+foldn _ _ [] substs _ = substs
+foldn ct escape (evt : c) substs avoid =
+    foldn ct escape c (concatMap (fold ct escape (evtTerm evt) avoid) substs) avoid
 
+evtTerm :: Event t -> t
+evtTerm (In t) = t
+evtTerm (Out t) = t
+evtTerm _ = assertError "Cohort: Extracting a term from a sync event"
+
 -- If the outbound term is carried only within, no transforming node
 -- was found, otherwise, add a candidate augmentation to the
 -- accumulator.
 maybeAug :: Algebra t p g s e c => t -> Set t ->
             Role t -> Int -> [(g, s)] ->
-            [((g, s), Instance t e)] -> t ->
+            [((g, s), Instance t e)] -> t -> Set t ->
             [((g, s), Instance t e)]
-maybeAug ct escape role ht substs acc t =
-    foldl f acc $ L.filter testNotSolved substs
-    where
-      testNotSolved (_, subst) =
-          not $ carriedOnlyWithin
+maybeAug ct escape role ht substs acc t avoid =
+  answer
+  where
+      answer = foldl f acc $ L.filter testSolved substs
+      testSolved (_, subst) =
+        (not $ carriedOnlyWithinRel
                   (substitute subst ct)
                   (S.map (substitute subst) escape)
                   (substitute subst t)
+                  (S.map (substitute subst) avoid))
       f acc (gen, subst) =
-          case bldInstance role itrace gen of
+        case bldInstance role itrace gen of
             (gen, inst) : _ -> ((gen, subst), inst) : acc
             [] -> acc
           where
@@ -537,8 +536,7 @@
                 t -> p -> [t] -> Node -> t -> Set t ->
                 Cause t -> [(Preskel t g s e, [Sid])]
 addListeners k ct pos eks n t escape cause =
-    [ (k', phi) |
-           t' <- filter (/= t) (S.toList (escapeKeys eks escape)),
+    [ (k', phi) | t' <- filter (/= t) (S.toList (escapeKeys eks escape)),
            (k', n', phi, subst) <- addListener k n cause t',
            maybeSolved ct pos eks escape k' n' subst ]
 
@@ -549,6 +547,67 @@
       f e s = maybe s (flip S.insert s) (decryptionKey e)
       es = S.fromList eks
 
+-- Derive the critical message from exposed relevant values
+algebraSolutions :: Algebra t p g s e c => Preskel t g s e ->
+                t -> p -> [t] -> Node -> t -> Set t -> Set t ->
+                Cause t -> [(Preskel t g s e, [Sid])]
+--algebraSolutions _ _ _ _ _ _ _ _ = []
+algebraSolutions k ct pos eks n t escape ts cause =
+  [ (k', phi) | t' <- filter (/= t) tnums,
+         (k', n', phi, subst) <- algebraSolve k n cause ct t',
+         maybeSolved ct pos eks escape k' n' subst ]
+  where
+    tnums = filter isNum $ S.toList $ fst $ decompose ts (avoid k)
+
+-- algebraSolutions k ct pos eks n t escape cause =
+--    [ k | let anc = ancestors t pos,
+--          subst <- mgus $ solve escape anc (gen k, emptySubst),
+--          (k, n, subst') <- contract k n cause subst,
+--          maybeSolved ct pos eks escape k n subst' ]
+
+-- solveSyncNode
+solveSyncNode :: Algebra t p g s e c => Mode -> Preskel t g s e ->
+                 Node -> Maybe t -> [Preskel t g s e]
+solveSyncNode _ _ _ Nothing =
+  assertError ("Cohort:solveSyncNode: unexpectedly asked to solve Sync node with no current state.")
+solveSyncNode mode k n (Just t) =
+  [ k' | r <- roles (protocol k),
+         k' <- roleSPAugs cause mode k n t r ]
+  where
+    cause = Cause StatePassing n t (S.empty)
+
+roleSPAugs :: Algebra t p g s e c => Cause t -> Mode ->
+              Preskel t g s e -> Node -> t -> Role t -> [Preskel t g s e]
+roleSPAugs cause _ k n t r =
+  [ k' | (subst, inst) <- nextNode t (gen k) r,
+         (k', _, _, _) <- augment k n cause r subst inst True ]
+
+-- Identify all distinct potential next nodes
+nextNode :: Algebra t p g s e c => t -> g -> Role t ->
+            [((g, s), Instance t e)]
+nextNode now g role =
+  loop 1 [] (rtrace role)
+  where
+    -- loop height past acc trace
+    loop _ acc [] = acc
+    loop ht acc (In _ : c) =
+      loop (ht + 1) acc c
+    loop ht acc (Out _ : c) =
+      loop (ht + 1) acc c
+    loop ht acc (Sync (Tran (_, Nothing, _)) : c) =
+      loop (ht + 1) acc c
+    loop ht acc (Sync (Tran (_, Just next, _)) : c) =
+      loop (ht + 1) acc' c
+      where
+        substs = unify now next (cloneRoleVars g role)
+        acc' = foldl f acc substs
+        f acc (gen, subst) =
+          case bldInstance role itrace gen of
+            (gen, inst) : _ -> ((gen, subst), inst) : acc
+            [] -> acc
+          where
+            itrace = map (evtMap $ substitute subst) (take ht (rtrace role))
+
 -- Maximize a realized skeleton if possible
 
 maximize :: Algebra t p g s e c => Preskel t g s e ->
@@ -571,7 +630,7 @@
     | not (preskelWellFormed k') = []
     | otherwise =
         do
-          k'' <- toSkeleton useThinningDuringGeneralization k'
+          k'' <- toSkeleton usePruningDuringGeneralization k'
           case realized k'' && not (isomorphic (gist k) (gist k'')) &&
                refines k'' (pov k'') (prob k'') &&
                refines k (Just k') mapping of
@@ -580,6 +639,6 @@
         where
           realized = null . unrealized
           refines _ Nothing _ =
-              error "Cohort.specialization: cannot find point of view"
+              assertError "Cohort.specialization: cannot find point of view"
           refines k (Just k') mapping =
               not $ null $ homomorphism k' k mapping
diff --git a/src/CPSA/Lib/Debug.hs b/src/CPSA/Lib/Debug.hs
new file mode 100644
--- /dev/null
+++ b/src/CPSA/Lib/Debug.hs
@@ -0,0 +1,68 @@
+-- Debugging functions
+
+-- Copyright (c) 2013 The MITRE Corporation
+--
+-- This program is free software: you can redistribute it and/or
+-- modify it under the terms of the BSD License as published by the
+-- University of California.
+
+module CPSA.Lib.Debug where
+
+import System.IO.Unsafe
+
+z :: Show a => a -> b -> b
+z x y = unsafePerformIO (print x >> return y)
+
+zln :: Show a => a -> b -> b
+zln x y = unsafePerformIO (putStrLn (show x) >> return y)
+
+zz :: Show a => a -> a
+zz x = z x x
+
+zzz :: (Show a, Show b) => a -> b -> b
+zzz x y = zfun (\y -> (x,y)) y
+
+zcond :: Show a => Bool -> a -> b -> b
+zcond True a b = z a b
+zcond _ _ b = b
+
+zzcond :: Show a => (a -> Bool) -> a -> a
+zzcond p x
+  | p x = zz x
+  | otherwise = x
+
+zfcond :: Show c => (b -> Bool) -> (b -> c) -> b -> b
+zfcond p f x = zcond (p x) (f x) x
+
+zmaybe :: Show a => Maybe a -> b -> b
+zmaybe (Just x) y = z x y
+zmaybe _ y = y
+
+zlist :: Show a => [a] -> b -> b
+zlist [] b = b
+zlist (x:xs) b = (zln x (zlist xs b))
+
+zb :: Show a => a -> Bool -> Bool
+zb a False = z a False
+zb _ b = b
+
+zn :: Show a => a -> Maybe b -> Maybe b
+zn x Nothing = z x Nothing
+zn _ y = y
+
+zf :: Show a => a -> Bool -> Bool
+zf x False = z x False
+zf _ y = y
+
+zt :: Show a => a -> Bool -> Bool
+zt x True = z x True
+zt _ y = y
+
+zl :: Show a => [a] -> [a]
+zl a = z (length a) a
+
+zfun :: (Show b) => (a -> b) -> a -> a
+zfun f x = z (f x) x
+
+zlfun :: (Show b) => (a -> [b]) -> a -> a
+zlfun f x = zlist (f x) x
diff --git a/src/CPSA/Lib/DebugLibrary.hs b/src/CPSA/Lib/DebugLibrary.hs
new file mode 100644
--- /dev/null
+++ b/src/CPSA/Lib/DebugLibrary.hs
@@ -0,0 +1,32 @@
+-- Debugging functions
+
+-- Copyright (c) 2013 The MITRE Corporation
+--
+-- This program is free software: you can redistribute it and/or
+-- modify it under the terms of the BSD License as published by the
+-- University of California.
+
+module CPSA.Lib.DebugLibrary where
+
+import CPSA.Lib.Algebra
+import CPSA.Lib.Protocol
+import CPSA.Lib.Strand
+import qualified Data.Set as S
+import Data.Set(Set)
+
+zi :: Algebra t p g s e c => Instance t p g s e c -> String
+zi inst =
+    show (map f e)
+    where
+      domain = rvars (role inst)
+      e = reify domain (env inst)
+      range = map snd e
+      f (x, t) = (displayTerm (context domain) x,
+                  displayTerm (context range) t)
+      context ts = addToContext emptyContext ts
+
+zs :: Algebra t p g s e c => Set t -> String
+zs s =
+    show $ map (displayTerm (addToContext emptyContext ts)) ts
+    where
+      ts = S.toList s
diff --git a/src/CPSA/Lib/Declaration.hs b/src/CPSA/Lib/Declaration.hs
new file mode 100644
--- /dev/null
+++ b/src/CPSA/Lib/Declaration.hs
@@ -0,0 +1,413 @@
+-- Declaration for contraints
+
+-- Copyright (c) 2012 The MITRE Corporation
+--
+-- This program is free software: you can redistribute it and/or
+-- modify it under the terms of the BSD License as published by the
+-- University of California.
+
+module CPSA.Lib.Declaration
+       (Declarations,
+        dknon, dkpnon, dkunique, dkuniqFull, mkDecls, declsUnion, dkuniqgen,
+        tagDeclsTermsOnly, tagDeclsLocsOnly, declFormats, declInputFormats,
+        dterms, dlocs, daux, declInst, declInstAux, DeclInst, dkugenFull,
+        DeclInstList, Declaration, DeclInFormat(..), DeclOutFormat(..),
+        DeclList, declarationRoleTags,
+--        BasicOutFmt, MultiTermOutFmt, NullOutFmt, BasicRoleOutFmt, GeneralOutFmt,
+--        BasicInFmt, MultiTermInFmt, NullInFmt, TwoTermInFmt,
+        declCheck, Loc, avoidTerms,
+        forgetSomeDecls, declsNub, declarationTags, tagDecls, declCheckOrigs,
+        declsMapTerms, declsMapLocations, declsFilterValid, validateDeclMap)
+       where
+
+import Data.List(delete, nub, sortBy)
+import qualified Data.Set as S
+import Data.Set (Set)
+import CPSA.Lib.Utilities
+import CPSA.Lib.Algebra
+import CPSA.Lib.AlgebraLibrary
+
+{-- Debugging support
+import CPSA.Lib.Debug
+-- Also see showst
+--}
+
+class (Eq l, Show l) => Loc l
+
+instance Loc Int
+instance (Loc a, Loc b) => Loc (a, b)
+
+-- exported
+
+-- List of formats for input of declarations
+-- Fields: (fmt, areq, aux)
+--   fmt specifies a descriptive choice for the format, describing
+--   contraints on numbers of terms and nodes in each declared item.
+--   aux is a boolean, specifying whether a sub-name is used.
+--   areq = True means that all the terms must be atoms; this is in
+--   input requirements only.
+data DeclInFormat =
+   BasicInFmt | MultiTermInFmt | NullInFmt | TwoTermInFmt | TermLocInFmt
+   deriving Eq
+
+declInputFormats :: [(DeclInFormat, Bool, Bool)]
+declInputFormats =
+   [(BasicInFmt, True, False),    -- non, pen-non, uniq
+    (TwoTermInFmt, False, False),   -- neq, lt
+    (TwoTermInFmt, False, True),    -- fn-of
+    (NullInFmt, False, True),     -- inst-limit
+    (MultiTermInFmt, False, False),  -- neq-list
+    (BasicInFmt, True, True),      -- subsort
+    (TermLocInFmt, False, False)   -- uniq-gen
+   ]
+
+-- List of formats for output of declarations
+-- Fields: (fmt, aux)
+--   fmt specifies a descriptive choice for the format, describing
+--   contraints on numbers of terms and nodes in each declared item.
+--   aux is a boolean, specifying whether a sub-name is used.
+data DeclOutFormat =
+   BasicOutFmt | MultiTermOutFmt | NullOutFmt | BasicRoleOutFmt | GeneralOutFmt | TermLocOutFmt
+   deriving Eq
+
+declOutputFormats :: [(DeclOutFormat, Bool)]
+declOutputFormats =
+  [(BasicOutFmt, False),
+   (MultiTermOutFmt, False),
+   (MultiTermOutFmt, True),
+   (NullOutFmt, True),
+   (BasicOutFmt, True),
+   (BasicRoleOutFmt, False),
+   (TermLocOutFmt, False),
+   (GeneralOutFmt, False)]
+
+defaultOutFormat :: Int
+defaultOutFormat = ((length declOutputFormats) - 1)
+
+-- Entries are of the form (tag, (infmt, outfmt))
+-- tag is associated with indices into declInputFormats
+-- and declOutputFormats respectively.
+declFormats :: [(String, (Int, Int))]
+declFormats =
+   [("non-orig", (0, 0)),
+    ("pen-non-orig", (0, 0)),
+    ("uniq-orig", (0, 0)),
+    ("uniq-gen", (0, 0)),
+    ("fn-of", (2, 2)),
+--  ("inst-limit", (3, 3)),
+    ("lt", (1, 1)),
+    ("neq", (1, 1)),
+    ("neqlist", (4, defaultOutFormat)),
+    ("subsort", (5, 4)),
+    ("ind-zero", (0, 0)),
+--    ("ind-zero-at", (0, 0)),
+    ("ind-zero-in", (1, 1))
+   ]
+
+-- Formats for use in roles.
+declRFormats :: [(String, (Int, Int))]
+declRFormats =
+   [("non-orig", (0, 5)),
+    ("pen-non-orig", (0, 5))] ++ (drop 2 declFormats)
+
+data DeclInst t l = DeclInst
+     {
+        dterms :: [t],
+        dlocs :: [l],
+        daux :: String }
+     deriving (Show, Eq)
+
+-- Exported
+declInstAux :: [t] -> [l] -> String ->
+               DeclInst t l
+declInstAux ts ls aux =
+   DeclInst { dterms = ts, dlocs = ls, daux = aux }
+
+declInst :: [t] -> [l] -> DeclInst t l
+declInst ts ls = declInstAux ts ls ""
+
+type DeclInstList t l = [DeclInst t l]
+type Declaration t l = (String, DeclInstList t l)
+type DeclList t l = [Declaration t l]
+data Declarations t l = Declarations
+     {
+       dlist :: DeclList t l }
+     deriving Show
+
+mkDecls :: (Algebra t p g s e c, Loc l) => DeclList t l ->
+           Declarations t l
+mkDecls dl = declsNub Declarations { dlist = dl }
+
+dnon :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+        DeclInstList t l
+dnon decls = tagDecls "non-orig" decls
+
+dpnon :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+         DeclInstList t l
+dpnon decls = tagDecls "pen-non-orig" decls
+
+dunique :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+           DeclInstList t l
+dunique decls = tagDecls "uniq-orig" decls
+
+duniqgen :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+           DeclInstList t l
+duniqgen decls = tagDecls "uniq-gen" decls
+
+-- Exported
+dknon :: (Algebra t p g s e c, Loc l) => Declarations t l -> [t]
+dknon d = map head $ map dterms (dnon d)
+
+-- Exported
+dkpnon :: (Algebra t p g s e c, Loc l) => Declarations t l -> [t]
+dkpnon d = map head $ map dterms (dpnon d)
+
+-- Exported
+dkunique :: (Algebra t p g s e c, Loc l) => Declarations t l -> [t]
+dkunique d = map head $ map dterms (dunique d)
+
+dkuniqgen :: (Algebra t p g s e c, Loc l) => Declarations t l -> [t]
+dkuniqgen d = map head $ map dterms (duniqgen d)
+
+-- Exported
+dkuniqFull :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+              [(t,l)]
+dkuniqFull d = map (\x -> (head $ dterms x, head $ dlocs x)) (dunique d)
+
+-- Exported
+dkugenFull :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+              [(t, Maybe l)]
+dkugenFull d = map (\x -> foo x) (duniqgen d)
+               where
+                 foo x
+                   | (length (dlocs x) == 0) = assertError
+                       ("Declaration:dkugenFull something odd happened") -- (head $ dterms x, Nothing)
+                   | otherwise = (head $ dterms x, Just (head $ dlocs x))
+
+modname :: (Algebra t p g s e c, Loc l) => String -> DeclInstList t l ->
+           Declarations t l -> Declarations t l
+modname name ds decls =
+  case lookup name (dlist decls) of
+    Nothing -> mkDecls ((dlist decls) ++ [(name, ds)])
+    Just _ -> mkDecls (map replaceWithds (dlist decls))
+  where
+    replaceWithds (n, ds') = if (n == name) then (n, ds)
+                                          else (n, ds')
+
+-- Exported
+-- Unions together a list of Declarations
+declsUnion :: (Algebra t p g s e c, Loc l) => [Declarations t l] ->
+              Declarations t l
+declsUnion [] = mkDecls []
+declsUnion [d] = d
+declsUnion (d:ds) = mkDecls $ declsMerge (dlistSort $ dlist (declsUnion ds))
+                                         (dlistSort $ dlist d)
+
+-- Unions together a pair of Declarations
+declsMerge :: (Algebra t p g s e c, Loc l) => DeclList t l ->
+              DeclList t l -> DeclList t l
+declsMerge dl dl'
+  | length dl < length dl' = declsMerge dl' dl  -- Can now assume |dl| >= |dl'|
+  | null dl = dl'
+  | null dl' = dl
+  | firstName dl == firstName dl' =
+       [(firstName dl, firstDs dl' ++ firstDs dl)] ++ declsMerge (tail dl) (tail dl')
+  | declCompare (head dl) (head dl') == LT =
+       head dl : declsMerge (tail dl) dl'
+  | otherwise = head dl' : declsMerge dl (tail dl')
+  where
+    firstName dlst = fst (head dlst)
+    firstDs dlst = snd (head dlst)
+
+dlistSort :: DeclList t l -> DeclList t l
+dlistSort dl = sortBy declCompare dl
+
+declCompare :: Declaration t l -> Declaration t l -> Ordering
+declCompare dec1 dec2 = compare (fst dec1) (fst dec2)
+
+-- Exported
+-- MDL: Note "Forgot t" limitation here (use of head)
+forgetSomeDecls :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+                   [(t, Declarations t l)]
+forgetSomeDecls decls =
+  concatMap delNamedDecl (map fst (dlist decls))
+  where
+    delNamedDecl name =
+      [ (head $ dterms d, modname name (delete d (tagDecls name decls)) decls)
+      | d <- tagDecls name decls ]
+
+declsNub :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+            Declarations t l
+declsNub d =
+  -- Do not use the wrap constructor here, since it calls declsNub!
+  Declarations {dlist = (filter declNonEmpty (map nubDecl (dlist d)))}
+  where
+    nubDecl (name, ds) = (name, nub ds)
+    declNonEmpty (_, ds) = not (null ds)
+
+-- Exported
+-- Classifies the declaration tags used in the given Declarations according to format.
+declarationTags :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+                   [(String, (DeclOutFormat, Bool))]
+declarationTags d = nub $ declarationTagsCore d declFormats
+
+-- Exported
+declarationRoleTags :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+                       [(String, (DeclOutFormat, Bool))]
+declarationRoleTags d = nub $ declarationTagsCore d declRFormats
+
+-- Common code for declarationRoleTags and declarationTags.
+-- Looks up the format associated each declaration and pairs the tag with its format.
+-- Since subtags are subsequent words in the tag string, we look up by the first word.
+declarationTagsCore :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+                   [(String, (Int, Int))] -> [(String, (DeclOutFormat, Bool))]
+declarationTagsCore d fmts =
+   map (\ tag -> (tag, declOutputFormats !! (getOutFormat tag))) dtags
+   where
+     dtags = map fst (dlist d)
+     getOutFormat tag = case lookup (tag) fmts of
+                          Nothing -> defaultOutFormat
+                          Just (_,out) -> out
+
+-- Exported
+tagDeclsTermsOnly :: (Algebra t p g s e c, Loc l) => String ->
+                     Declarations t l -> [t]
+tagDeclsTermsOnly tag decls = map head $ map dterms $ tagDecls tag decls
+
+-- Exported
+tagDeclsLocsOnly :: (Algebra t p g s e c, Loc l) => String ->
+                    Declarations t l -> [l]
+tagDeclsLocsOnly tag decls = map head $ map dlocs $ tagDecls tag decls
+
+-- Exported
+tagDecls :: (Algebra t p g s e c, Loc l) => String -> Declarations t l ->
+            DeclInstList t l
+tagDecls tag decls =
+    case lookup tag (dlist decls) of
+      Nothing -> []
+      Just x -> x
+
+-- Exported
+declCheckOrigs :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+                  Declarations t l -> (g, e) -> Bool
+declCheckOrigs d d' env =
+  (S.fromList (map fst $ dlist d) == S.fromList (map fst $ dlist d')) &&
+  (any matchRenaming (checkAllDecls [env] d d' (map fst $ dlist d)))
+
+checkAllDecls :: (Algebra t p g s e c, Loc l) => [(g,e)] -> Declarations t l ->
+                  Declarations t l -> [String] -> [(g,e)]
+checkAllDecls envs _ _ [] = envs
+checkAllDecls envs d d' (tag:tags) = checkAllDecls envs' d d' tags
+  where
+    envs' =
+      [env' | env <- envs,
+       env' <- checkDecl env (tagDecls tag d) (tagDecls tag d')]
+
+checkDecl :: (Algebra t p g s e c, Loc l) => (g,e) -> [DeclInst t l] ->
+             [DeclInst t l] -> [(g,e)]
+checkDecl env [] [] = [env]
+checkDecl env (i:is) is' =
+  do
+    i' <- filter (\inst -> (length (dterms i) == length (dterms inst)) &&
+                           (dlocs i == dlocs inst) &&
+                           (daux i == daux inst)) is'
+    env' <- matchMany (dterms i) (dterms i') env
+    checkDecl env' is (delete i' is')
+checkDecl _ _ _ = []
+
+-- Exported
+declsMapTerms :: (Algebra t p g s e c, Loc l) => (t -> t) ->
+                 Declarations t l -> Declarations t l
+declsMapTerms f decls =
+  mkDecls (map fdecls (dlist decls))
+  where
+    fdecls (name, ds) = (name, map g ds)
+    g dinst = declInstAux (map f $ dterms dinst) (dlocs dinst) (daux dinst)
+
+-- Exported
+declsMapLocations :: (Algebra t p g s e c, Loc l, Loc l') => (l -> l') ->
+                     Declarations t l -> Declarations t l'
+declsMapLocations f decls =
+  mkDecls (map fdecls (dlist decls))
+  where
+    fdecls (name, ds) = (name, map g ds)
+    g dinst = declInstAux (dterms dinst) (map f $ dlocs dinst) (daux dinst)
+
+-- Exported
+declsFilterValid :: (Algebra t p g s e c, Loc l) => [t] -> (l -> Bool) ->
+                    Declarations t l -> Declarations t l
+declsFilterValid terms locValid d =
+  mkDecls (map filterAllDecls (dlist d))
+  where
+    filterAllDecls (n, ds) = (n, filter mentionedIn ds)
+    mentionedIn dinst = varSubset (dterms dinst) terms && all locValid (dlocs dinst)
+
+-- Exported
+validateDeclMap :: (Algebra t p g s e c, Loc l, Loc l') =>
+                   Declarations t l -> Declarations t l' ->
+                   (l -> l') -> e -> Bool
+validateDeclMap d d' locmap env =
+    all okTag (map fst $ dlist d)
+  where
+    okTag tag = all (flip elem (tagDecls tag d')) (map f (tagDecls tag d))
+    f dinst = declInstAux (map (instantiate env) $ dterms dinst)
+                       (map locmap $ dlocs dinst) (daux dinst)
+
+avoidTerms :: (Algebra t p g s e c, Loc l) => Declarations t l -> Set t
+avoidTerms decls =
+  S.unions [ns, as, uos, ugs]
+    where
+      ns = S.fromList (dknon decls)
+      as = S.fromList (dkpnon decls)
+      uos = S.fromList (dkunique decls)
+      ugs = S.fromList (dkuniqgen decls)
+
+-------------------------- Constraint checking, where possible --------------
+declCheck :: (Algebra t p g s e c, Loc l) => Declarations t l ->
+             (Bool, String)
+declCheck d =
+   case doDeclCheck d of
+     Return _ -> (True, "")
+     Fail str -> (False, str)
+   where
+     doDeclCheck d =
+       do
+         failwith "inequality condition violated" $ neqCheck d
+         failwith "lt declarations form a cycle" $ ltCheck d
+         failwith "subsort requirements violated" $ subsortCheck d
+         failwith "[ASSERT FAILED] inst limit requirements violated" $ instlimitCheck d
+
+instlimitCheck :: (Algebra t p g s e c, Loc l) => Declarations t l -> Bool
+instlimitCheck _ = True
+
+neqCheck :: (Algebra t p g s e c, Loc l) => Declarations t l -> Bool
+neqCheck decls =
+   null failures
+   where
+      failures = [s | s <- dts,
+                  length s >= 2,
+                  i <- nats (length s),
+                  j <- nats (length s),
+                  i /= j,
+                  s !! i == s !! j]
+      dts = map dterms ((tagDecls "neq" decls) ++
+                        (tagDecls "neqlist" decls))
+
+ltCheck :: (Algebra t p g s e c, Loc l) => Declarations t l -> Bool
+ltCheck decls =
+   checkAll pairs pairs ((length pairs)-1)
+   where
+     checkAll ltpairs allpairs n
+        | any (\ ts -> length ts < 2) (ltpairs ++ allpairs) = assertError ("Bug in ltcheck!")
+        | any (\ ts -> ts !! 0 == ts !! 1) allpairs = False
+        | n > 0 = checkAll ltpairs (evlv ltpairs allpairs) (n-1)
+        | otherwise = True
+     evlv x y = [[(ts1 !! 0),(ts2 !! 1)]| ts1 <- y, ts2 <- x, ts1 !! 1 == ts2 !! 0]
+     pairs = map dterms (tagDecls "lt" decls)
+
+subsortCheck :: (Algebra t p g s e c, Loc l) => Declarations t l -> Bool
+subsortCheck decls =
+   null failures
+   where
+     failures = [t1 | (tag1,t1) <- pairs, (tag2,t2) <- pairs, t1 == t2, tag1 /= tag2]
+     pairs = map (\ di -> (daux di, head $ dterms di)) $ tagDecls "subsort" decls
diff --git a/src/CPSA/Lib/Displayer.hs b/src/CPSA/Lib/Displayer.hs
--- a/src/CPSA/Lib/Displayer.hs
+++ b/src/CPSA/Lib/Displayer.hs
@@ -12,9 +12,16 @@
 import qualified Data.Set as S
 import CPSA.Lib.SExpr
 import CPSA.Lib.Algebra
+import CPSA.Lib.Declaration
+import CPSA.Lib.State
 import CPSA.Lib.Protocol
 import CPSA.Lib.Strand
+import CPSA.Lib.Utilities
 
+{-- Debugging support
+import CPSA.Lib.Debug
+--}
+
 -- Display of protocols
 
 displayProt :: Algebra t p g s e c => Prot t g -> SExpr ()
@@ -30,10 +37,8 @@
           S () (rname r) :
           L () (S () "vars" : displayVars ctx vars) :
           L () (S () "trace" : displayTrace ctx (rtrace r)) :
-          displayOptional "non-orig" (displayLenTerms ctx (rnon r))
-          (displayOptional "pen-non-orig" (displayLenTerms ctx (rpnon r))
-           (displayOptional "uniq-orig" (displayTerms ctx (runique r))
-           (rcomment r))))
+          displayRoleDeclarations ctx (rdecls r)
+           (rcomment r))
     where
       ctx = varsContext vars
       vars = rvars r
@@ -45,13 +50,38 @@
 displayTerms :: Algebra t p g s e c => c -> [t] -> [SExpr ()]
 displayTerms ctx ts = map (displayTerm ctx) (L.sort ts)
 
-displayLenTerms :: Algebra t p g s e c => c -> [(Maybe Int, t)] -> [SExpr ()]
-displayLenTerms ctx ts = map (displayLenTerm ctx) (L.sort ts)
+displayTermsUnsorted ::Algebra t p g s e c => c -> [t] -> [SExpr ()]
+displayTermsUnsorted ctx ts = map (displayTerm ctx) ts
 
-displayLenTerm :: Algebra t p g s e c => c -> (Maybe Int, t) -> SExpr ()
-displayLenTerm ctx (Nothing, t) = displayTerm ctx t
-displayLenTerm ctx (Just len, t) = L () [N () len, displayTerm ctx t]
+displayTermPlusMaybeOneInts :: Algebra t p g s e c => c ->
+                               RoleDeclInstList t -> [SExpr ()]
+displayTermPlusMaybeOneInts ctx ts = map (displayTermPlusMaybeOneInt ctx) ts
 
+displayTermPlusMaybeOneInt :: Algebra t p g s e c => c ->
+                              RoleDeclInst t -> SExpr ()
+displayTermPlusMaybeOneInt ctx dinst
+    | (length (dlocs dinst) > 1) || (length (dterms dinst) /= 1) =
+      assertError("Displayer.displayTermPlusMaybeOneInt: patterns unexpectedly exhausted in displayer")
+    | (length (dlocs dinst) == 1) = L () [displayTerm ctx
+                                          (head (dterms dinst)),
+                                          N () ((dlocs dinst)!!0)]
+    | otherwise = displayTerm ctx (head (dterms dinst))
+
+displayTermPlusMaybeOneNodes :: Algebra t p g s e c => c ->
+                               SkelDeclInstList t -> [SExpr ()]
+displayTermPlusMaybeOneNodes ctx ts = map (displayTermPlusMaybeOneNode ctx) ts
+
+displayTermPlusMaybeOneNode :: Algebra t p g s e c => c ->
+                              SkelDeclInst t -> SExpr ()
+displayTermPlusMaybeOneNode ctx dinst
+    | (length (dlocs dinst) > 1) || (length (dterms dinst) /= 1) =
+      assertError("Displayer.displayTermPlusMaybeOneNode patterns unexpectedly exhausted in displayer")
+    | (length (dlocs dinst) == 1) = L () [displayTerm ctx
+                                          (head (dterms dinst)),
+                                          L () [N () $ fst $ (dlocs dinst)!!0,
+                                                N () $ snd $ (dlocs dinst)!!0]]
+    | otherwise = displayTerm ctx (head (dterms dinst))
+
 displayOptional :: String -> [SExpr ()] -> [SExpr ()] -> [SExpr ()]
 displayOptional _ [] rest = rest
 displayOptional key value rest =
@@ -64,7 +94,25 @@
     where
       displayDt (In t) = L () [S () "recv", displayTerm ctx t]
       displayDt (Out t) = L () [S () "send", displayTerm ctx t]
+      displayDt (Sync t) = L () (displayTran ctx t)
 
+displayTran :: Algebra t p g s e c => c -> Tran t -> [SExpr ()]
+displayTran ctx (Tran(Just now, Just next, Nothing)) =
+  [S () "tran", displayTerm ctx now,  displayTerm ctx next]
+displayTran ctx (Tran(Just now, Just next, Just label)) =
+  [S () "tran", displayTerm ctx now,  displayTerm ctx next,
+                displayTerm ctx label]
+displayTran ctx (Tran(Just now, Nothing, Nothing)) =
+  [S () "obsv", displayTerm ctx now]
+displayTran ctx (Tran(Just now, Nothing, Just label)) =
+  [S () "obsv", displayTerm ctx now, displayTerm ctx label]
+displayTran ctx (Tran(Nothing, Just next, Nothing)) =
+  [S () "init", displayTerm ctx next]
+displayTran ctx (Tran(Nothing, Just next, Just label)) =
+  [S () "init", displayTerm ctx next, displayTerm ctx label]
+displayTran _ (Tran(Nothing, Nothing, _)) =
+  assertError("Displayer.displayTran: encountered sync node with current or next state")
+
 -- Display of preskeletons
 
 displayPreskel :: Algebra t p g s e c => Preskel t g s e ->
@@ -84,21 +132,161 @@
                c -> [SExpr ()] -> [SExpr ()]
 displayRest k ctx rest =
     displayOptional "precedes" (displayOrdering (orderings k))
-     (displayOptional "non-orig" (displayTerms ctx (knon k))
-      (displayOptional "pen-non-orig" (displayTerms ctx (kpnon k))
-       (displayOptional "uniq-orig" (displayTerms ctx (kunique k))
-        (displayOptional "priority" priorities
-         (kcomment k ++
-          (displayOperation k ctx
-           (displayOptional "traces" traces rest)))))))
+     (displayOptional "leadsto" (displayOrdering (leadsto k))
+      (displayOptional "priority" (displayPriorities (kpriorities k))
+       (displaySkelDeclarations ctx (decls k)
+        (kcomment k ++
+         (displayOperation k ctx
+          (displayOptional "traces" traces rest))))))
+  where
+    traces = map (L () . displayTrace ctx . trace) (insts k)
+
+-- Display declarations
+displaySkelDeclarations :: Algebra t p g s e c =>
+                       c -> SkelDeclarations t ->
+                       [SExpr ()] -> [SExpr ()]
+displaySkelDeclarations ctx decls rest =
+    displaySkelDeclarationList ctx (declarationTags decls) decls rest
+
+displayRoleDeclarations :: Algebra t p g s e c =>
+                       c -> RoleDeclarations t ->
+                       [SExpr ()] -> [SExpr ()]
+displayRoleDeclarations ctx decls rest =
+    displayRoleDeclarationList ctx (declarationRoleTags decls) decls rest
+
+-- Display an individually tagged declaration
+displaySkelDeclarationList :: Algebra t p g s e c => c ->
+                              [(String, (DeclOutFormat, Bool))] ->
+                              SkelDeclarations t -> [SExpr ()] -> [SExpr ()]
+displaySkelDeclarationList _ [] _ rest = rest
+displaySkelDeclarationList ctx (a:b) decls rest =
+    displaySkelDeclaration ctx a decls
+      (displaySkelDeclarationList ctx b decls rest)
+
+displayRoleDeclarationList :: Algebra t p g s e c => c ->
+                              [(String, (DeclOutFormat, Bool))] ->
+                              RoleDeclarations t -> [SExpr ()] -> [SExpr ()]
+displayRoleDeclarationList _ [] _ rest = rest
+displayRoleDeclarationList ctx (a:b) decls rest =
+    displayRoleDeclaration ctx a decls
+      (displayRoleDeclarationList ctx b decls rest)
+
+displaySkelDeclaration :: Algebra t p g s e c => c ->
+                          (String, (DeclOutFormat, Bool)) ->
+                          SkelDeclarations t -> [SExpr ()] -> [SExpr ()]
+displaySkelDeclaration ctx (tag, (BasicOutFmt, True)) decls rest =
+    displaySkelAuxDeclaration ctx tag (tagDecls tag decls) rest
+displaySkelDeclaration ctx (tag, (MultiTermOutFmt, True)) decls rest =
+    displaySkelAuxDeclaration2 ctx tag (tagDecls tag decls) rest
+displaySkelDeclaration ctx (tag, (BasicOutFmt, False)) decls rest =
+    displayOptional tag (displayTerms ctx (tagDeclsTermsOnly tag decls)) rest
+displaySkelDeclaration ctx (tag, (GeneralOutFmt, False)) decls rest =
+    displayOptional tag (displaySkelDeclGen ctx (tagDecls tag decls)) rest
+displaySkelDeclaration ctx (tag, (BasicRoleOutFmt, False)) decls rest =
+    displayOptional tag (displayTermPlusMaybeOneNodes ctx (tagDecls tag decls)) rest
+displaySkelDeclaration ctx (tag, (MultiTermOutFmt, False)) decls rest =
+    displayOptional tag (map (\ item -> (L () (displayTermsUnsorted ctx (dterms item))))
+                         (tagDecls tag decls)) rest
+displaySkelDeclaration _ (tag,_) _ _ =
+    assertError("Displayer.displaySkelDeclaration: skel output format not supported yet: " ++ tag)
+
+displaySkelAuxDeclaration :: Algebra t p g s e c => c -> String ->
+        SkelDeclInstList t -> [SExpr ()] -> [SExpr ()]
+displaySkelAuxDeclaration ctx tag dis rest =
+    (L () (S () tag:(dAuxDecl (L.sort (L.nub $ map daux dis)) )):rest)
     where
-      priorities = map displayPriority (kpriority k)
-      traces = map (L () . displayTrace ctx . trace) (insts k)
+      dAuxDecl [] = []
+      dAuxDecl (stag:r) = ((L () (S () stag:
+                                  (displayTerms ctx
+                                   (concatMap dterms
+                                    (filter (\di -> daux di == stag) dis)))))
+                           :dAuxDecl r)
 
-displayPriority :: (Node, Int) -> SExpr ()
-displayPriority (n, p) =
-    L () [displayNode n, N () p]
+displaySkelAuxDeclaration2 :: Algebra t p g s e c => c -> String ->
+        SkelDeclInstList t -> [SExpr ()] -> [SExpr ()]
+displaySkelAuxDeclaration2 ctx tag dis rest =
+    (L () (S () tag:(dAuxDecl (L.sort (L.nub $ map daux dis)))):rest)
+    where
+      dAuxDecl [] = []
+      dAuxDecl (stag:r) = ((L () (S () stag:
+                                  (dAuxDecl2 (filter (\di -> daux di == stag) dis)))):
+                           (dAuxDecl r))
+      dAuxDecl2 [] = []
+      dAuxDecl2 (di:r) = ((L () (displayTermsUnsorted ctx (dterms di))):
+                          (dAuxDecl2 r))
 
+displayRoleAuxDeclaration :: Algebra t p g s e c => c -> String ->
+        RoleDeclInstList t -> [SExpr ()] -> [SExpr ()]
+displayRoleAuxDeclaration ctx tag dis rest =
+    (L () (S () tag:(dAuxDecl (L.sort (L.nub $ map daux dis)) )):rest)
+    where
+      dAuxDecl [] = []
+      dAuxDecl (stag:r) = ((L () (S () stag:
+                                  (displayTerms ctx
+                                   (concatMap dterms
+                                    (filter (\di -> daux di == stag) dis)))))
+                           :dAuxDecl r)
+
+displayRoleAuxDeclaration2 :: Algebra t p g s e c => c -> String ->
+        RoleDeclInstList t -> [SExpr ()] -> [SExpr ()]
+displayRoleAuxDeclaration2 ctx tag dis rest =
+    (L () (S () tag:(dAuxDecl (L.sort (L.nub $ map daux dis)))):rest)
+    where
+      dAuxDecl [] = []
+      dAuxDecl (stag:r) = ((L () (S () stag:
+                                  (dAuxDecl2 (filter (\di -> daux di == stag) dis)))):
+                           (dAuxDecl r))
+      dAuxDecl2 [] = []
+      dAuxDecl2 (di:r) = ((L () (displayTermsUnsorted ctx (dterms di))):
+                          (dAuxDecl2 r))
+
+displayRoleDeclaration :: Algebra t p g s e c => c ->
+                          (String, (DeclOutFormat, Bool)) ->
+                          RoleDeclarations t -> [SExpr ()] -> [SExpr ()]
+displayRoleDeclaration ctx (tag, (BasicOutFmt, True)) decls rest =
+    displayRoleAuxDeclaration ctx tag (tagDecls tag decls) rest
+displayRoleDeclaration ctx (tag, (BasicOutFmt, False)) decls rest =
+    displayOptional tag (displayTerms ctx (tagDeclsTermsOnly tag decls)) rest
+displayRoleDeclaration ctx (tag, (MultiTermOutFmt, True)) decls rest =
+    displayRoleAuxDeclaration2 ctx tag (tagDecls tag decls) rest
+displayRoleDeclaration ctx (tag, (MultiTermOutFmt, False)) decls rest =
+    displayOptional tag (map (\ item -> (L () (displayTermsUnsorted ctx (dterms item))))
+                         (tagDecls tag decls)) rest
+displayRoleDeclaration ctx (tag, (BasicRoleOutFmt, False)) decls rest =
+    displayOptional tag (displayTermPlusMaybeOneInts ctx (tagDecls tag decls)) rest
+displayRoleDeclaration ctx (tag, (GeneralOutFmt, False)) decls rest =
+    displayOptional tag (displayRoleDeclGen ctx (tagDecls tag decls)) rest
+displayRoleDeclaration _ (tag,_) _ _ =
+    assertError("Displayer.displayRoleDeclaration: role output format not supported yet: " ++ tag)
+
+displaySkelDeclGen :: (Algebra t p g s e c) => c -> SkelDeclInstList t ->
+                      [SExpr ()]
+displaySkelDeclGen _ [] = []
+displaySkelDeclGen ctx (d:ds) =
+    displaySkelDeclGenItem ctx d (displaySkelDeclGen ctx ds)
+
+displayRoleDeclGen :: (Algebra t p g s e c) => c -> RoleDeclInstList t ->
+                      [SExpr ()]
+displayRoleDeclGen _ [] = []
+displayRoleDeclGen ctx (d:ds) =
+    displayRoleDeclGenItem ctx d (displayRoleDeclGen ctx ds)
+
+displaySkelDeclGenItem :: (Algebra t p g s e c) => c -> SkelDeclInst t ->
+                          [SExpr ()] -> [SExpr ()]
+displaySkelDeclGenItem ctx dinst rest =
+    (L () ((L () (displayTermsUnsorted ctx ts)):(displayNodes ns)): rest)
+    where
+        ts = dterms dinst
+        ns = dlocs dinst
+
+displayRoleDeclGenItem :: (Algebra t p g s e c) => c -> RoleDeclInst t ->
+                          [SExpr ()] -> [SExpr ()]
+displayRoleDeclGenItem ctx dinst rest =
+    (L () ((L () (displayTermsUnsorted ctx ts)):(displayInts ns)): rest)
+    where
+        ts = dterms dinst
+        ns = dlocs dinst
+
 displayInst :: Algebra t p g s e c => c ->
                Instance t e -> SExpr ()
 displayInst ctx s =
@@ -119,6 +307,14 @@
 displayMaplet domain range (x, t)=
     L () [displayTerm domain x, displayTerm range t]
 
+displayPriorities :: [(Node,Int)] -> [SExpr ()]
+displayPriorities priorities =
+    map displayPriority priorities
+
+displayPriority :: (Node,Int) -> SExpr ()
+displayPriority ((s,i),p) =
+    L () [L () [N () s, N () i], N () p]
+
 displayOrdering :: [Pair] -> [SExpr ()]
 displayOrdering orderings =
     map displayPair (L.sort orderings)
@@ -127,6 +323,14 @@
 displayPair (n0, n1) =
     L () [displayNode n0, displayNode n1]
 
+displayInts :: [Int] -> [SExpr ()]
+displayInts [] = []
+displayInts (i:is) = (N () i):(displayInts is)
+
+displayNodes :: [Node] -> [SExpr ()]
+displayNodes [] = []
+displayNodes (n:ns) = [displayNode n] ++ displayNodes ns
+
 displayNode :: Node -> SExpr ()
 displayNode (s, p) = L () [N () s, N () p]
 
@@ -148,6 +352,9 @@
           (L () [S () "added-strand", S () role, N () height]) cause
       AddedListener t cause ->
           displayCause (L () [S () "added-listener", displayOpTerm ctx t]) cause
+      AlgebraSolved subst cause ->
+          let substitution = displaySubst ctx subst in
+          displayCause (L () (S () "algebra-contracted" : substitution)) cause
       Generalized method ->
           let desc = displayMethod ctx method in
           L () (S () "operation" : S () "generalization" : desc) : rest
@@ -164,6 +371,7 @@
                 displayOpTerms ctx (S.toList escape)) : rest
       displayDirection Encryption = S () "encryption-test"
       displayDirection Nonce = S () "nonce-test"
+      displayDirection StatePassing = S () "state-passing-test"
       displayMethod _ (Deleted node) =
           [S () "deleted", displayNode node]
       displayMethod _ (Weakened (n0, n1)) =
diff --git a/src/CPSA/Lib/Entry.hs b/src/CPSA/Lib/Entry.hs
--- a/src/CPSA/Lib/Entry.hs
+++ b/src/CPSA/Lib/Entry.hs
@@ -77,6 +77,7 @@
       optCheckNoncesFirst :: Bool, -- True when checking nonces first
       optTryOldStrandsFirst :: Bool, -- True when visiting old strands first
       optTryYoungNodesFirst :: Bool, -- True when visiting young nodes first
+      optGoalsSat :: Bool , -- True when goals satisfied stops tree expansion
       optLimit :: Int,          -- Step count limit
       optBound :: Int,          -- Strand cound bound
       optMargin :: Int,         -- Output line length
@@ -92,8 +93,9 @@
   optCheckNoncesFirst = False,
   optTryOldStrandsFirst = False,
   optTryYoungNodesFirst = False,
+  optGoalsSat = False,
   optLimit = 2000,
-  optBound = 8,
+  optBound = 12,
   optMargin = 72,
   optIndent = 2 }
 
diff --git a/src/CPSA/Lib/Expand.hs b/src/CPSA/Lib/Expand.hs
--- a/src/CPSA/Lib/Expand.hs
+++ b/src/CPSA/Lib/Expand.hs
@@ -94,7 +94,7 @@
 
 symbol :: Monad m => SExpr Pos -> m String
 symbol (S _ string) = return string
-symbol x = fail (shows (annotation x) "Expecting a symbol")
+symbol x = fail (shows (annotation x) "Malformed macro: Expecting a symbol")
 
 -- Expand an S-expression using a given set of macros
 
diff --git a/src/CPSA/Lib/Goal.hs b/src/CPSA/Lib/Goal.hs
--- a/src/CPSA/Lib/Goal.hs
+++ b/src/CPSA/Lib/Goal.hs
@@ -20,6 +20,8 @@
   | Pnon t
   | Uniq t
   | UniqAt t t
+  | UgenAt t t
+  | Ugen t
   | Equals t t
   deriving Show
 
@@ -38,6 +40,8 @@
 aFormOrder (RolePred _ _ _) (Pnon _) = LT
 aFormOrder (RolePred _ _ _) (Uniq _) = LT
 aFormOrder (RolePred _ _ _) (UniqAt _ _) = LT
+aFormOrder (RolePred _ _ _) (UgenAt _ _) = LT
+aFormOrder (RolePred _ _ _) (Ugen _) = LT
 aFormOrder (RolePred _ _ _) (Equals _ _) = LT
 aFormOrder (ParamPred _ _ _ _) (RolePred _ _ _) = GT
 aFormOrder (ParamPred _ _ _ _) (ParamPred _ _ _ _) = EQ
@@ -47,6 +51,8 @@
 aFormOrder (ParamPred _ _ _ _) (Pnon _) = LT
 aFormOrder (ParamPred _ _ _ _) (Uniq _) = LT
 aFormOrder (ParamPred _ _ _ _) (UniqAt _ _) = LT
+aFormOrder (ParamPred _ _ _ _) (UgenAt _ _) = LT
+aFormOrder (ParamPred _ _ _ _) (Ugen _) = LT
 aFormOrder (ParamPred _ _ _ _) (Equals _ _) = LT
 aFormOrder (StrPrec _ _) (RolePred _ _ _) = GT
 aFormOrder (StrPrec _ _) (ParamPred _ _ _ _) = GT
@@ -56,6 +62,8 @@
 aFormOrder (StrPrec _ _) (Pnon _) = LT
 aFormOrder (StrPrec _ _) (Uniq _) = LT
 aFormOrder (StrPrec _ _) (UniqAt _ _) = LT
+aFormOrder (StrPrec _ _) (UgenAt _ _) = LT
+aFormOrder (StrPrec _ _) (Ugen _) = LT
 aFormOrder (StrPrec _ _) (Equals _ _) = LT
 aFormOrder (Prec _ _) (RolePred _ _ _) = GT
 aFormOrder (Prec _ _) (ParamPred _ _ _ _) = GT
@@ -65,6 +73,8 @@
 aFormOrder (Prec _ _) (Pnon _) = LT
 aFormOrder (Prec _ _) (Uniq _) = LT
 aFormOrder (Prec _ _) (UniqAt _ _) = LT
+aFormOrder (Prec _ _) (UgenAt _ _) = LT
+aFormOrder (Prec _ _) (Ugen _) = LT
 aFormOrder (Prec _ _) (Equals _ _) = LT
 aFormOrder (Non _) (RolePred _ _ _) = GT
 aFormOrder (Non _) (ParamPred _ _ _ _) = GT
@@ -74,6 +84,8 @@
 aFormOrder (Non _) (Pnon _) = LT
 aFormOrder (Non _) (Uniq _) = LT
 aFormOrder (Non _) (UniqAt _ _) = LT
+aFormOrder (Non _) (UgenAt _ _) = LT
+aFormOrder (Non _) (Ugen _) = LT
 aFormOrder (Non _) (Equals _ _) = LT
 aFormOrder (Pnon _) (RolePred _ _ _) = GT
 aFormOrder (Pnon _) (ParamPred _ _ _ _) = GT
@@ -83,6 +95,8 @@
 aFormOrder (Pnon _) (Pnon _) = EQ
 aFormOrder (Pnon _) (Uniq _) = LT
 aFormOrder (Pnon _) (UniqAt _ _) = LT
+aFormOrder (Pnon _) (UgenAt _ _) = LT
+aFormOrder (Pnon _) (Ugen _) = LT
 aFormOrder (Pnon _) (Equals _ _) = LT
 aFormOrder (Uniq _) (RolePred _ _ _) = GT
 aFormOrder (Uniq _) (ParamPred _ _ _ _) = GT
@@ -92,6 +106,8 @@
 aFormOrder (Uniq _) (Pnon _) = GT
 aFormOrder (Uniq _) (Uniq _) = EQ
 aFormOrder (Uniq _) (UniqAt _ _) = LT
+aFormOrder (Uniq _) (UgenAt _ _) = LT
+aFormOrder (Uniq _) (Ugen _) = LT
 aFormOrder (Uniq _) (Equals _ _) = LT
 aFormOrder (UniqAt _ _) (RolePred _ _ _) = GT
 aFormOrder (UniqAt _ _) (ParamPred _ _ _ _) = GT
@@ -101,7 +117,31 @@
 aFormOrder (UniqAt _ _) (Pnon _) = GT
 aFormOrder (UniqAt _ _) (Uniq _) = GT
 aFormOrder (UniqAt _ _) (UniqAt _ _) = EQ
+aFormOrder (UniqAt _ _) (UgenAt _ _) = LT
+aFormOrder (UniqAt _ _) (Ugen _) = LT
 aFormOrder (UniqAt _ _) (Equals _ _) = LT
+aFormOrder (UgenAt _ _) (RolePred _ _ _) = GT
+aFormOrder (UgenAt _ _) (ParamPred _ _ _ _) = GT
+aFormOrder (UgenAt _ _) (StrPrec _ _) = GT
+aFormOrder (UgenAt _ _) (Prec _ _) = GT
+aFormOrder (UgenAt _ _) (Non _) = GT
+aFormOrder (UgenAt _ _) (Pnon _) = GT
+aFormOrder (UgenAt _ _) (Uniq _) = GT
+aFormOrder (UgenAt _ _) (UniqAt _ _) = GT
+aFormOrder (UgenAt _ _) (UgenAt _ _) = EQ
+aFormOrder (UgenAt _ _) (Ugen _) = LT
+aFormOrder (UgenAt _ _) (Equals _ _) = LT
+aFormOrder (Ugen _) (RolePred _ _ _) = GT
+aFormOrder (Ugen _) (ParamPred _ _ _ _) = GT
+aFormOrder (Ugen _) (StrPrec _ _) = GT
+aFormOrder (Ugen _) (Prec _ _) = GT
+aFormOrder (Ugen _) (Non _) = GT
+aFormOrder (Ugen _) (Pnon _) = GT
+aFormOrder (Ugen _) (Uniq _) = GT
+aFormOrder (Ugen _) (UniqAt _ _) = GT
+aFormOrder (Ugen _) (UgenAt _ _) = GT
+aFormOrder (Ugen _) (Ugen _) = EQ
+aFormOrder (Ugen _) (Equals _ _) = LT
 aFormOrder (Equals _ _) (RolePred _ _ _) = GT
 aFormOrder (Equals _ _) (ParamPred _ _ _ _) = GT
 aFormOrder (Equals _ _) (StrPrec _ _) = GT
@@ -110,4 +150,6 @@
 aFormOrder (Equals _ _) (Pnon _) = GT
 aFormOrder (Equals _ _) (Uniq _) = GT
 aFormOrder (Equals _ _) (UniqAt _ _) = GT
+aFormOrder (Equals _ _) (UgenAt _ _) = GT
+aFormOrder (Equals _ _) (Ugen _) = GT
 aFormOrder (Equals _ _) (Equals _ _) = EQ
diff --git a/src/CPSA/Lib/Loader.hs b/src/CPSA/Lib/Loader.hs
--- a/src/CPSA/Lib/Loader.hs
+++ b/src/CPSA/Lib/Loader.hs
@@ -9,21 +9,20 @@
 module CPSA.Lib.Loader (loadSExprs) where
 
 import Control.Monad
-import Control.Applicative
 import qualified Data.List as L
-import Data.Maybe (isJust)
 import CPSA.Lib.Utilities
 import CPSA.Lib.SExpr
 import CPSA.Lib.Algebra
+import CPSA.Lib.AlgebraLibrary
+import CPSA.Lib.Declaration
+import CPSA.Lib.State
 import CPSA.Lib.Protocol
 import CPSA.Lib.Goal
 import CPSA.Lib.Strand
 import CPSA.Lib.Characteristic
 
-{--
-import System.IO.Unsafe
-z :: Show a => a -> b -> b
-z x y = unsafePerformIO (print x >> return y)
+{-- Debugging support
+import CPSA.Lib.Debug
 --}
 
 -- Load protocols and preskeletons from a list of S-expressions, and
@@ -103,50 +102,213 @@
     do
       (gen, vars) <- loadVars gen vars
       c <- loadTrace vars (evt : c)
-      n <- loadPosBaseTerms vars (assoc "non-orig" rest)
-      a <- loadPosBaseTerms vars (assoc "pen-non-orig" rest)
-      u <- loadBaseTerms vars (assoc "uniq-orig" rest)
-      comment <- alist ["non-orig", "pen-non-orig", "uniq-orig"] rest
-      let reverseSearch = hasKey "reverse-search" rest
+
       let ts = tterms c
-      case termsWellFormed (map snd n ++ map snd a ++ u ++ ts) of
-        False -> fail (shows pos "Terms in role not well formed")
-        True -> return ()
       -- Drop unused variable declarations
       let vs = L.filter (\v->elem v (varsInTerms ts)) vars
-      -- Drop rnons that refer to unused variable declarations
-      let ns = L.filter (varsSeen vs . snd) n
-      -- Drop rpnons that refer to unused variable declarations
-      let as = L.filter (varsSeen vs . snd) a
-      -- Drop runiques that refer to unused variable declarations
-      let us = L.filter (varsSeen vs) u
+
+      others <- loadGenRoleDecls (length c) vars (assocDecls rest)
+      predefs <- loadAllPredefRoleDecls (length c) vars rest
+
+      let dlist = filterVarsSeen (varsSeen vs) $ predefs ++ others
+      comment <- alist (map fst declFormats) rest
+      let reverseSearch = hasKey "reverse-search" rest
+      case termsWellFormed ((termsInDlist predefs) ++ ts ++ (termsInDlist others)) of
+        False -> fail (shows pos "Terms in role not well formed")
+        True -> return ()
       prios <- mapM (loadRolePriority (length c)) (assoc "priority" rest)
-      let r = mkRole name vs c ns as us comment prios reverseSearch
+      let r = mkRole name vs c dlist prios comment reverseSearch
       case roleWellFormed r of
         Return () -> return (gen, r)
         Fail msg -> fail (shows pos $ showString "Role not well formed: " msg)
+    where
+      termsInDlist olist = concat $ map dterms (concatMap snd olist)
+      filterVarsSeen tst olist =
+        map (\ (name,dlist) -> (name, filter (\ dinst -> all tst (dterms dinst))
+                                      dlist)) olist
+
 loadRole _ pos _ = fail (shows pos "Malformed role")
 
--- Like Either String but with fail method defined
-data ReturnFail a
-    = Return a
-    | Fail String
+loadAllPredefRoleDecls :: (Algebra t p g s e c, Monad m) => Int -> [t] ->
+                          [SExpr Pos] -> m [RoleDeclaration t]
+loadAllPredefRoleDecls height vars exprs =
+    do
+      let formats = map (\ (tag, (i,_)) -> (tag, declInputFormats !! i)) declFormats
+      result <- concatMapM (\ i -> loadPredefRoleDeclsAux height vars
+                                   (fst $ formats !! i) (snd $ formats !! i)
+                                   (assoc (fst $ formats !! i) exprs))
+                (nats (length formats))
+      return result
 
-instance Functor (ReturnFail) where
-    fmap _ (Fail x) = Fail x
-    fmap f (Return y) = Return (f y)
+loadAllPredefSkelDecls :: (Algebra t p g s e c, Monad m) => [Int] -> [t] ->
+                          [SExpr Pos] -> m ([SkelDeclaration t])
+loadAllPredefSkelDecls heights vars exprs =
+    do
+      let formats = map (\ (tag, (i,_)) -> (tag, declInputFormats !! i)) declFormats
+      result <- concatMapM (\ i -> loadPredefSkelDeclsAux heights vars
+                                   (fst $ formats !! i)
+                                   (snd $ formats !! i)
+                                   (assoc (fst $ formats !! i) exprs))
+                (nats (length formats))
+      return result
 
-instance Applicative (ReturnFail) where
-    pure          = Return
-    Fail e <*> _ = Fail e
-    Return f <*> r = fmap f r
+loadPredefRoleDeclsAux :: (Algebra t p g s e c, Monad m) => Int -> [t] -> String ->
+                       (DeclInFormat, Bool, Bool) ->
+                       [SExpr Pos] -> m [(RoleDeclaration t)]
+loadPredefRoleDeclsAux _ _ _ _ [] = do return []
+loadPredefRoleDeclsAux height vars tag (fmt,areq,False) exprs =
+    do (tg,insts) <- loadPredefRoleDecls height vars tag "" fmt areq exprs
+       case (null insts) of
+         True -> return []
+         False -> return [(tg,insts)]
+loadPredefRoleDeclsAux height vars tag (fmt,areq,True)
+    ((L _ (S _ subtag:rest)):others) =
+    do
+        f <- loadPredefRoleDecls height vars tag subtag fmt areq rest
+        r <- loadPredefRoleDeclsAux height vars tag (fmt,areq,True) others
+        return [(fst f, ((snd f)++(concat $ map snd r)))]
+loadPredefRoleDeclsAux height vars tag (fmt,areq,True)
+    ((L pos1 ((Q pos subtag):rest)):others) =
+    do
+       r <- loadPredefRoleDeclsAux height vars tag (fmt,areq,True)
+             ((L pos1 ((S pos ("\"" ++ subtag ++ "\"")):rest)):others)
+       return r
+loadPredefRoleDeclsAux _ _ _ _ (x@(L _ ((N _ _):_)):_) =
+    fail (shows (annotation x) ("Malformed declaration: symbol or string subtag expected"))
+loadPredefRoleDeclsAux _ _ tag _ (x:_) =
+    fail (shows (annotation x) ("Malformed declaration: subtag required " ++ tag))
 
-instance Monad ReturnFail where
-    return = Return
-    Fail l >>= _ = Fail l
-    Return r >>= k = k r
-    fail s = Fail s
+loadPredefSkelDeclsAux :: (Algebra t p g s e c, Monad m) => [Int] -> [t] -> String ->
+                       (DeclInFormat, Bool, Bool) ->
+                       [SExpr Pos] -> m [(SkelDeclaration t)]
+loadPredefSkelDeclsAux _ _ _ _ [] = do return []
+loadPredefSkelDeclsAux height vars tag (fmt,areq,False) exprs =
+    do (tg,insts) <- loadPredefSkelDecls height vars tag "" fmt areq exprs
+       case (null insts) of
+         True -> return []
+         False -> return [(tg,insts)]
+loadPredefSkelDeclsAux height vars tag (fmt,areq,True)
+    ((L _ (S _ subtag:rest)):others) =
+    do
+        f <- loadPredefSkelDecls height vars tag subtag fmt areq rest
+        r <- loadPredefSkelDeclsAux height vars tag (fmt,areq,True) others
+        return [(fst f, ((snd f)++(concat $ map snd r)))]
+loadPredefSkelDeclsAux height vars tag (fmt,areq,True)
+    ((L pos1 ((Q pos subtag):rest)):others) =
+    do r <- loadPredefSkelDeclsAux height vars tag (fmt,areq,True)
+             ((L pos1 ((S pos ("\"" ++ subtag ++ "\"")):rest)):others)
+       return r
+loadPredefSkelDeclsAux _ _ _ _ (x@(L _ ((N _ _):_)):_) =
+    fail (shows (annotation x) ("Malformed declaration: symbol or string subtag expected"))
+loadPredefSkelDeclsAux _ _ tag _ (x:_) =
+     fail (shows (annotation x) ("Malformed declaration: subtag required " ++ tag))
+-- loadPredefSkelDeclsAux _ _ _ (_,_,True) _ = do return []
 
+loadPredefRoleDecls :: (Algebra t p g s e c, Monad m) => Int -> [t] -> String ->
+                       String -> DeclInFormat -> Bool ->
+                       [SExpr Pos] -> m (RoleDeclaration t)
+-- Anything with no expressions: not present, return an empty list of instances.
+loadPredefRoleDecls _ _ tag _ _ _ [] = do return (tag,[])
+-- NullInFmt: return an empty instance.
+loadPredefRoleDecls _ _ tag stag NullInFmt _ _ =
+   return (tag, [declInstAux [] [] stag])
+-- BasicInFmt, True format: get (Maybe Int, t) pairs, then reform.
+loadPredefRoleDecls height vars tag stag BasicInFmt True exprs =
+    do
+       -- Note: since areq = True, appropriate to use loadPosBaseTerms.
+       result <- loadPosBaseTerms vars exprs
+       return (tag, filter (\ di -> (all (< height) (dlocs di)) &&
+                                    (all (>= 0) (dlocs di))) $ map f result)
+    where
+       f (Nothing, t) = declInstAux [t] [] stag
+       f (Just p, t) = declInstAux [t] [p] stag
+-- TwoTermInFmt, False format
+loadPredefRoleDecls height vars tag stag TwoTermInFmt False (x1:rest) =
+    do
+       inst1 <- loadRoleTermPairPlusMaybeOneLoc height vars stag x1
+       (tg, insts) <- loadPredefRoleDecls height vars tag stag
+                      TwoTermInFmt False rest
+       return (tg, (inst1:insts))
+-- MultiTermInFmt, False format: load as generic, but
+-- check max locations = 1
+loadPredefRoleDecls height vars tag stag MultiTermInFmt False (x1:rest) =
+    do
+       dinst <- loadGenRoleDecl height vars stag x1
+       (tg, insts) <- loadPredefRoleDecls height vars tag
+                      stag MultiTermInFmt False rest
+       case (length (dlocs dinst) > 1) of
+         True -> fail (shows (annotation x1) "Too many locations in declaration")
+         False -> return (tg, (dinst:insts))
+-- Default: not supported.
+loadPredefRoleDecls _ _ _ _ _ _ xs =
+    if (null xs)
+       then fail ("[ASSERT FAILED] Input format not supported")
+       else fail (shows (annotation (head xs)) "[ASSERT FAILED] Input format not supported")
+
+loadPredefSkelDecls :: (Algebra t p g s e c, Monad m) => [Int] -> [t] -> String ->
+                       String -> DeclInFormat -> Bool ->
+                       [SExpr Pos] -> m (SkelDeclaration t)
+-- Anything with no expressions: not present, return an empty list of instances.
+loadPredefSkelDecls _ _ tag _ _ _ [] = return (tag,[])
+-- NullInFmt format: return an empty instance.
+loadPredefSkelDecls _ _ tag stag NullInFmt _ _ =
+   return (tag, [declInstAux [] [] stag])
+-- BasicInFmt, True format: get (Maybe Int, t) pairs, then reform.
+loadPredefSkelDecls _ vars tag stag BasicInFmt True exprs =
+    do
+       -- Note: since areq = True, appropriate to use loadBaseTerms.
+       result <- loadBaseTerms vars exprs
+       return (tag, map f result)
+    where
+       f t = declInstAux [t] [] stag
+-- TwoTermInFmt, False format
+loadPredefSkelDecls heights vars tag stag TwoTermInFmt False (x1:rest) =
+    do
+       inst1 <- loadSkelTermPair vars stag x1
+       (tg, insts) <- loadPredefSkelDecls heights vars tag stag
+                      TwoTermInFmt False rest
+       return (tg, (inst1:insts))
+-- (Just 2, Nothing), Nothing, False format: load as generic, but
+-- check max locations = 1
+loadPredefSkelDecls heights vars tag stag MultiTermInFmt False (x1:rest) =
+    do
+       dinst <- loadGenSkelDecl heights vars stag x1
+       (tg, insts) <- loadPredefSkelDecls heights vars tag stag MultiTermInFmt
+                      False rest
+       case (length (dlocs dinst) > 1) of
+         True -> fail (shows (annotation x1) "Too many locations in declaration")
+         False -> return (tg, (dinst:insts))
+-- Default: not supported.
+loadPredefSkelDecls _ _ _ _ _ _ xs =
+    if (null xs)
+       then fail ("[ASSERT FAILED] Input format not supported")
+       else fail (shows (annotation (head xs)) "[ASSERT FAILED] Input format not supported")
+
+loadRoleTermPairPlusMaybeOneLoc :: (Algebra t p g s e c, Monad m) => Int ->
+                                   [t] -> String ->
+                                   SExpr Pos -> m (RoleDeclInst t)
+loadRoleTermPairPlusMaybeOneLoc _ vars stag (L _ [x1, x2]) =
+    do
+       t1 <- loadTerm vars False x1
+       t2 <- loadTerm vars False x2
+       return (declInstAux [t1,t2] [] stag)
+loadRoleTermPairPlusMaybeOneLoc height vars stag (L _ [x1, x2, x3]) =
+    do
+       t1 <- loadTerm vars False x1
+       t2 <- loadTerm vars False x2
+       p <- loadIntMax height x3
+       return (declInstAux [t1,t2] [p] stag)
+loadRoleTermPairPlusMaybeOneLoc _ _ _ _ = fail ("Malformed pair of terms")
+
+loadSkelTermPair :: (Algebra t p g s e c, Monad m) => [t] -> String ->
+                                   SExpr Pos -> m (SkelDeclInst t)
+loadSkelTermPair vars stag (L _ [x1, x2]) =
+    do
+       t1 <- loadTerm vars False x1
+       t2 <- loadTerm vars False x2
+       return (declInstAux [t1,t2] [] stag)
+loadSkelTermPair _ _ _ = fail ("Malformed pair of terms")
+
 loadRolePriority :: Monad m => Int -> SExpr Pos -> m (Int, Int)
 loadRolePriority n (L _ [N _ i, N _ p])
     | 0 <= i && i < n = return (i, p)
@@ -157,55 +319,6 @@
 varsSeen vs t =
     all (flip elem vs) (addVars [] t)
 
--- A role is well formed if all non-base variables are receive bound,
--- each atom declared to be uniquely-originating originates in
--- the trace, and every variable that occurs in each atom
--- declared to be non-originating occurs in some term in the trace,
--- and the atom must never be carried by any term in the trace.
-roleWellFormed :: (Monad m, Algebra t p g s e c) => Role t -> m ()
-roleWellFormed role =
-    do
-      failwith "a variable in non-orig is not in trace"
-                   $ varSubset (map snd $ rnon role) terms
-      failwith "a variable in pen-non-orig is not in trace"
-                   $ varSubset (map snd $ rpnon role) terms
-      mapM_ nonCheck $ rnon role
-      mapM_ lenCheck $ rnon role
-      mapM_ lenCheck $ rpnon role
-      mapM_ uniqueCheck $ runique role
-      mapM_ origVarCheck $ rvars role
-      failwith "role trace is a prefix of a listener"
-                   $ notListenerPrefix $ rtrace role
-    where
-      terms = tterms (rtrace role)
-      nonCheck (_, t) =
-          failwith (showString "non-orig " $ showst t " carried")
-                       $ all (not . carriedBy t) terms
-      lenCheck (Nothing, _) = return ()
-      lenCheck (Just len, _) | len >= length (rtrace role) =
-          fail $ showString "invalid position " $ show len
-      lenCheck (Just len, t) | otherwise =
-          case usedPos t (rtrace role) of
-            Just p | p <= len -> return ()
-            Just _ -> fail $ showst t
-                      $ showString " appears after position " $ show len
-            Nothing -> fail msg
-          where
-            msg = "no used position for non-originating atom " ++ showst t ""
-      uniqueCheck t =
-          failwith (showString "uniq-orig " $ showst  t " doesn't originate")
-                       $ originates t (rtrace role)
-      origVarCheck v =
-          failwith (showString "variable " $ showst v " not acquired")
-                       $ not (isAcquiredVar v) ||
-                         isJust (acquiredPos v (rtrace role))
-
-failwith :: Monad m => String -> Bool -> m ()
-failwith msg test =
-    case test of
-      True -> return ()
-      False -> fail msg
-
 showst :: Algebra t p g s e c => t -> ShowS
 showst t =
     shows $ displayTerm (addToContext emptyContext [t]) t
@@ -216,12 +329,7 @@
 mkListenerRole pos g =
   do
     (g, [x]) <- loadVars g [L pos [S pos "x", S pos "mesg"]]
-    return (g, mkRole "" [x] [In x, Out x] [] [] [] [] [] False)
-
--- Ensure a trace is not a prefix of a listener
-notListenerPrefix :: Algebra t p g s e c => Trace t -> Bool
-notListenerPrefix (In t : Out t' : _) | t == t' = False
-notListenerPrefix _ = True
+    return (g, mkRole "" [x] [In x, Out x] [] [] [] False)
 
 -- Association lists
 
@@ -249,8 +357,13 @@
 -- Lookup value in alist, appending values with the same key
 assoc :: String -> [SExpr a] -> [SExpr a]
 assoc key alist =
-    concat [ rest | L _ (S _ head : rest) <- alist, key == head ]
+    concat $ assocAux key alist
 
+-- Lookup value in alist
+assocAux :: String -> [SExpr a] -> [[SExpr a]]
+assocAux key alist =
+    [ rest | L _ (S _ head : rest) <- alist, key == head ]
+
 -- See if alist has a key
 hasKey :: String -> [SExpr a] -> Bool
 hasKey key alist =
@@ -260,21 +373,50 @@
       f _ = False
 
 loadTrace :: (Algebra t p g s e c, Monad m) => [t] ->
-             [SExpr Pos] -> m (Trace t)
+             [SExpr Pos] -> m [Event t]
 loadTrace vars xs = mapM (loadEvt vars) xs
 
 loadEvt :: (Algebra t p g s e c, Monad m) => [t] ->
           SExpr Pos -> m (Event t)
 loadEvt vars (L _ [S _ "recv", t]) =
     do
-      t <- loadTerm vars t
+      t <- loadTerm vars True t
       return (In t)
 loadEvt vars (L _ [S _ "send", t]) =
     do
-      t <- loadTerm vars t
+      t <- loadTerm vars True t
       return (Out t)
+loadEvt vars (L _ [S _ "tran", t0, t1]) =
+    do
+      t0 <- loadTerm vars True t0
+      t1 <- loadTerm vars True t1
+      return $ Sync $ Tran (Just t0, Just t1, Nothing)
+loadEvt vars (L _ [S _ "tran", t0, t1, t2]) =
+    do
+      t0 <- loadTerm vars True t0
+      t1 <- loadTerm vars True t1
+      t2 <- loadTerm vars True t2
+      return $ Sync $ Tran (Just t0, Just t1, Just t2)
+loadEvt vars (L _ [S _ "obsv", t0]) =
+    do
+      t0 <- loadTerm vars True t0
+      return $ Sync $ Tran (Just t0, Nothing, Nothing)
+loadEvt vars (L _ [S _ "obsv", t0, t1]) =
+    do
+      t0 <- loadTerm vars True t0
+      t1 <- loadTerm vars True t1
+      return $ Sync $ Tran (Just t0, Nothing, Just t1)
+loadEvt vars (L _ [S _ "init", t0]) =
+    do
+      t0 <- loadTerm vars True t0
+      return $ Sync $ Tran (Nothing, Just t0, Nothing)
+loadEvt vars (L _ [S _ "init", t0, t1]) =
+    do
+      t0 <- loadTerm vars True t0
+      t1 <- loadTerm vars True t1
+      return $ Sync $ Tran (Nothing, Just t0, Just t1)
 loadEvt _ (L pos [S _ dir, _]) =
-    fail (shows pos $ "Unrecognized direction " ++ dir)
+    fail (shows pos $ "Malformed direction: " ++ dir)
 loadEvt _ x = fail (shows (annotation x) "Malformed direction")
 
 loadBaseTerms :: (Algebra t p g s e c, Monad m) => [t] -> [SExpr Pos] -> m [t]
@@ -285,13 +427,21 @@
       ts <- loadBaseTerms vars xs
       return (adjoin t ts)
 
+maybeLoadBaseTerm :: (Algebra t p g s e c, Monad m) => [t] -> SExpr Pos -> m (Maybe t)
+maybeLoadBaseTerm vars x =
+    do
+      t <- loadTerm vars False x
+      case isAtom t of
+         True -> return (Just t)
+         False -> return Nothing
+
 loadBaseTerm :: (Algebra t p g s e c, Monad m) => [t] -> SExpr Pos -> m t
 loadBaseTerm vars x =
     do
-      t <- loadTerm vars x
-      case isAtom t of
-        True -> return t
-        False -> fail (shows (annotation x) "Expecting an atom")
+      mt <- maybeLoadBaseTerm vars x
+      case mt of
+        Just t -> return t
+        Nothing -> fail (shows (annotation x) "Expecting an atom")
 
 loadPosBaseTerms :: (Algebra t p g s e c, Monad m) => [t] ->
                     [SExpr Pos] -> m [(Maybe Int, t)]
@@ -304,17 +454,17 @@
 
 loadPosBaseTerm :: (Algebra t p g s e c, Monad m) => [t] ->
                    SExpr Pos -> m (Maybe Int, t)
-loadPosBaseTerm vars x'@(L _ [N _ opos, x])
+loadPosBaseTerm vars x'@(L _ [x, N _ opos])
     | opos < 0 =
         fail (shows (annotation x')
-              "Expecting a non-negative non-origination position")
+              "Expecting a non-negative trace length")
     | otherwise =
         do
           t <- loadBaseTerm vars x
           return (Just opos, t)
 loadPosBaseTerm vars x =
     do
-      t <- loadTerm vars x
+      t <- loadTerm vars False x
       case isAtom t of
         True -> return (Nothing, t)
         False -> fail (shows (annotation x) "Expecting an atom")
@@ -361,17 +511,20 @@
 loadInsts top p kvars gen insts xs =
     do
       _ <- alist [] xs          -- Check syntax of xs
+      others <- loadGenSkelDecls heights kvars (assocDecls xs)
+      predefs <- loadAllPredefSkelDecls heights kvars xs
+      priorities <- loadPriorities (assoc "priority" xs) insts'
       (gen, gs) <- loadGoals top p gen goals
-      loadRest top kvars p gen gs (reverse insts) order nr ar ur pl kcomment
+      loadRest top p gs gen insts' order leadsto
+        (predefs ++ others) kcomment priorities
     where
+      insts' = reverse insts
+      heights = map (\ inst -> length $ trace inst) insts'
       order = assoc "precedes" xs
-      nr = assoc "non-orig" xs
-      ar = assoc "pen-non-orig" xs
-      ur = assoc "uniq-orig" xs
-      pl = assoc "priority" xs
+      leadsto = assoc "leadsto" xs
       goals = assoc "goals" xs
       kcomment =
-        loadComment "goals" goals ++
+        loadComment "subgoals" goals ++
         loadComment "comment" (assoc "comment" xs)
 
 loadComment :: String -> [SExpr Pos] -> [SExpr ()]
@@ -379,6 +532,31 @@
 loadComment key comment =
   [L () (S () key : map strip comment)]
 
+loadPriorities :: (Algebra t p g s e c, Monad m) => [SExpr Pos] ->
+                  [Instance t e] -> m [((Int,Int),Int)]
+loadPriorities [] _ = return []
+loadPriorities ((L pos [L _ [N _ s, N _ i], N _ p]) : rest) insts
+    | (s < 0 || s >= (length insts) || (i < 0) || (i > height (insts !! s))) =
+      fail (shows pos "Malformed node in priority declaration")
+    | otherwise =
+        case trace (insts !! s) !! i of
+          Out _ -> fail (shows pos "Priority declaration disallowed on sending")
+          Sync (Tran (Nothing, _, _))
+            -> fail (shows pos
+                     "Priority declaration disallowed on initializers")
+          _ -> do
+            others <- loadPriorities rest insts
+            return (((s,i),p) : others)
+loadPriorities (x : _) _ = fail (shows (annotation x) "Malformed priority")
+
+-- Lookup value in alist, appending values with the same key
+assocDecls :: [SExpr a] -> [(String,[SExpr a])]
+assocDecls alist =
+    [("decl " ++ key, concat [ rest | L _ (S _ head : (S _ head' : rest)) <- alist,
+                    "decl" == head, key == head' ]) | key <- keys]
+    where
+      keys = [ key | L _ (S _ head : (S _ key : _)) <- alist, head=="decl" ]
+
 loadInst :: (Algebra t p g s e c, Monad m) => Pos ->
             Prot t g -> [t] -> g -> String -> Int ->
             [SExpr Pos] -> m (g, Instance t e)
@@ -407,8 +585,8 @@
               (g, e) -> SExpr Pos -> m (g, e)
 loadMaplet kvars vars env (L pos [domain, range]) =
     do
-      t <- loadTerm vars domain
-      t' <- loadTerm kvars range
+      t <- loadTerm vars False domain
+      t' <- loadTerm kvars False range
       case match t t' env of
         env' : _ -> return env'
         [] -> fail (shows pos "Domain does not match range")
@@ -418,64 +596,155 @@
                 [t] -> g -> SExpr Pos -> m (g, Instance t e)
 loadListener p kvars gen x =
     do
-     t <- loadTerm kvars x
-     return $ mkListener p gen t
+      t <- loadTerm kvars True x
+      return $ mkListener p gen t
 
-loadRest :: (Algebra t p g s e c, Monad m) => Pos -> [t] ->
-            Prot t g -> g -> [Goal t] -> [Instance t e] ->
-            [SExpr Pos] -> [SExpr Pos] -> [SExpr Pos] -> [SExpr Pos] ->
-            [SExpr Pos] -> [SExpr ()] -> m (Preskel t g s e)
-loadRest pos vars p gen gs insts orderings nr ar ur pl comment =
+loadRest :: (Algebra t p g s e c, Monad m) => Pos ->
+            Prot t g -> [Goal t] -> g -> [Instance t e] ->
+            [SExpr Pos] -> [SExpr Pos] -> SkelDeclList t ->
+            [SExpr ()] -> [((Int,Int),Int)] -> m (Preskel t g s e)
+loadRest pos p gs gen insts orderings leadsto decls comment priorities =
     do
       case null insts of
         True -> fail (shows pos "No strands")
         False -> return ()
       let heights = map height insts
-      o <- loadOrderings heights orderings
-      nr <- loadBaseTerms vars nr
-      ar <- loadBaseTerms vars ar
-      ur <- loadBaseTerms vars ur
-      let (nr', ar', ur') = foldl addInstOrigs (nr, ar, ur) insts
-      prios <- mapM (loadPriorities heights) pl
-      let k = mkPreskel gen p gs insts o nr' ar' ur' prios comment
-      case termsWellFormed $ nr' ++ ar' ++ ur' ++ kterms k of
-        False -> fail (shows pos "Terms in skeleton not well formed")
+      o <- loadOrderings heights orderings True
+      l <- loadOrderings heights leadsto False
+      let k = mkPreskel gen p gs insts o l decls comment priorities
+      case termsWellFormed $ (termsInDlist decls) ++ kterms k of
         True -> return ()
+        False -> fail (shows pos "Terms in skeleton not well formed:" ++ show (termsInDlist decls ++ kterms k))
       case verbosePreskelWellFormed k of
         Return () -> return k
         Fail msg -> fail $ shows pos
                     $ showString "Skeleton not well formed: " msg
 
-loadOrderings :: Monad m => [Int] -> [SExpr Pos] -> m [Pair]
-loadOrderings heights x =
+      where
+        termsInDlist olist = concat $ map dterms (concatMap snd olist)
+
+loadGenSkelDecls :: (Algebra t p g s e c, Monad m) => [Int] -> [t] ->
+                    [(String,[SExpr Pos])] -> m [SkelDeclaration t]
+loadGenSkelDecls _ _ [] = return []
+loadGenSkelDecls heights vars ((name,rawds):b) =
+    do
+      a' <- loadGenSkelDeclList heights vars rawds
+      b' <- loadGenSkelDecls heights vars b
+      return ((name,a'):b')
+
+loadGenSkelDeclList :: (Algebra t p g s e c, Monad m) => [Int] -> [t] -> [SExpr Pos] ->
+                       m (SkelDeclInstList t)
+loadGenSkelDeclList _ _ [] = return []
+loadGenSkelDeclList heights vars (a:b) =
+    do
+      a' <- loadGenSkelDecl heights vars "" a
+      b' <- loadGenSkelDeclList heights vars b
+      return (a':b')
+
+loadGenSkelDecl :: (Algebra t p g s e c, Monad m) => [Int] -> [t] -> String ->
+                   SExpr Pos -> m (SkelDeclInst t)
+loadGenSkelDecl heights vars stag (L _ (tlist:llist)) =
+    do
+      ts <- loadTerms vars tlist
+      ls <- loadNodes heights llist
+      return (declInstAux ts ls stag)
+loadGenSkelDecl _ _ _ x'@(L _ []) =
+    fail (shows (annotation x') "Malformed declaration: Expecting a list of terms in generic declaration")
+loadGenSkelDecl _ _ _ x =
+    fail (shows (annotation x) "Malformed declaration: expecting a list")
+
+loadGenRoleDecls :: (Algebra t p g s e c, Monad m) => Int -> [t] ->
+                    [(String,[SExpr Pos])] -> m [RoleDeclaration t]
+loadGenRoleDecls _ _ [] = return []
+loadGenRoleDecls height vars ((name,rawds):b) =
+    do
+      a' <- loadGenRoleDeclList height vars rawds
+      b' <- loadGenRoleDecls height vars b
+      return ((name,a'):b')
+
+loadGenRoleDeclList :: (Algebra t p g s e c, Monad m) => Int -> [t] -> [SExpr Pos] ->
+                       m (RoleDeclInstList t)
+loadGenRoleDeclList _ _ [] = return []
+loadGenRoleDeclList height vars (a:b) =
+    do
+      a' <- loadGenRoleDecl height vars "" a
+      b' <- loadGenRoleDeclList height vars b
+      return (a':b')
+
+loadGenRoleDecl :: (Algebra t p g s e c, Monad m) => Int -> [t] -> String ->
+                   SExpr Pos -> m (RoleDeclInst t)
+loadGenRoleDecl height vars stag (L _ (tlist:llist)) =
+    do
+      ts <- loadTerms vars tlist
+      ls <- loadIntsMax height llist
+      return (declInstAux ts ls stag)
+loadGenRoleDecl _ _ _ x'@(L _ []) =
+    fail (shows (annotation x') "Malformed declaration: Expecting a list of terms in generic declaration")
+loadGenRoleDecl _ _ _ x =
+    fail (shows (annotation x) "Malformed declaration: expecting a list")
+
+loadOrderings :: Monad m => [Int] -> [SExpr Pos] -> Bool -> m [Pair]
+loadOrderings heights x strict =
     foldM f [] x
     where
       f ns x =
           do
-            np <- loadPair heights x
+            np <- loadPair heights x strict
             return (adjoin np ns)
 
-loadPair :: Monad m => [Int] -> SExpr Pos -> m Pair
-loadPair heights (L pos [x0, x1]) =
+loadPair :: Monad m => [Int] -> SExpr Pos -> Bool -> m Pair
+loadPair heights (L pos [x0, x1]) strict =
     do
       n0 <- loadNode heights x0
       n1 <- loadNode heights x1
-      case sameStrands n0 n1 of  -- Same strand
+      case (strict && sameStrands n0 n1) of  -- Same strand
         True -> fail (shows pos "Malformed pair -- nodes in same strand")
         False -> return (n0, n1)
     where
       sameStrands (s0, _) (s1, _) = s0 == s1
-loadPair _ x = fail (shows (annotation x) "Malformed pair")
+loadPair _ x _ = fail (shows (annotation x) "Malformed pair")
 
+loadTerms :: (Algebra t p g s e c, Monad m) => [t] -> SExpr Pos -> m [t]
+loadTerms _ (L _ []) = return []
+loadTerms vars (L pos (head:rest)) =
+    do
+      a <- loadTerm vars False head
+      b <- loadTerms vars (L pos rest)
+      return (a:b)
+loadTerms _ x = fail (shows (annotation x) "Malformed list of terms")
+
+loadNodes :: Monad m => [Int] -> [SExpr Pos] -> m [Node]
+loadNodes _ [] = return []
+loadNodes heights (head:rest) =
+    do
+      b <- loadNodes heights rest
+      a <- loadNode heights head
+      return (a:b)
+
+loadIntsMax :: Monad m => Int -> [SExpr Pos] -> m [Int]
+loadIntsMax _ [] = return []
+loadIntsMax max (a:b) =
+    do
+      a <- loadIntMax max a
+      b <- loadIntsMax max b
+      return (a:b)
+
+loadIntMax :: Monad m => Int -> SExpr Pos -> m Int
+loadIntMax max (N pos x)
+    | x < 0 = fail (shows pos "Malformed declaration: Negative position in role")
+    | x >= max = fail (shows pos "Malformed declaration: Bad position in role")
+    | otherwise = return x
+loadIntMax _ x = fail (shows (annotation x) "Malformed declaration: position")
+
 loadNode :: Monad m => [Int] -> SExpr Pos -> m Node
 loadNode heights (L pos [N _ s, N _ p])
-    | s < 0 = fail (shows pos "Negative strand in node")
-    | p < 0 = fail (shows pos "Negative position in node")
+    | s < 0 = fail (shows pos "Malformed node: Negative strand in node")
+    | p < 0 = fail (shows pos "Malformed node: Negative position in node")
     | otherwise =
         case height heights s of
-          Nothing -> fail (shows pos "Bad strand in node")
+          Nothing -> fail (shows pos "Malformed node: Bad strand in node")
           Just h | p < h -> return (s, p)
-          _ -> fail (shows pos "Bad position in node")
+          _ -> fail (shows pos "Malformed node: Bad position in node")
     where
       height [] _ = Nothing
       height (x: xs) s          -- Assume s non-negative
@@ -483,20 +752,7 @@
           | otherwise = height xs (s - 1)
 loadNode _ x = fail (shows (annotation x) "Malformed node")
 
-loadPriorities :: Monad m => [Int] -> SExpr Pos -> m (Node, Int)
-loadPriorities heights (L _ [x, N _ p]) =
-    do
-      n <- loadNode heights x
-      return (n, p)
-loadPriorities _ x =
-    fail (shows (annotation x) "Malformed priority")
-
-addInstOrigs :: Algebra t p g s e c => ([t], [t], [t]) ->
-                Instance t e -> ([t], [t], [t])
-addInstOrigs (nr, ar, ur) i =
-    (foldl (flip adjoin) nr $ inheritRnon i,
-     foldl (flip adjoin) ar $ inheritRpnon i,
-     foldl (flip adjoin) ur $ inheritRunique i)
+-- Security Goals
 
 -- Security goals
 
@@ -517,7 +773,7 @@
                 loadComment "comment" (assoc "comment" xs')
           -- Make and return the characteristic skeleton of a security goal
           characteristic pos p (goal : goals) g antec kcomment
-findGoal pos _ _ = fail (shows pos "Malformed goal")
+findGoal pos _ _ = fail (shows pos "Malformed defgoal")
 
 -- Separate argument into goals and any remaining elements of an
 -- association list.
@@ -548,8 +804,8 @@
 loadSentence _ prot g (L pos [S _ "forall", L _ vs, x]) =
   do
     (g, vars) <- loadVars g vs
-    loadImplication pos prot g (L.nub $ reverse vars) x
-loadSentence pos _ _ _ = fail (shows pos "Bad goal sentence")
+    loadImplication pos prot g (L.nub vars) x
+loadSentence pos _ _ _ = fail (shows pos "Malformed goal sentence")
 
 -- Load the top-level implication of a security goal
 
@@ -564,7 +820,7 @@
                  antec = map snd antec,
                  concl = map (map snd) concl }
     return (g, goal, antec)
-loadImplication pos _ _ _ _ = fail (shows pos "Bad goal implication")
+loadImplication pos _ _ _ _ = fail (shows pos "Malformed goal implication")
 
 -- The conclusion must be a disjunction.  Each disjunct may introduce
 -- existentially quantified variables.
@@ -592,7 +848,7 @@
 loadExistential _ prot g vars (L pos [S _ "exists", L _ vs, x]) =
   do
     (g, evars) <- loadVars g vs
-    loadRoleSpecific pos prot g (reverse evars ++ vars) evars x
+    loadRoleSpecific pos prot g (evars ++ vars) evars x
 loadExistential pos prot g vars x =
   loadRoleSpecific pos prot g vars [] x
 
@@ -608,7 +864,7 @@
     unbound <- foldM roleSpecific unbound as'
     case unbound of
       [] -> return (g, as')
-      (v : _) -> fail (shows (annotation x) (showst v " not used"))
+      (v : _) -> fail (shows (annotation x) ("Malformed defgoal: " ++ showst v " not used"))
 
 -- Load a conjunction of atomic formulas
 
@@ -655,6 +911,15 @@
     t <- loadAlgTerm kvars x
     (g, t') <- loadNodeTerm kvars g y
     return (g, pos, UniqAt t t')
+loadPrimary _ _ kvars g (L pos [S _ "ugen-at", x, y]) =
+  do
+    t <- loadAlgTerm kvars x
+    (g, t') <- loadNodeTerm kvars g y
+    return (g, pos, UgenAt t t')
+loadPrimary _ _ kvars g (L pos [S _ "ugen", x]) =
+  do
+    t <- loadAlgTerm kvars x
+    return (g, pos, Ugen t)
 loadPrimary _ _ kvars g (L pos [S _ "str-prec", x, y]) =
   do
     (g, t) <- loadNodeTerm kvars g x
@@ -682,9 +947,9 @@
       False -> fail (shows pos "Bad parameter -- not a variable")
       True -> return (g, pos, ParamPred r v n t)
 loadPrimary _ _ _ _ (L pos (S _ "p" : Q _ name : _)) =
-  fail (shows pos ("Bad role specific formula for role " ++ name))
+  fail (shows pos ("Malformed role specific formula for role " ++ name))
 loadPrimary _ _ _ _ (L pos (S _ pred : _)) =
-  fail (shows pos ("Bad formula for predicate " ++ pred))
+  fail (shows pos ("Malformed formula for predicate " ++ pred))
 loadPrimary pos _ _ _ _ = fail (shows pos "Bad formula")
 
 -- Load a term and make sure it has sort node
@@ -705,7 +970,7 @@
   fail (shows (annotation x) "Expecting an algebra term")
 loadAlgTerm ts x =
   do
-    t <- loadTerm ts x
+    t <- loadTerm ts False x
     case isNodeVar t of
       True -> fail (shows (annotation x) "Expecting an algebra term")
       False -> return t
@@ -714,7 +979,7 @@
               SExpr Pos -> m (g, t)
 loadSgTerm ts g x =
   do
-    t <- loadTerm ts x
+    t <- loadTerm ts False x
     return (g, t)
 
 -- Role specific check
@@ -753,6 +1018,12 @@
 roleSpecific unbound (pos, UniqAt t n)
   | allBound unbound t && L.notElem n unbound = return unbound
   | otherwise = fail (shows pos "Unbound variable in uniq-at")
+roleSpecific unbound (pos, UgenAt t n)
+  | allBound unbound t && L.notElem n unbound = return unbound
+  | otherwise = fail (shows pos "Unbound variable in ugen-at")
+roleSpecific unbound (pos, Ugen t)
+  | allBound unbound t = return unbound
+  | otherwise = fail (shows pos "Unbound variable in ugen")
 roleSpecific unbound (pos, Equals t t')
   | isNodeVar t && isNodeVar t' =
     case L.notElem t unbound && L.notElem t' unbound of
diff --git a/src/CPSA/Lib/Main.hs b/src/CPSA/Lib/Main.hs
--- a/src/CPSA/Lib/Main.hs
+++ b/src/CPSA/Lib/Main.hs
@@ -22,14 +22,6 @@
 import qualified CPSA.Basic.Algebra
 import qualified CPSA.DiffieHellman.Algebra
 
--- Compile time switches for expermentation.
-
--- Allow users to try experimental Diffie-Hellman algebra?
-useDiffieHellman :: Bool
-useDiffieHellman = False -- True
-
--- Load default options
-
 -- Default limit on the number of steps used to solve one problem.
 defaultStepLimit :: Int
 defaultStepLimit = optLimit defaultOptions
@@ -92,13 +84,9 @@
 
 -- Algebra specific section
 
--- Algebra names -- omit Diffie-Hellman for releases until it works
+-- Algebra names
 algs :: [String]
-algs =
-  if useDiffieHellman then
-    [CPSA.Basic.Algebra.name, CPSA.DiffieHellman.Algebra.name]
-  else
-    [CPSA.Basic.Algebra.name]
+algs = [CPSA.Basic.Algebra.name, CPSA.DiffieHellman.Algebra.name]
 
 -- Select the algebra and go.
 select :: [String] -> Maybe (SExpr Pos) -> Options -> [SExpr Pos] -> IO ()
@@ -157,6 +145,9 @@
               case optTryYoungNodesFirst opts of
                 True -> writeComment h m "Younger nodes tried first"
                 False -> return ()
+              case optGoalsSat opts of
+                True -> writeComment h m "Stop when goals satisfied"
+                False -> return ()
               -- Analyze
               solve opts h preskels 0
 
@@ -183,6 +174,7 @@
     | CheckNoncesFirst          -- Check nonces first
     | TryOldStrandsFirst        -- Try old strands first
     | TryYoungNodesFirst        -- Try young nodes first
+    | GoalsSat                  -- Stop when goals are satisfied
     | Algebra String            -- Algebra
     | Algebras                  -- Show algebras
     | Help                      -- Help
@@ -208,6 +200,8 @@
       "try old strands first",
       Option ['r'] ["reverse-nodes"] (NoArg TryYoungNodesFirst)
       "try younger nodes first",
+      Option ['g'] ["goals-sat"] (NoArg GoalsSat)
+      "Stop when goals are satisfied",
       Option ['a'] ["algebra"]  (ReqArg Algebra "STRING")
       ("algebra (default " ++ defaultAlgebra ++ ")"),
       Option ['s'] ["show-algebras"] (NoArg Algebras)  "show algebras",
@@ -257,6 +251,8 @@
           loop flags $ opts { optTryOldStrandsFirst = True }
       loop (TryYoungNodesFirst : flags) opts =
           loop flags $ opts { optTryYoungNodesFirst = True }
+      loop (GoalsSat : flags) opts =
+          loop flags $ opts { optGoalsSat = True }
       loop (Algebra name : flags) opts
           | elem name algs = loop flags $ opts { optAlg = name }
           | otherwise =
diff --git a/src/CPSA/Lib/Notation.hs b/src/CPSA/Lib/Notation.hs
--- a/src/CPSA/Lib/Notation.hs
+++ b/src/CPSA/Lib/Notation.hs
@@ -84,7 +84,7 @@
       (sort, vars) = split [] xs
       split vars [S _ sort] = (str sort, reverse vars)
       split vars (S _ var: xs) = split (str var : vars) xs
-      split _ _ = error "split: bad arg"
+      split _ _ = error "[ASSERT FAILED] split: bad arg"
 decl indent x = generic indent x
 
 -- Association lists
@@ -149,6 +149,7 @@
 event :: Printer a
 event indent (L _ [S _ "send", x]) = blo 0 [str "+", mesg indent x]
 event indent (L _ [S _ "recv", x]) = blo 0 [str "-", mesg indent x]
+event indent (L _ [S _ "sync", x]) = blo 0 [str "!", mesg indent x]
 event indent x = generic indent x
 
 -- Print a term in the Basic Crypto Algebra in compact form.
@@ -199,7 +200,7 @@
     where
       loop xs x [] = (x, reverse xs)
       loop ys y (x:xs) = loop (y:ys) x xs
-rotate [] = error "rotate: bad arg"
+rotate [] = error "[ASSERT FAILED] rotate: bad arg"
 
 -- Print a node ordering
 order :: Printer a
diff --git a/src/CPSA/Lib/Protocol.hs b/src/CPSA/Lib/Protocol.hs
--- a/src/CPSA/Lib/Protocol.hs
+++ b/src/CPSA/Lib/Protocol.hs
@@ -6,126 +6,180 @@
 -- modify it under the terms of the BSD License as published by the
 -- University of California.
 
-module CPSA.Lib.Protocol (Event (..), evtTerm, evtMap, evt, inbnd, outbnd,
-    Trace, tterms, originates,
-    originationPos, acquiredPos, gainedPos, usedPos,
-    Role, rname, rvars, rtrace, rnon, rpnon, runique, rcomment,
-    rsearch, rnorig, rpnorig, ruorig, rpriority, mkRole, varSubset,
-    varsInTerms, addVars,
+module CPSA.Lib.Protocol (Event (..), evtTerms, evtMesgTerms, evtMap, evt,
+    recvTerm, sendTerm, sync, Trace, stripSync, tterms, originates,
+    originationPos, acquiredPos, gainedPos, genGainedPos, usedPos,
+    Role, rname, rvars, rtrace, rdecls, rcomment, rsearch, generationPos,
+    ridecls, mkRole, roleWellFormed,
+    RoleDeclInst, RoleDeclInstList, RoleDeclaration, RoleDeclList,
+    RoleDeclarations, rpriority, defaultPriority,
     Prot, mkProt, pname, alg, pgen, roles, listenerRole,
-    varsAllAtoms, pcomment, flow) where
+    varsAllAtoms, pcomment) where
 
 import qualified Data.List as L
 import qualified Data.Set as S
-import Data.Set (Set)
+import qualified Data.Maybe as M
 import CPSA.Lib.Utilities
 import CPSA.Lib.SExpr
 import CPSA.Lib.Algebra
-
--- Useful operations on variables
-
--- Are the vars in ts a subset of the ones in ts'?
-varSubset :: Algebra t p g s e c => [t] -> [t] -> Bool
-varSubset ts ts' =
-    all (flip elem (varsInTerms ts')) (varsInTerms ts)
-
-varsInTerms :: Algebra t p g s e c => [t] -> [t]
-varsInTerms ts =
-    foldl addVars [] ts
+import CPSA.Lib.AlgebraLibrary
+import CPSA.Lib.Declaration
+import CPSA.Lib.State
 
-addVars :: Algebra t p g s e c => [t] -> t -> [t]
-addVars ts t = foldVars (flip adjoin) ts t
+{--
+import CPSA.Lib.Debug
+--}
 
 -- Message events and traces
 
 data Event t
     = In !t                      -- Inbound message
     | Out !t                     -- Outbound message
-      deriving (Show, Eq, Ord)
+    | Sync (Tran t)              -- State synchronization
+    deriving (Show, Eq, Ord)
 
 -- Dispatch to function based on direction.
-evt :: (t -> a) -> (t -> a) -> Event t -> a
-evt inDir outDir evt =
+evt :: (t -> a) -> (t -> a) -> (Tran t -> a) -> Event t -> a
+evt inDir outDir syncDir evt =
     case evt of
       In t -> inDir t
       Out t -> outDir t
+      Sync t -> syncDir t
 
--- Extract the term in an event (evt id id).
-evtTerm :: Event t -> t
-evtTerm (In t) = t
-evtTerm (Out t) = t
+-- Extract the terms in an event.
+evtTerms :: Event t -> [t]
+evtTerms (In t) = [t]
+evtTerms (Out t) = [t]
+evtTerms (Sync t) = tranTerms t
 
+-- Extract the message-passed terms in an event.
+evtMesgTerms :: Event t -> [t]
+evtMesgTerms (Sync _) = []
+evtMesgTerms e = evtTerms e
+
 -- Map the term in an event.
 evtMap :: (t -> t) -> Event t -> Event t
 evtMap f (In t) = In (f t)
 evtMap f (Out t) = Out (f t)
+evtMap f (Sync t) = Sync (mapTran f t)
 
+-- Extract the reception term
+recvTerm :: Event t -> Maybe t
+recvTerm (In t) = Just t
+recvTerm _ = Nothing
+
+-- Extract the transmission term
+sendTerm :: Event t -> Maybe t
+sendTerm (Out t) = Just t
+sendTerm _ = Nothing
+
 -- Extract the term in an inbound event.
 inbnd :: Event t -> Maybe t
 inbnd (In t) = Just t
+inbnd (Sync (Tran (Just t,_,_))) = Just t
 inbnd _ = Nothing
 
 -- Extract the term in an outbound event.
 outbnd :: Event t -> Maybe t
 outbnd (Out t) = Just t
+outbnd (Sync (Tran (_,Just t,_))) = Just t
 outbnd _ = Nothing
 
+-- Extract the term in an outbound event.
+sync :: Event t -> Maybe (Tran t)
+sync (Sync t) = Just t
+sync _ = Nothing
+
 -- A trace is a list of events.  The terms in the trace are
 -- stored in causal order.
 type Trace t = [Event t]
 
+stripSync :: Trace t -> Trace t
+stripSync [] = []
+stripSync (Sync _:c) = stripSync c
+stripSync (e:c) = e:stripSync c
+
 -- The set of terms in a trace.
 tterms :: Eq t => Trace t -> [t]
 tterms c =
-    foldl (\ts evt -> adjoin (evtTerm evt) ts) [] c
+  L.nub [t | evt <- c, t <- evtTerms evt]
 
+tmesgterms :: Eq t => Trace t -> [t]
+tmesgterms c =
+  L.nub [t | evt <- c, t <- evtMesgTerms evt]
+
 -- Is the term carried by an event, and is the first one outgoing?
 originates :: Algebra t p g s e c => t -> Trace t -> Bool
-originates _ [] = False         -- Term is not carried
-originates t (Out t' : c) = t `carriedBy` t' || originates t c
-originates t (In t' : c) = not (t `carriedBy` t') && originates t c
+originates t c = M.isJust (originationPos t c)
 
--- At what position does a term originate in a trace?
-originationPos :: Algebra t p g s e c => t -> Trace t -> Maybe Int
-originationPos t c =
+-- Loop through the events in a trace, looking for an inbound
+-- message satisfying (intest1) or (intest2), in which case,
+-- return Nothing or Just (height) respectively, or for an
+-- outbound message satisfying (outtest1) or (outtest2), in
+-- which case return Nothing or Just (height) respecitvely,
+-- with Nothing as a default.
+--
+-- If both intest1 and intest2 are true, return Just (height).
+-- If both outtest1 and outtest2 are true, return Just (height).
+lookupPos :: Algebra t p g s e c => t -> (t -> t -> Bool) ->
+             (t -> t -> Bool) -> (t -> t -> Bool) -> (t -> t -> Bool) ->
+             Trace t -> Maybe Int
+lookupPos t intest1 intest2 outtest1 outtest2 c =
     loop 0 c
     where
-      loop _ [] = Nothing       -- Term is not carried
-      loop pos (Out t' : c)
-          | t `carriedBy` t' = Just pos -- Found it
-          | otherwise = loop (pos + 1) c
-      loop pos (In t' : c)
-          | t `carriedBy` t' = Nothing -- Term does not originate
-          | otherwise = loop (pos + 1) c
+    loop _ [] = Nothing         -- Default to Nothing
+    loop pos (evt : c) =
+         if bail then inresult else result
+         where
+           bail = case (inbnd evt) of
+             Nothing -> False
+             Just t' -> (intest1 t t') || (intest2 t t')
+           inresult = case (inbnd evt) of
+             Nothing -> error ("protocol:lookupPos -- no result defined.")
+             Just t' -> if (intest2 t t') then Just pos else Nothing
+           result = case (outbnd evt) of
+             Nothing -> loop (pos + 1) c
+             Just t' -> if (outtest2 t t') then Just pos else
+                       (if (outtest1 t t') then Nothing else loop (pos + 1) c)
 
+-- At what position does a term originate in a trace?
+originationPos :: Algebra t p g s e c => t ->
+                  Trace t -> Maybe Int
+originationPos t c =
+    -- Looking for where t is first carried, if it is in an outbound message.
+    lookupPos t carriedBy ftest ftest carriedBy c
+
+-- At what position does a term generate in a trace?
+generationPos :: Algebra t p g s e c => t ->
+                  Trace t -> Maybe Int
+generationPos t c =
+    -- Looking for where t first occurs, if it is in an outbound message.
+    lookupPos t constituent ftest ftest constituent c
+
 -- At what position is a term acquired in a trace?
 acquiredPos :: Algebra t p g s e c => t -> Trace t -> Maybe Int
 acquiredPos t c =
-    loop 0 c
-    where
-      loop _ [] = Nothing       -- Term does not occur
-      loop pos (In t' : c)
-          | t `carriedBy` t' = Just pos -- Found it
-          | t `occursIn` t' = Nothing   -- Occurs but is not carried
-          | otherwise = loop (pos + 1) c
-      loop pos (Out t' : c)
-          | t `occursIn` t' = Nothing   -- Term occurs in outbound term
-          | otherwise = loop (pos + 1) c
+    -- Looking for where t first occurs, if it is carried there and that is an
+    -- inbound message
+    lookupPos t occursIn carriedBy occursIn ftest c
 
 -- At what position is a term gained in a trace?
 gainedPos :: Algebra t p g s e c => t ->
              Trace t -> Maybe Int
 gainedPos t c =
-    loop 0 c
-    where
-      loop _ [] = Nothing       -- Term is not carried
-      loop pos (Out t' : c)
-          | t `carriedBy` t' = Nothing -- Term is not gained
-          | otherwise = loop (pos + 1) c
-      loop pos (In t' : c)
-          | t `carriedBy` t' = Just pos -- Found it
-          | otherwise = loop (pos + 1) c
+    -- Looking for where t is first carried, if it is in an inbound message.
+    lookupPos t ftest carriedBy carriedBy ftest c
 
+-- At what position is a term gained in a trace with regards to constituent?
+genGainedPos :: Algebra t p g s e c => t ->
+             Trace t -> Maybe Int
+genGainedPos t c =
+    -- Looking for where t first occurs, if it is in an inbound message.
+    lookupPos t ftest constituent constituent ftest c
+
+ftest :: a -> b -> Bool
+ftest = const (const False)
+
 -- At what position do all of the variables in a term occur in a trace?
 usedPos :: Algebra t p g s e c => t -> Trace t -> Maybe Int
 usedPos t c =
@@ -133,59 +187,24 @@
     where
       loop _ _ [] = Nothing
       loop pos vars (e : c) =
-          let vars' = [ x | x <- vars, notElem x (varsInTerms [evtTerm e]) ] in
+          let vars' = [ x | x <- vars, notElem x (varsInTerms (evtTerms e)) ] in
           case vars' of
             [] -> Just pos
             _ -> loop (pos + 1) vars' c
 
--- Data flow analysis of a trace.
-
--- Return the minimal sets of parameters computed using traceFlow
-flow :: Algebra t p g s e c => Trace t -> [[t]]
-flow c =
-    toList $ filter minimal inits
-    where
-      inits = S.toList $ S.map fst $ traceFlow c (S.empty, S.empty)
-      -- Is init minimal among sets in inits?
-      minimal init = all (not . flip S.isProperSubsetOf init) inits
-      -- Convert sets to lists and sort everything
-      toList s = L.sort $ map (L.sort . S.toList) $ s
-
--- A flow rule maps an initial set of atoms and a set of available
--- terms to sets of pairs of the same sets.
-type FlowRule t = (Set t, Set t) -> Set (Set t, Set t)
-
--- Analyze events in a trace sequentially
-traceFlow :: Algebra t p g s e c => Trace t -> FlowRule t
-traceFlow [] a = S.singleton a
-traceFlow (d : c) a = comb (traceFlow c) (evtFlow d) a
-
--- Dispatch to algebra specific data flow routines
-evtFlow :: Algebra t p g s e c => Event t -> FlowRule t
-evtFlow (In t) = inFlow t
-evtFlow (Out t) = outFlow t
-
--- Combine flow rules sequentially
-comb :: Algebra t p g s e c => FlowRule t -> FlowRule t -> FlowRule t
-comb f g x =
-    S.fold h S.empty (g x)
-    where h a s = S.union (f a) s
-
+-- Roles store internal declarations only in ridecls.
+-- Roles store a raw external declarations format.
 data Role t = Role
     { rname :: !String,
       rvars :: ![t],            -- Set of role variables
                                 -- Events in causal order
       rtrace :: ![Event t],
       -- Set of non-originating atoms, possibly with a trace length
-      rnon :: ![(Maybe Int, t)], -- that says when to inherit the atom
-      rpnon :: ![(Maybe Int, t)], -- that says when to inherit the atom
-      runique :: ![t],          -- Set of uniquely originating atoms
+      rdecls :: RoleDeclarations t,
+      rpriority :: ![Int],      -- Priorities for each event
       rcomment :: [SExpr ()],   -- Comments from the input
       rsearch :: Bool, -- True when suggesting reverse test node search
-      rnorig :: [(t, Int)],     -- Nons plus origination position
-      rpnorig :: [(t, Int)], -- Penetrator nons plus origination position
-      ruorig :: [(t, Int)],     -- Uniques plus origination position
-      rpriority :: [Int] }      -- List of all priorities
+      ridecls :: [(RoleDeclarations t, Int)]}
     deriving Show
 
 defaultPriority :: Int
@@ -199,44 +218,40 @@
 
 -- Create a role
 mkRole :: Algebra t p g s e c => String -> [t] -> Trace t ->
-          [(Maybe Int, t)] -> [(Maybe Int, t)] -> [t] ->
-          [SExpr ()] -> [(Int, Int)] -> Bool -> Role t
-mkRole name vars trace non pnon unique comment priority rev =
+          RoleDeclList t -> [(Int, Int)] -> [SExpr ()] -> Bool -> Role t
+mkRole name vars trace dlist priority comment rev =
     Role { rname = name,
            rvars = L.nub vars,  -- Every variable here must
-           rtrace = trace,      -- occur in the trace.
-           rnon = non,
-           rpnon = pnon,
-           runique = L.nub unique,
+           rtrace = trace,      --  occur in the trace.
+           rdecls = mkDecls dlist',
            rcomment = comment,
-           rnorig = map addNonOrig $ nonNub non,
-           rpnorig = map addNonOrig $ nonNub pnon,
-           ruorig = map addUniqueOrig $ L.nub unique,
            rpriority = addDefaultPrio priority,
+           ridecls = concatMap mkRidecls $ nats(length(trace)),
            rsearch = rev
          }
     where
-      addUniqueOrig t =
-          case originationPos t trace of
-            Just p -> (t, p)
-            Nothing -> error "Protocol.mkRole: Atom does not uniquely originate"
-      addNonOrig (len, t) =
-          case usedPos t trace of
-            Nothing -> error "Protocol.mkRole: Atom variables not in trace"
-            Just p ->
-                case len of
-                  Nothing -> (t, p)
-                  Just len | len >= p -> (t, len)
-                           | otherwise -> error msg
-          where
-            msg = "Protocol.mkRole: Position for atom too early in trace"
-      -- Drop non-origination assumptions for the same atom.
-      nonNub nons =
-          reverse $ foldl f [] nons
-          where
-            f acc non@(_, t)
-                | any (\(_, t') -> t == t') acc = acc
-                | otherwise = non : acc
+      dlist' = expandDecls vars trace dlist
+      rothersintro = map addOtherOrig $ dlist'
+      restrict i dlist = filter (\x -> not (null (snd x))) (select i dlist)
+      select i dlist = map (\ (n, dis) -> (n, map fst
+                                              (filter (\ (_,j)->i==j) dis))) dlist
+      mkRidecls i =
+        let os = restrict i rothersintro in
+        [(mkDecls os, i)]
+      addOtherOrig (n,ds) = (n, map addDeclOrig ds)
+      addDeclOrig dinst
+            | null ls && null ts = (dinst,0)
+            | any (==Nothing) tps =
+              error "Protocol.mkRole: Declaration variables not in trace"
+            | any (\i -> (i < 0 || i >= length trace)) ls =
+              error "Protocol.mkRole: Declaration height not valid"
+            | null ts = (dinst,maximum ls)
+            | null ls = (dinst,maximum (map M.fromJust tps))
+            | otherwise = (dinst,max (maximum ls) (maximum (map M.fromJust tps)))
+            where
+               ts = dterms dinst
+               ls = dlocs dinst
+               tps = map (\t -> usedPos t trace) ts
       addDefaultPrio priority =
           map f (nats $ length trace)
           where
@@ -245,6 +260,102 @@
                 Nothing -> defaultPriority
                 Just p -> p
 
+-- expandDecls: transform declarations from file format to internal format.
+-- This means to (1) add nodes to uniq-orig and uniq-gen declarations (throwing
+-- an error if there is no appropriate node), (2) adding ind-zero declarations for
+-- generating exponents not declared uniq-gen, and (3) adding ind-zero-in
+-- declarations for exponents before a generation point of a uniq-gen exponent.
+expandDecls :: Algebra t p g s e c => [t] -> Trace t ->
+               RoleDeclList t -> RoleDeclList t
+expandDecls _ trace dlist =
+  (map addUniqs dlist) ++ indzeros
+  where
+    -- add locations to uniq-orig and uniq-gen declarations
+    addUniqs ("uniq-orig", ds) = ("uniq-orig", map addUniqOrig ds)
+    addUniqs ("uniq-gen", ds) = ("uniq-gen", map addUniqGen ds)
+    -- leave other declarations alone
+    addUniqs (n, ds) = (n, ds)
+    indzeros = indz_ins
+    -- ind-zero-in declarations: for numeric subterms occurring earlier than
+    -- the generation point of uniq-gen numeric variables.
+    indz_ins = case concatMap indz_ininsts (filter isNum (dkuniqgen decls)) of
+      [] -> []
+      insts -> [("ind-zero-in", insts)]
+    indz_ininsts v =
+      case generationPos (v) trace of
+        Nothing -> error "Protocol.mkRole: Atom does not generate"
+        Just p -> indz_ininsts_var v p
+    -- ind-zero instances for a specific variable v that generates at height p
+    indz_ininsts_var v p =
+      map (\t -> (declInst [v,t] [])) (numsUpTo p)
+    -- returns a list of numeric subterms of all messages prior to height p.
+    numsUpTo p =
+      concatMap S.toList $ map subNums $ concatMap evtTerms $ take p trace
+    -- avoid = avoidTerms decls
+    decls = mkDecls dlist
+    addUniqOrig dinst
+      | null $ dterms dinst =
+        error "Protocol.mkRole: malformed uniq-orig declaration"
+      | otherwise =
+        case originationPos (t) trace of
+          Just p -> (declInst [t] [p])
+          Nothing -> error "Protocol.mkRole: Atom does not originate"
+      where
+        t = head $ dterms dinst
+    addUniqGen dinst
+      | null $ dterms dinst =
+        error "Protocol.mkRole: malformed uniq-gen declaration"
+      | otherwise =
+        case generationPos (t) trace of
+          Just p -> (declInst [t] [p])
+          Nothing -> error "Protocol.mkRole: Atom does not generate"
+      where
+        t = head $ dterms dinst
+
+-- A role is well formed if all non-base variables are receive bound,
+-- each atom declared to be uniquely-originating originates in
+-- the trace, and every variable that occurs in each atom
+-- declared to be non-originating occurs in some term in the trace,
+-- and the atom must never be carried by any term in the trace.
+roleWellFormed :: (Monad m, Algebra t p g s e c) => Role t -> m ()
+roleWellFormed role =
+    do
+      failwith "[ASSERT FAILED] invalid declaration"
+                   $ all declarationValid (map fst $ declarationTags $ rdecls role)
+      mapM_ nonCheck $ dknon $ rdecls role
+      mapM_ uniqueCheck $ dkunique $ rdecls role
+      let chk = declCheck $ rdecls role
+      failwith (snd chk) (fst chk)
+      mapM_ origVarCheck $ rvars role
+      failwith "role trace is a prefix of a listener"
+                   $ notListenerPrefix $ rtrace role
+    where
+      declarationValid tag = all declInstValid $ tagDecls tag $ rdecls role
+      declInstValid dinst =
+          (all lenCheck $ dlocs dinst) && (varSubset (dterms dinst) terms)
+      terms = tterms (rtrace role)
+      nonCheck t =
+          failwith (showString "non-orig " $ showst t " carried")
+                       $ all (not . carriedBy t) (tmesgterms (rtrace role))
+      lenCheck n = (n >= 0 && n < (length $ rtrace role))
+
+      uniqueCheck t =
+          failwith (showString "[ASSERT FAILED] uniq-orig " $ showst  t " doesn't originate")
+                       $ originates t (rtrace role)
+      origVarCheck v =
+          failwith (showString "variable " $ showst v " not acquired")
+                       $ not (isAcquiredVar v) ||
+                         M.isJust (acquiredPos v (rtrace role))
+
+showst :: Algebra t p g s e c => t -> ShowS
+showst t =
+    shows $ displayTerm (addToContext emptyContext [t]) t
+
+-- Ensure a trace is not a prefix of a listener
+notListenerPrefix :: Algebra t p g s e c => Trace t -> Bool
+notListenerPrefix (In t : Out t' : _) | t == t' = False
+notListenerPrefix _ = True
+
 -- Protocols
 
 data Prot t g
@@ -266,3 +377,9 @@
            varsAllAtoms = all roleVarsAllAtoms roles }
     where
       roleVarsAllAtoms role = all isAtom (rvars role)
+
+type RoleDeclInst t = DeclInst t Int
+type RoleDeclInstList t = DeclInstList t Int
+type RoleDeclaration t = Declaration t Int
+type RoleDeclList t = DeclList t Int
+type RoleDeclarations t = Declarations t Int
diff --git a/src/CPSA/Lib/Reduction.hs b/src/CPSA/Lib/Reduction.hs
--- a/src/CPSA/Lib/Reduction.hs
+++ b/src/CPSA/Lib/Reduction.hs
@@ -25,7 +25,7 @@
 
 -- Set when debugging an exception so that buffered results get out.
 useFlush :: Bool
-useFlush = False                -- True
+useFlush = True                -- False
 
 -- Parameter driven S-expression printer
 wrt :: Options -> Handle -> SExpr a -> IO ()
@@ -114,7 +114,7 @@
         [] ->                  -- Input cannot be made into a skeleton
             do
               let lk = LPreskel k n Nothing
-              wrt p h (commentPreskel lk [] (unrealized k) False
+              wrt p h (commentPreskel lk [] (unrealized k) False False
                        "Input cannot be made into a skeleton--nothing to do")
               solve p h ks (n + 1)
         [k'] ->
@@ -125,7 +125,7 @@
             else                -- Input was not a skeleton
                 do
                   let lk = LPreskel k n Nothing
-                  wrt p h (commentPreskel lk [] (unrealized k) False
+                  wrt p h (commentPreskel lk [] (unrealized k) False False
                            "Not a skeleton")
                   let lk' = LPreskel k' (n + 1) (Just lk)
                   begin p h ks (n + optLimit p) (n + 2)
@@ -190,6 +190,13 @@
 breadth p h ks m n seen todo tobig =
     step p h ks m seen n void [] tobig (parMap (branch p seen) todo)
 
+-- Returns the nodes in a preskeleton that are not realized and are at or
+-- above the minimum priority.
+thresholdUnrealized :: Algebra t p g s e c => Preskel t g s e -> [Node]
+thresholdUnrealized k = filter activePriority $ unrealized k
+  where
+    activePriority n = (priority k n >= minPriority)
+
 -- Function step handles one skeleton in one level of the tree.
 step :: Algebra t p g s e c => Options -> Handle ->
         [Preskel t g s e] -> Int -> Seen t g s e -> Int ->
@@ -206,12 +213,20 @@
     | nstrands (content lk) >= optBound p = -- Check strand count
         step p h ks m oseen n seen todo (lk : tobig) reducts
 step p h ks m oseen n seen todo tobig (Reduct lk size cols kids dups : reducts)
+    | optGoalsSat p && satCheck lk = -- Stop if goals satisfied mode?
+        do
+          let ns = unrealized (content lk)
+          let shape = null ns
+          wrt p h (commentPreskel lk [] ns shape False
+                   "satisfies all")
+          step p h ks m oseen n seen todo tobig reducts
     | size <= 0 =               -- Interpret empty reducts
         do
           let ns = unrealized (content lk)
           let shape = null ns
-          wrt p h (commentPreskel lk [] ns shape
-                   (if shape then "" else "empty cohort"))
+          let live = null $ thresholdUnrealized (content lk)
+          wrt p h (commentPreskel lk [] ns shape False
+                   (if live then "" else "empty cohort"))
           step p h ks m oseen n seen todo tobig reducts
     | otherwise =
         do
@@ -221,7 +236,7 @@
           let u = size - length dups'
           let msg = shows size $ showString " in cohort - " $
                          shows u " not yet seen"
-          wrt p h (commentPreskel lk (reverse dups') ns cols msg)
+          wrt p h (commentPreskel lk (reverse dups') ns cols False msg)
           step p h ks m oseen n' seen' todo' tobig reducts
 
 -- Expands one branch in the derivation tree.
@@ -305,7 +320,7 @@
       let ns = unrealized (content lk)
       let ks' = reduce (mkMode p) (content lk)
       let msg = show (length ks') ++ " in cohort"
-      wrt p h (commentPreskel lk [] ns (null ns) msg)
+      wrt p h (commentPreskel lk [] ns (null ns) False msg)
       let (n', todo') = foldl (children lk) (n, []) ks'
       fast p h ks m n' (todo ++ reverse todo')
 
@@ -325,21 +340,22 @@
 dump p h (lk : lks) msg =
     do
       let ns = unrealized $ content lk
-      wrt p h (commentPreskel lk [] ns False "aborted")
+      wrt p h (commentPreskel lk [] ns False True "aborted")
       dump p h lks msg
 
 -- Add a label, maybe a parent, a list of seen preskeletons isomorphic
 -- to some members of this skeleton's cohort, and a list of unrealized
 -- nodes.  If it's a shape, note this fact.  Add a comment if present.
 commentPreskel :: Algebra t p g s e c => LPreskel t g s e ->
-                  [Int] -> [Node] -> Bool -> String -> SExpr ()
-commentPreskel lk seen unrealized shape msg =
+                  [Int] -> [Node] -> Bool -> Bool -> String -> SExpr ()
+commentPreskel lk seen unrealized shape _ msg =
     displayPreskel k $
     addKeyValues "label" [N () (label lk)] $
     maybeAddVKeyValues "parent" (\p -> [N () (label p)]) (parent lk) $
     condAddKeyValues "seen" (not $ null seen)
                      (map (N ()) (L.sort (L.nub seen))) $
     addKeyValues "unrealized" (map displayNode $ L.sort unrealized) $
+--    addKeyValues "unrealized-todo" (map displayNode $ L.sort (filter (\n -> priority k n >= minPriority) unrealized)) $
     condAddKeyValues "shape" shape [] $
     condAddKeyValues "satisfies" (shape && (not $ null $ kgoals k))
     (satisfies k) $
@@ -349,6 +365,7 @@
     -- Nodes of origination
     -- Added for cpsasas program
     condAddKeyValues "origs" (starter k || shape) (origs k) $
+    -- condAddKeyValues "ugens" (starter k || shape) (ugens k) $
     -- Messages
     case msg of
       "" -> []
@@ -400,7 +417,8 @@
           case pov k of
             Nothing -> []
             Just k' ->
-                map (displayEnv (ctx k') (ctx k)) (homomorphism k' k (prob k))
+                map (displayEnv (ctx k') (ctx k))
+                    (homomorphism k' k (prob k))
       ctx k = addToContext emptyContext (kvars k)
 
 -- Prints the nodes of origination for each uniquely originating atom
@@ -410,3 +428,19 @@
       | (t, ns) <- korig k, n <- ns ]
     where
       ctx = addToContext emptyContext (kvars k)
+
+-- Prints the nodes of origination for each uniquely originating atom
+--ugens :: Algebra t p g s e c => Preskell t g s e -> [SExpr ()]
+--ugens k =
+--    [ L () [displayTerm ctx t, displayNode n]
+--      | (t, ns) <- kugen k, n <- ns ]
+--    where
+--      ctx = addToContext emptyContext (kvars k)
+
+satCheck :: Algebra t p g s e c => LPreskel t g s e -> Bool
+satCheck lk =
+  not (null tests) && all f tests
+  where
+    tests = sat $ content lk
+    f (_, []) = True
+    f _ = False
diff --git a/src/CPSA/Lib/State.hs b/src/CPSA/Lib/State.hs
new file mode 100644
--- /dev/null
+++ b/src/CPSA/Lib/State.hs
@@ -0,0 +1,64 @@
+module CPSA.Lib.State where
+
+import Data.Maybe (catMaybes)
+import CPSA.Lib.Algebra
+import CPSA.Lib.Utilities
+
+-- A transition
+newtype Tran t = Tran (Maybe t, Maybe t, Maybe t) deriving (Show, Eq, Ord)
+
+now :: Tran t -> Maybe t
+now (Tran (t, _, _)) = t
+
+next :: Tran t -> Maybe t
+next (Tran (_, t, _)) = t
+
+-- Labels are ignored
+-- label :: Tran t -> Maybe t
+-- label (Tran (_, _, t)) = t
+
+observer :: Eq t => Tran t -> Bool
+observer (Tran (_, Nothing, _)) = True
+observer _ = False
+
+path :: Eq t => Tran t -> Bool
+path x = not (observer x)
+
+transition :: Eq t => Tran t -> Bool
+transition (Tran (Just _, Just _, _)) = True
+transition _ = False
+
+tranTerms :: Tran t -> [t]
+tranTerms (Tran (Nothing, Nothing, _)) =
+  assertError ("Encountered sync with no pre- or post-state in State.hs:tranTerms")
+tranTerms (Tran (now, next, label)) =
+  catMaybes [now, next, label]
+
+mapTran :: (t -> t) -> Tran t -> Tran t
+mapTran f (Tran (now, next, label)) =
+  Tran (maybe Nothing (Just . f) now, maybe Nothing (Just . f) next,
+        maybe Nothing (Just . f) label)
+
+matchTran :: Algebra t p g s e c => Tran t -> Tran t -> (g, e) -> [(g, e)]
+matchTran (Tran (c, n, l)) (Tran (c', n', l')) ge =
+  do
+    ge0 <- matchNext c c' ge
+    ge1 <- matchNext n n' ge0
+    matchNext l l' ge1
+
+matchNext :: Algebra t p g s e c => Maybe t -> Maybe t -> (g, e) -> [(g, e)]
+matchNext Nothing Nothing ge = [ge]
+matchNext (Just t) (Just t') ge = match t t' ge
+matchNext _ _ _ = []
+
+unifyTran :: Algebra t p g s e c => Tran t -> Tran t -> (g, s) -> [(g, s)]
+unifyTran (Tran (c, n, l)) (Tran (c', n', l')) gs =
+  do
+    gs0 <- unifyNext c c' gs
+    gs1 <- unifyNext n n' gs0
+    unifyNext l l' gs1
+
+unifyNext :: Algebra t p g s e c => Maybe t -> Maybe t -> (g, s) -> [(g, s)]
+unifyNext Nothing Nothing ge = [ge]
+unifyNext (Just t) (Just t') ge = unify t t' ge
+unifyNext _ _ _ = []
diff --git a/src/CPSA/Lib/Strand.hs b/src/CPSA/Lib/Strand.hs
--- a/src/CPSA/Lib/Strand.hs
+++ b/src/CPSA/Lib/Strand.hs
@@ -8,2060 +8,2661 @@
 
 module CPSA.Lib.Strand (Instance, mkInstance, bldInstance, mkListener,
     role, env, trace, height, listenerTerm, Sid, Node, mkPreskel,
-    firstSkeleton, Pair, Preskel, gen, protocol, kgoals, insts, orderings,
-    pov, knon, kpnon, kunique, korig, kpriority, kcomment, nstrands, kvars,
-    strandids, kterms, uniqOrig, preskelWellFormed, verbosePreskelWellFormed,
-    Strand, inst, sid, nodes, Vertex, strand, pos, preds, event,
-    graphNode, strands, vertex, Gist, gist, isomorphic, contract, augment,
-    inheritRnon, inheritRpnon, inheritRunique, addListener, Cause
-    (..), Direction (..), Method (..), Operation (..), operation,
-    prob, homomorphism, toSkeleton, generalize, collapse, sat) where
-
-import Control.Monad
-import qualified Data.List as L
-import qualified Data.Set as S
-import Data.Set (Set)
-import qualified Data.Maybe as M
-import CPSA.Lib.Utilities
-import CPSA.Lib.SExpr
-import CPSA.Lib.Algebra
-import CPSA.Lib.Protocol
-import CPSA.Lib.Goal
-
-{--
-import System.IO.Unsafe
-import Control.Exception (try)
-import System.IO.Error (ioeGetErrorString)
-
-z :: Show a => a -> b -> b
-z x y = unsafePerformIO (print x >> return y)
-
-zz :: Show a => a -> a
-zz x = z x x
-
-zb :: Show a => a -> Bool -> Bool
-zb a False = z a False
-zb _ b = b
-
-zn :: Show a => a -> Maybe b -> Maybe b
-zn x Nothing = z x Nothing
-zn _ y = y
-
-zf :: Show a => a -> Bool -> Bool
-zf x False = z x False
-zf _ y = y
-
-zt :: Show a => a -> Bool -> Bool
-zt x True = z x True
-zt _ y = y
-
-zl :: Show a => [a] -> [a]
-zl a = z (length a) a
-
-zi :: Algebra t p g s e c => Instance t e -> String
-zi inst =
-    show (map f e)
-    where
-      domain = rvars (role inst)
-      e = reify domain (env inst)
-      range = map snd e
-      f (x, t) = (displayTerm (context domain) x,
-                  displayTerm (context range) t)
-      context ts = addToContext emptyContext ts
-
-zv :: Algebra t p g s e c => Preskel t g s e -> String
-zv k =
-  unsafePerformIO $ do
-    y <- try $ verbosePreskelWellFormed k
-    case y of
-      Right _ ->
-        return "preskel well formed"
-      Left err ->
-        return $ ioeGetErrorString err
-
--- Also see showst
---}
-
--- Compile time switches for expermentation.
-
--- Do not do multistrand thinning.
-useSingleStrandThinning :: Bool
-useSingleStrandThinning = False -- True
-
--- Sanity check: ensure no role variable occurs in a skeleton.
-useCheckVars :: Bool
-useCheckVars = False
-
-useThinningDuringCollapsing :: Bool
-useThinningDuringCollapsing = False -- True
-
-useThinningWhileSolving :: Bool
-useThinningWhileSolving = True -- False
-
-useNoOrigPreservation :: Bool
-useNoOrigPreservation = False -- True
-
--- Instances and Strand Identifiers
-
--- An Instance is an instance of a role, in the sense that each
--- variable in the role's trace has been replaced by a term.  The
--- trace of the instance might be shorter that the role's trace, but
--- only truncating nodes from the end of the trace.
-
--- A preskeleton stores its strands as a ordered sequence of
--- instances.  A strand is the position of an instance in the
--- sequence.  Duplicates are allowed in the sequence, as two strands
--- can be instantiated from the same role in the same way.
-
-type Sid = Int                  -- Strand Identifier
-
-data Instance t e = Instance
-    { role :: Role t, -- Role from which this was
-                                -- instantiated
-
-      env :: !e,                -- The environment used to build this
-                                -- instance's trace from its role's
-                                -- trace
-
-      trace :: ![Event t], -- Instance's trace
-
-      height :: !Int }          -- Height of the instance
-    deriving Show
-
--- Create a fresh instance of the given height.  The environment
--- specifies how to map some variables in the role's trace.  Unmapped
--- variables are instantiated with fresh variables to avoid naming
--- conflicts.
-mkInstance :: Algebra t p g s e c => g -> Role t ->
-              e -> Int -> (g, Instance t e)
-mkInstance gen role env height =
-    let trace = rtrace role
-        rheight = length trace in
-    if height < 1 || height > rheight then
-        error "Strand.mkInstance: Bad strand height"
-    else
-        let (gen', env') = grow (rvars role) gen env
-            trace' = map (evtMap $ instantiate env') (take height trace) in
-        -- Ensure every variable in the range of the environment
-        -- occurs in the trace.
-        case bldInstance role trace' gen' of
-          (gen'', inst) : _ -> (gen'', inst)
-          [] -> error "Strand.mkInstance: Not an instance"
-
--- For each term that matches itself in the environment, extend the
--- mapping so that the term maps to one with a fresh set of variables.
--- It is an error if a variable in one of the terms is explicitly
--- mapped to itself in the initial environment.
-grow :: Algebra t p g s e c => [t] -> g -> e -> (g, e)
-grow [] gen env = (gen, env)
-grow (t : ts) gen env =
-    case match t t (gen, env) of
-      [] -> grow ts gen env     -- Term already mapped
-      _ ->                      -- Otherwise make a fresh mapping
-          let (gen', t') = clone gen t in
-          case match t t' (gen', env) of
-            (gen'', env') : _ -> grow ts gen'' env'
-            [] -> error "Strand.grow: Internal error"
-
--- Build an instance from a role and a trace.  Returns the empty list
--- if the trace is not an instance of the given role.
-bldInstance :: Algebra t p g s e c => Role t ->
-               Trace t -> g -> [(g, Instance t e)]
-bldInstance _ [] _ = error "Strand.bldInstance: Bad trace"
-bldInstance role trace gen =
-    loop (rtrace role) trace (gen, emptyEnv) -- Loop builds env
-    where
-      loop _ [] (gen, env) =        -- Trace can be shorter than role's trace
-          [(gen, makeInstance role env trace)]
-      loop (In t : c) (In t' : c') ge =
-          do
-            env <- match t t' ge
-            loop c c' env
-      loop (Out t : c) (Out t' : c') ge =
-          do
-            env <- match t t' ge
-            loop c c' env
-      loop _ _ _ = []
-
-makeInstance :: Role t -> e -> Trace t -> Instance t e
-makeInstance role env trace =
-    Instance { role = role,
-               env = env,
-               trace = trace,
-               height = length trace }
-
-mkListener :: Algebra t p g s e c => Prot t g -> g -> t ->
-              (g, Instance t e)
-mkListener p gen term =
-    case bldInstance (listenerRole p) [In term, Out term] gen of
-      [x] -> x
-      _ -> error "Strand.mkListener: Cannot build an instance of a listener"
-
--- Add to set s the variables that are in the range of instance i
-addIvars :: Algebra t p g s e c => Set t -> Instance t e -> Set t
-addIvars s i =
-    foldl g s (reify (rvars (role i)) (env i))
-    where
-      g s (_, t) = foldVars (flip S.insert) s t
-
-listenerTerm :: Algebra t p g s e c => Instance t e -> Maybe t
-listenerTerm inst =
-    case rname (role inst) of
-      "" -> inbnd (trace inst !! 0) -- Get first term in trace
-      _ -> Nothing              -- Not a listener strand
-
--- Nodes, Pairs, and Graphs
-
--- A node is composed of two integers, a strand identifier and a
--- position.  The position identifies an event in the strand's trace.
--- The second integer must be non-negative and less than the strand's
--- height
-
-type Node = (Sid, Int)
-
--- A pair gives an ordering of two nodes, meaning the first node is
--- before the second one.
-
-type Pair = (Node, Node)
-
--- Graphs of preskeletons
-
--- A strand is what is referred to by a strand ID.
-
-data GraphStrand e i                 -- e for event, i for instance
-    = GraphStrand { inst :: i,
-                    nodes :: [GraphNode e i],
-                    sid :: Sid }
-
--- The Strand ID determines equality and orderings
-instance Eq (GraphStrand e i) where
-    s0 == s1 = sid s0 == sid s1
-
-instance Ord (GraphStrand e i) where
-    compare s0 s1 = compare (sid s0) (sid s1)
-
-instance Show (GraphStrand e i) where
-    showsPrec _ s = shows (sid s)
-
--- A vertex is what is referred to by a node.
-
-data GraphNode e i                 -- e for event, i for instance
-    = GraphNode { event :: e,
-                  preds :: [GraphNode e i], -- Immediate preds including
-                  strand :: GraphStrand e i,  -- strand succession edges
-                  pos :: Int }  -- The position of the node in the strand
-
--- The node determines equality and orderings
-instance Eq (GraphNode e i) where
-    n0 == n1 = (strand n0, pos n0) == (strand n1, pos n1)
-
-instance Ord (GraphNode e i) where
-    compare n0 n1 = compare (strand n0, pos n0) (strand n1, pos n1)
-
-instance Show (GraphNode e i) where
-    showsPrec _ n = let (s, i') = graphNode n in
-                    showChar '(' . shows s . showString ", " .
-                    shows i' . showChar ')'
-
--- The node of a vertex
-graphNode :: GraphNode e i -> Node
-graphNode n = (sid (strand n), pos n)
-
-type GraphEdge e i = (GraphNode e i, GraphNode e i)
-
--- The pair of an edge
-graphPair :: GraphEdge e i -> Pair
-graphPair (n0, n1) = (graphNode n0, graphNode n1)
-
-graphEdges :: [GraphStrand e i] -> [GraphEdge e i]
-graphEdges strands =
-    [ (dst, src) | s <- strands, src <- nodes s, dst <- preds src ]
-
-data Graph e i
-    = Graph { gstrands :: [GraphStrand e i],
-              gedges :: [GraphEdge e i] }
-
--- The graph associated with a preskeleton
-graph :: (i -> [d]) -> (i -> Int) -> [i] -> [Pair] -> Graph d i
-graph trace height insts pairs =
-    Graph { gstrands = strands,
-            gedges = map getEdge pairs }
-    where
-      strands = [ GraphStrand { inst = inst,
-                                nodes = nodes !! sid,
-                                sid = sid } |
-                  (sid, inst) <- zip [0..] insts ]
-      nodes = [ [ GraphNode { event = trace (inst strand) !! pos,
-                              preds = preds (sid, pos),
-                              strand = strand,
-                              pos = pos } |
-                  pos <- nats (height (inst strand)) ] |
-                (sid, strand) <- zip [0..] strands ]
-      preds n = map getNode (entry n)
-      getNode (s, i) = nodes !! s !! i
-      getEdge (n0, n1) = (getNode n0, getNode n1)
-      entry n = enrich n [ n0 | (n0, n1) <- pairs, n1 == n ]
-      -- add strand succession edges
-      enrich (s, i) ns
-          | i > 0 = (s, i - 1) : ns
-          | otherwise = ns
-
--- Compute the transitive reduction
-graphReduce :: [GraphEdge e i] -> [GraphEdge e i]
-graphReduce orderings =
-    filter essential orderings
-    where
-      essential (dst, src) =
-          loop dst (L.delete dst (preds src)) [src]
-      loop _ [] _ = True        -- No other path found
-      loop dst (n : ns) seen
-          | n == dst = False    -- There is another path
-          | elem n seen = loop dst ns seen
-          | otherwise = loop dst (preds n ++ ns) (n : seen)
-
--- Compute the transitive closure
--- This routine returns pairs that are not well ordered.
--- Deal with it!
-graphClose :: [GraphEdge e i] -> [GraphEdge e i]
-graphClose orderings =
-    filter (not . sameStrands) (loop orderings False orderings)
-    where
-      loop orderings False [] = orderings
-      loop orderings True [] =
-          loop orderings False orderings -- restart loop
-      loop orderings repeat ((n0, n1) : pairs) =
-          inner orderings repeat pairs [(n, n1) | n <- preds n0]
-      inner orderings repeat pairs [] =
-          loop orderings repeat pairs
-      inner orderings repeat pairs (p : rest)
-          | elem p orderings = inner orderings repeat pairs rest
-          | otherwise = inner (p : orderings) True pairs rest
-      sameStrands (n0, n1) = strand n0 == strand n1
-
--- Shared part of preskeletons
-
-data Shared t g = Shared
-    { prot  :: Prot t g,
-      goals :: [Goal t] }
-
-instance (Show t, Show g) => Show (Shared t g) where
-    showsPrec _ s = shows (prot s)
-
-protocol :: Preskel t g s e -> Prot t g
-protocol k = prot $ shared k
-
-kgoals :: Preskel t g s e -> [Goal t]
-kgoals k = goals $ shared k
-
--- Preskeletons
-
-data Preskel t g s e = Preskel
-    { gen :: !g,
-      shared :: Shared t g,
-      insts :: ![Instance t e],
-      strands :: ![Strand t e],
-      orderings :: ![Pair],
-      edges :: ![Edge t e],
-      knon :: ![t],             -- A list of atoms
-      kpnon :: ![t],            -- A list of atoms
-      kunique :: ![t],          -- A list of atoms
-      kpriority :: [(Node, Int)], -- Override node priority
-      kcomment :: [SExpr ()],   -- Comments from the input
-      korig :: ![(t, [Node])],  -- This is an association list with a
-                                -- pair for each element of kunique.
-                                -- The value associated with a term
-                                -- is a list of the nodes at which it
-                                -- originates--the term's provenance.
-      pov :: Maybe (Preskel t g s e), -- Point of view, the
-                                          -- original problem statement.
-      strandids :: ![Sid],
-      tc :: [Pair],             -- Transitive closure of orderings
-                                -- Used only during generalization
-      operation :: Operation t s,
-      prob :: [Sid] }        -- A map from the strands in the original
-    deriving Show               -- problem statement, the pov, into
-                                -- these strands.
-
--- The pov skeleton is the only skeleton that should have Nothing in
--- its pov field.
-
-type Strand t e
-    = GraphStrand (Event t) (Instance t e)
-
-type Vertex t e
-    = GraphNode (Event t) (Instance t e)
-
-type Edge t e
-    = GraphEdge (Event t) (Instance t e)
-
--- Data structure for tracking the causes for the creation of
--- preskeletons.
-
-data Cause t
-    = Cause Direction Node t (Set t)
-    deriving Show
-
-data Direction = Encryption | Nonce deriving Show
-
-data Method t
-    = Deleted Node
-    | Weakened Pair
-    | Separated t
-    | Forgot t deriving Show
-
--- The operation used to generate the preskeleteton is either new via
--- the loader, a contraction, a regular augmentation, a listener
--- augmentation, or a mininization.  The augmentation includes a role
--- name and instance height.
-data Operation t s
-    = New
-    | Contracted s (Cause t)
-    | Displaced Int Int String Int (Cause t)
-    | AddedStrand String Int (Cause t)
-    | AddedListener t (Cause t)
-    | Generalized (Method t)
-    | Collapsed Int Int
-      deriving Show
-
--- Create a preskeleton.  The point of view field is not filled in.
--- This version is exported for use by the loader.  This preskeleton
--- must be consumed by firstSkeleton.
-mkPreskel :: Algebra t p g s e c => g -> Prot t g -> [Goal t] ->
-             [Instance t e] -> [Pair] -> [t] -> [t] -> [t] ->
-             [(Node, Int)] -> [SExpr ()] -> Preskel t g s e
-mkPreskel gen protocol gs insts orderings non pnon unique prio comment =
-    k { kcomment = comment }
-    where
-      k = newPreskel gen shared insts orderings non pnon
-          unique prio New prob Nothing
-      shared = Shared { prot = protocol, goals = gs }
-      prob = strandids k        -- Fixed point on k is okay.
-
--- Strand functions
-
-strandInst :: Algebra t p g s e c => Preskel t g s e ->
-              Sid -> Instance t e
-strandInst k strand = insts k !! strand
-
-nstrands :: Algebra t p g s e c => Preskel t g s e -> Int
-nstrands k = length (strandids k)
-
--- Convert the preskeleton made by the loader into the first skeleton
--- used in the search.
-firstSkeleton :: Algebra t p g s e c => Preskel t g s e ->
-                 [Preskel t g s e]
-firstSkeleton k =
-    do
-      k <- wellFormedPreskel k
-      k' <- toSkeleton False k   -- only k' should have pov = Nothing
-      return $ k' { prob = strandids k', pov = Just k' }
-
--- Create a preskeleton.  The node ordering relation is put into the
--- preds field of each instance in this function.  The maybe uniquely
--- originating term data is also filled in.  This version is used
--- within this module.
-newPreskel :: Algebra t p g s e c => g -> Shared t g ->
-             [Instance t e] -> [Pair] -> [t] -> [t] -> [t] ->
-             [(Node, Int)] -> Operation t s -> [Sid] ->
-             Maybe (Preskel t g s e) -> Preskel t g s e
-newPreskel gen shared insts orderings non pnon unique prio oper prob pov =
-    let orderings' = L.nub orderings
-        unique' = L.nub unique
-        g = graph trace height insts orderings'
-        strands = gstrands g
-        edges = gedges g
-        orig = map (originationNodes strands) unique'
-        tc = filter pairWellOrdered (graphClose $ graphEdges strands)
-        k = Preskel { gen = gen,
-                      shared = shared,
-                      insts = insts,
-                      strands = strands,
-                      orderings = orderings',
-                      edges = edges,
-                      knon = L.nub non,
-                      kpnon = L.nub pnon,
-                      kunique = unique',
-                      kpriority = prio,
-                      kcomment = [],
-                      korig = orig,
-                      tc = map graphPair tc,
-                      strandids = nats (length insts),
-                      operation = oper,
-                      prob = prob,
-                      pov = pov } in
-        if useCheckVars then
-            checkVars k
-        else k
-
-checkVars :: Algebra t p g s e c => Preskel t g s e ->
-             Preskel t g s e
-checkVars k =
-    foldl f k rolevars
-    where
-      skelvars = S.fromList $ kvars k
-      rolevars = concatMap (rvars . role) (insts k)
-      f k v
-        | S.member v skelvars =
-            error ("Strand.checkVars: role var in skel " ++ show k)
-        | otherwise = k
-
-vertex  :: Algebra t p g s e c => Preskel t g s e -> Node ->
-           Vertex t e
-vertex k (s, i) =
-    nodes (strands k !! s) !! i
-
-originationNodes :: Algebra t p g s e c => [Strand t e] ->
-                    t -> (t, [Node])
-originationNodes strands u =
-    (u, [ (sid strand, p) |
-          strand <- reverse strands,
-          p <- M.maybeToList $ originationPos u (trace (inst strand)) ])
-
-uniqOrig :: Algebra t p g s e c => Preskel t g s e -> [t]
-uniqOrig k =
-    do
-      (t, [_]) <- reverse (korig k)
-      return t
-
--- A preskeleton is well formed if the ordering relation is acyclic,
--- each atom declared to be uniquely-originating is carried in some
--- preskeleton term, and every variable that occurs in each base term
--- declared to be non-originating or pen-non-originating occurs in
--- some preskeleton term, and the atom must never be carried by any
--- term, and every uniquely originating role term mapped by an
--- instance is mapped to a term that originates on the instance's
--- strand.
-
-preskelWellFormed :: Algebra t p g s e c => Preskel t g s e -> Bool
-preskelWellFormed k =
-    varSubset (knon k) terms &&
-    varSubset (kpnon k) terms &&
-    all nonCheck (knon k) &&
-    all uniqueCheck (kunique k) &&
-    wellOrdered k && acyclicOrder k &&
-    roleOrigCheck k
-    where
-      terms = kterms k
-      nonCheck t = all (not . carriedBy t) terms
-      uniqueCheck t = any (carriedBy t) terms
-
--- Do notation friendly preskeleton well formed check.
-wellFormedPreskel :: (Monad m, Algebra t p g s e c) =>
-                     Preskel t g s e -> m (Preskel t g s e)
-wellFormedPreskel k
-    | preskelWellFormed k = return k
-    | otherwise = fail "preskeleton not well formed"
-
--- A version of preskelWellFormed that explains why a preskeleton is
--- not well formed.
-verbosePreskelWellFormed :: (Monad m, Algebra t p g s e c) =>
-                            Preskel t g s e -> m ()
-verbosePreskelWellFormed k =
-    do
-      failwith "a variable in non-orig is not in some trace"
-                   $ varSubset (knon k) terms
-      failwith "a variable in pen-non-orig is not in some trace"
-                   $ varSubset (kpnon k) terms
-      mapM_ nonCheck $ knon k
-      mapM_ uniqueCheck $ kunique k
-      failwith "ordered pairs not well formed" $ wellOrdered k
-      failwith "cycle found in ordered pairs" $ acyclicOrder k
-      failwith "an inherited unique doesn't originate in its strand"
-                   $ roleOrigCheck k
-    where
-      terms = kterms k
-      nonCheck t =
-          failwith (showString "non-orig " $ showst t " carried")
-                       $ all (not . carriedBy t) terms
-      uniqueCheck t =
-          failwith (showString "uniq-orig " $ showst t " not carried")
-                       $ any (carriedBy t) terms
-
-failwith :: Monad m => String -> Bool -> m ()
-failwith msg test =
-    case test of
-      True -> return ()
-      False -> fail msg
-
-showst :: Algebra t p g s e c => t -> ShowS
-showst t =
-    shows $ displayTerm (addToContext emptyContext [t]) t
-
--- Do the nodes in the orderings have the right direction?
-wellOrdered :: Algebra t p g s e c => Preskel t g s e -> Bool
-wellOrdered k =
-    all pairWellOrdered (edges k)
-
-pairWellOrdered :: Algebra t p g s e c => Edge t e -> Bool
-pairWellOrdered (n0, n1) =
-    case (event n0, event n1) of
-      (Out _, In _) -> True
-      _ -> False
-
--- The terms used in the strands in this preskeleton.
--- Should this return a set, or a multiset?
-kterms :: Eq t => Preskel t g s e -> [t]
-kterms k = iterms (insts k)
-
--- The terms used in a list of instances.
-iterms :: Eq t => [Instance t e] -> [t]
-iterms insts =
-  L.nub [evtTerm evt | i <- insts, evt <- trace i]
-
--- The node orderings form an acyclic order if there are no cycles.
--- Use depth first search to detect cycles.  A graph with no node with
--- an indegree of zero is cyclic and must not be checked with depth
--- first search.
-acyclicOrder :: Algebra t p g s e c => Preskel t g s e -> Bool
-acyclicOrder k =
-    all (not . backEdge numbering) edges
-    where
-      edges = graphEdges (strands k)
-      -- The starting set contains the last node in every strand
-      start = map (last . nodes) (strands k)
-      -- Remove nodes that have non-zero indegree
-      start' = foldl (flip L.delete) start (map fst edges)
-      numbering = dfs preds start'
-
--- Variables in this preskeleton, excluding ones in roles, and ones
--- that only occur in a cause.
-kvars :: Algebra t p g s e c => Preskel t g s e -> [t]
-kvars k =
-    S.elems $ foldl addIvars S.empty (insts k)
-
--- Ensure each role unique origination assumption mapped by an
--- instance originates in the instance's strand.
-roleOrigCheck :: Algebra t p g s e c => Preskel t g s e -> Bool
-roleOrigCheck k =
-    all strandRoleOrig (strands k) -- Check each strand
-    where
-      strandRoleOrig strand =   -- Check each role unique used in strand
-          all (uniqRoleOrig strand) $ ruorig $ role $ inst strand
-      uniqRoleOrig strand (ru, pos)
-          | pos < height (inst strand) =
-              case lookup (instantiate (env $ inst strand) ru) (korig k) of
-                Nothing -> True     -- role term not mapped
-                Just ns -> any (\(s, i)-> sid strand == s && i == pos) ns
-          | otherwise = True
-
--- Isomorphism Check
-
--- Are two skeletons equivalent?  Two skeletons are equivalent if they
--- are isomorphic.  A key efficiency requirement in the implementation
--- of the cryptograhic protocol shapes analysis algorithm is to ensure
--- only one member of each equivalence class of skeletons is analyzed,
--- and the results of that analysis is immediately used for all other
--- members of the equivalence class.
-
--- To meet this requirement, a list of skeletons that have been seen
--- is maintained.  Before a skeleton is put on a to do list for
--- analysis, it is checked to see if it is ismorphic to one already
--- seen.  If so, the results of the analysis for the ismorphic
--- skeleton is used instead of putting the skeleton on the to do list.
-
--- Once a skeleton has been printed, the only reason for saving it is
--- for isomorphism checking.  The isomorphism check is performed
--- frequently, so an specialized data structure is used.  The gist of
--- a skeleton is all that is needed for the test for equivalence.
-
-data Gist t g = Gist
-    { ggen :: g,
-      gtraces :: [(Int, Trace t)],
-      gorderings :: [Pair],
-      gnon :: [t],             -- A list of non-originating terms
-      gpnon :: [t],      -- A list of penetrator non-originating terms
-      gunique :: [t],          -- A list of uniquely-originating terms
-      nvars :: !Int,           -- Number of variables
-      ntraces :: !Int,         -- Number of traces
-      norderings :: !Int,      -- Number of orderings
-      nnon :: !Int,            -- Number of non-originating terms
-      npnon :: !Int,     -- Number of penetrator non-originating terms
-      nunique :: !Int }        -- Number of uniquely-originating terms
-    deriving Show
-
-gist :: Algebra t p g s e c => Preskel t g s e ->
-        Gist t g
-gist k =
-    Gist { ggen = gen k,
-           gtraces = gtraces,
-           gorderings = gorderings,
-           gnon = gnon,
-           gpnon = gpnon,
-           gunique = gunique,
-           nvars = length (kvars k),
-           ntraces = length gtraces,
-           norderings = length gorderings,
-           nnon = length gnon,
-           npnon = length gpnon,
-           nunique = length gunique }
-    where
-      gtraces = map (\i -> (height i, trace i)) (insts k)
-      gorderings = orderings k
-      gnon = knon k
-      gpnon = kpnon k
-      gunique = kunique k
-
--- Test to see if two preskeletons are isomorphic
-
--- First, ensure the two preskeletons have:
--- 1. The same number of variables
--- 2. The same number of strands
--- 3. The same number of node orderings
--- 4. The same number of terms in knon and kunique
-
--- Next compute the plausible permutations and substitutions.
-
--- Next, for each permutation of the strands, eliminate the ones that
--- map a strand to another of a different length, and don't cause the
--- node orderings to be equal.
-
--- For permutations that meet the previous conditions, see if there is
--- a renaming that maps every strand trace in one preskeleton into the
--- appropriate one in the other preskeleton.  Finally, check to see if
--- the renaming works in the nr and ur terms.
-
-isomorphic :: Algebra t p g s e c => Gist t g ->
-              Gist t g -> Bool
-isomorphic g g' =
-    nvars g == nvars g' &&
-    ntraces g == ntraces g' &&
-    norderings g == norderings g' &&
-    nnon g == nnon g' &&
-    npnon g == npnon g' &&
-    nunique g == nunique g' &&
-    any (tryPerm g g') (permutations g g')
-
--- Extend a permutation while extending a substitution
--- Extend by matching later strands first
-permutations :: Algebra t p g s e c => Gist t g ->
-                Gist t g -> [((g, e), [Sid])]
-permutations g g' =
-    map rev $ perms (ggen g', emptyEnv)
-                    (reverse $ gtraces g)
-                    (reverse $ nats $ ntraces g)
-    where
-      perms env [] [] = [(env, [])]
-      perms env ((h, c):hcs) xs =
-          [ (env'', x:ys) |
-            x <- xs,
-            let (h', c') = gtraces g' !! x,
-            h == h',
-            env' <- jibeTraces c c' env,
-            (env'', ys) <- perms env' hcs (L.delete x xs) ]
-      perms _ _ _ = error "Strand.permutations: lists not same length"
-      rev (env, xs) = (env, reverse xs)
-
--- Length of matched traces must agree.
-jibeTraces :: Algebra t p g s e c => Trace t ->
-              Trace t -> (g, e) -> [(g, e)]
-jibeTraces [] [] ge = [ge]
-jibeTraces (In t : c) (In t' : c') ge =
-    do
-      env <- match t t' ge
-      jibeTraces c c' env
-jibeTraces (Out t : c) (Out t' : c') ge =
-    do
-      env <- match t t' ge
-      jibeTraces c c' env
-jibeTraces _ _ _ = []
-
-{-
--- Here is the permutation algorithm used
-
-permutations :: Int -> [[Int]]
-permutations n =
-    perms (nats n)
-    where
-      perms []  = [[]]
-      perms xs = [ x:ys | x <- xs, ys <- perms (L.delete x xs) ]
-
--- Here is the usual algorithm
-
--- Returns a list of all the permutations of the natural numbers less
--- that the argument.  The identity permutation is the first one in
--- the returned list.  The code is based on a function in Haskell 1.3.
-permutations :: Int -> [[Int]]
-permutations n =
-    perms (nats n)
-    where
-      perms [] = [[]]
-      perms (x:xs) = [zs | ys <- perms xs, zs <- interleave x ys]
-      interleave x [] = [[x]]
-      interleave x (y:ys) = (x:y:ys) : map (y:) (interleave x ys)
--}
-
-tryPerm :: Algebra t p g s e c => Gist t g ->
-           Gist t g -> ((g, e), [Sid]) -> Bool
-tryPerm g g' (env, perm) =
-    checkOrigs g g' env &&
-    containsMapped (permutePair perm) (gorderings g') (gorderings g)
-
--- containsMapped f xs ys is true when list xs contains each element
--- in ys after being mapped with function f.
-containsMapped :: Eq a => (a -> a) -> [a] -> [a] -> Bool
-containsMapped f xs ys =
-    all (flip elem xs) (map f ys)
-
-permutePair :: [Sid] -> Pair -> Pair
-permutePair perm (n, n') = (permuteNode perm n, permuteNode perm n')
-
-permuteNode :: [Sid] -> Node -> Node
-permuteNode perm (strand, pos) = (perm !! strand, pos)
-
-checkOrigs :: Algebra t p g s e c => Gist t g ->
-              Gist t g -> (g, e) -> Bool
-checkOrigs g g' env =
-    not (null
-         [ env''' |
-           env' <- checkOrig env (gnon g) (gnon g'),
-           env'' <- checkOrig env' (gpnon g) (gpnon g'),
-           env''' <- checkOrig env'' (gunique g) (gunique g'),
-           matchRenaming env''' ])
-
--- Try all permutations as done above
-checkOrig :: Algebra t p g s e c => (g, e) -> [t] -> [t] -> [(g, e)]
-checkOrig env [] [] = [env]
-checkOrig env (t:ts) ts' =
-    do
-      t' <- ts'
-      env' <- match t t' env
-      checkOrig env' ts (L.delete t' ts')
-checkOrig _ _ _ = error "Strand.checkOrig: lists not same length"
-
--- Preskeleton Reduction System (PRS)
-
--- The PRS reduces a preskeleton to a list of skeletons.  Along the way,
--- it applies the associtated homomorphism to a node and computes a
--- substitution.  Thus if skel (k, n, empty) = [(k', n', sigma)], then
--- phi,sigma is a homomorphism from k to k', n' = phi(n).
-
-type PRS t p g s e c = (Preskel t g s e, -- Parent
-                        Preskel t g s e, -- Potential cohort member
-                        Node,   -- Image of test node in member
-                        [Sid],  -- Strand map part of homomorphism
-                        s)      -- Substition part of homomorphism
-
--- Extract the protential cohort member from a PRS.
-skel :: Algebra t p g s e c => PRS t p g s e c -> Preskel t g s e
-skel (_, k, _, _, _) = k
-
--- Returns the preskeletons that result from applying a substitution.
--- If validate is True, preskeletons that fail to preserve the nodes
--- at which each maybe uniquely originating term originates are filter
--- out.
-
-ksubst :: Algebra t p g s e c => PRS t p g s e c ->
-          (g, s) -> [PRS t p g s e c]
-ksubst (k0, k, n, phi, hsubst) (gen, subst) =
-    do
-      (gen', insts') <- foldMapM (substInst subst) gen (insts k)
-      let non' = map (substitute subst) (knon k)
-      let pnon' = map (substitute subst) (kpnon k)
-      let unique' = map (substitute subst) (kunique k)
-      let operation' = substOper subst (operation k)
-      let k' = newPreskel gen' (shared k) insts'
-               (orderings k) non' pnon' unique' (kpriority k)
-               operation' (prob k) (pov k)
-      k' <- wellFormedPreskel k'
-      return (k0, k', n, phi, compose subst hsubst)
-
--- Monad version of mapAccumR
-foldMapM :: Monad m => (a -> b -> m (a, c)) -> a -> [b] -> m (a, [c])
-foldMapM _ acc [] = return (acc, [])
-foldMapM f acc (x:xs) =
-    do
-      (acc', xs') <- foldMapM f acc xs
-      (acc'', x') <- f acc' x
-      return (acc'', x':xs')
-
-substInst :: Algebra t p g s e c => s -> g -> Instance t e ->
-             [(g, Instance t e)]
-substInst subst gen i =
-    bldInstance (role i) (map (evtMap $ substitute subst) (trace i)) gen
-
-substOper :: Algebra t p g s e c => s ->
-             Operation t s ->
-             Operation t s
-substOper _ New = New
-substOper subst (Contracted s cause) =
-    Contracted (compose subst s) (substCause subst cause)
-substOper _ m@(Displaced _ _ _ _ _) = m
-substOper subst (AddedStrand role height cause) =
-    AddedStrand role height (substCause subst cause)
-substOper subst (AddedListener t cause) =
-    AddedListener (substitute subst t) (substCause subst cause)
-substOper _ m@(Generalized _) = m
-substOper _ m@(Collapsed _ _) = m
-
-substCause :: Algebra t p g s e c => s ->
-              Cause t ->
-              Cause t
-substCause subst (Cause dir n t escape) =
-    Cause dir n (substitute subst t) (S.map (substitute subst) escape)
-
--- A compression (s is to be eliminated)
-compress :: Algebra t p g s e c => Bool -> PRS t p g s e c ->
-            Sid -> Sid -> [PRS t p g s e c]
-compress validate (k0, k, n, phi, hsubst) s s' =
-    do
-      let perm = updatePerm s s' (strandids k)
-      orderings' <- normalizeOrderings validate
-                    (permuteOrderings perm (orderings k))
-      let k' =
-              newPreskel
-              (gen k)
-              (shared k)
-              (deleteNth s (insts k))
-              orderings'
-              (knon k)
-              (kpnon k)
-              (kunique k)
-              (updatePriority perm (kpriority k))
-              (operation k)
-              (updateProb perm (prob k))
-              (pov k)
-      k'' <- wellFormedPreskel k'
-      return (k0, k'', permuteNode perm n, map (perm !!) phi, hsubst)
-
-permuteOrderings :: [Sid] -> [Pair] -> [Pair]
-permuteOrderings perm orderings = map (permutePair perm) orderings
-
-updatePerm :: Int -> Int -> [Sid] -> [Sid]
-updatePerm old new perm =
-    map (updateStrand old new) perm
-
--- Old is to be eliminated and merged into new
-updateStrand :: Int -> Int -> Sid -> Sid
-updateStrand old new i =
-    let j = if old == i then new else i in
-    if j > old then j - 1 else j
-
--- Eliminates implied intrastrand orderings and fails if it finds a
--- reverse intrastrand ordering when flag is true.
-normalizeOrderings :: Bool -> [Pair] -> [[Pair]]
-normalizeOrderings True orderings =
-    loop [] orderings
-    where
-      loop acc [] = [acc]
-      loop acc (p@((s0, i0), (s1, i1)) : ps)
-          | s0 /= s1 = loop (p : acc) ps
-          | i0 < i1 = loop acc ps
-          | otherwise = []
-normalizeOrderings False orderings =
-    [filter (\ ((s0, _), (s1, _)) -> s0 /= s1) orderings]
-
-updateProb :: [Sid] -> [Sid] -> [Sid]
-updateProb mapping prob =
-    map (mapping !!) prob
-
-updatePriority :: [Sid] -> [(Node, Int)] -> [(Node, Int)]
-updatePriority mapping kpriority =
-    map (\(n, i) -> (permuteNode mapping n, i)) kpriority
-
--- Purge a strand.  Used by thinning.
-purge :: Algebra t p g s e c => PRS t p g s e c ->
-            Sid -> Sid -> [PRS t p g s e c]
-purge (k0, k, n, phi, hsubst) s s' =
-    do
-      let perm = updatePerm s s' (strandids k)
-      orderings' <- normalizeOrderings False
-                    (permuteOrderings perm
-                     (forward s (orderings k)))
-      let k' =
-              newPreskel
-              (gen k)
-              (shared k)
-              (deleteNth s (insts k))
-              orderings'
-              (knon k)
-              (kpnon k)
-              (kunique k)
-              (updatePriority perm (kpriority k))
-              (operation k)
-              (updateProb perm (prob k))
-              (pov k)
-      k'' <- wellFormedPreskel k'
-      return (k0, k'', permuteNode perm n, map (perm !!) phi, hsubst)
-
--- Forward orderings from strand s
-forward :: Sid -> [Pair] -> [Pair]
-forward s orderings =
-    concatMap f orderings
-    where
-      f p@((s0, i0), (s1, i1))
-          | s0 == s = [((s2, i2), (s1, i1)) | -- Forward here
-                       ((s2, i2), (s3, i3)) <- orderings,
-                       s3 == s0 && i0 >= i3]
-          | s1 == s = []        -- Dump edges to strand s
-          | otherwise = [p]     -- Pass thru other edges
-
--- This is the starting point of the Preskeleton Reduction System
-skeletonize :: Algebra t p g s e c => Bool -> PRS t p g s e c ->
-               [PRS t p g s e c]
-skeletonize thin prs
-    | hasMultipleOrig prs = []  -- Usual case
-    | otherwise = enrich thin prs
-
-hasMultipleOrig :: Algebra t p g s e c => PRS t p g s e c -> Bool
-hasMultipleOrig prs =
-    any (\(_, l) -> length l > 1) (korig (skel prs))
-
--- Hulling or Ensuring Unique Origination
-hull :: Algebra t p g s e c => Bool -> PRS t p g s e c ->
-        [PRS t p g s e c]
-hull thin prs =
-    loop (korig $ skel prs)
-    where
-      -- No uniques originate on more than one strand
-      loop [] = enrich thin prs
-      -- Found a pair that needs hulling
-      loop ((_, (s, _) : (s', _) : _) : _) =
-        do
-          (s'', s''', subst) <- unifyStrands (skel prs) s s'
-          prs <- ksubst prs subst
-          prs' <- compress False prs s'' s'''
-          hull thin prs'
-      loop(_ : orig) = loop orig
-
--- Order Enrichment
-
--- Adds orderings so that a skeleton respects origination.
-
-enrich :: Algebra t p g s e c => Bool -> PRS t p g s e c ->
-          [PRS t p g s e c]
-enrich thin (k0, k, n, phi, hsubst) =
-    let o = foldl (addOrderings k) (orderings k) (kunique k) in
-    if length o == length (orderings k) then
-        maybeThin thin (k0, k, n, phi, hsubst) -- Nothing to add
-    else
-        do
-          let k' =
-                  newPreskel
-                  (gen k)
-                  (shared k)
-                  (insts k)
-                  o
-                  (knon k)
-                  (kpnon k)
-                  (kunique k)
-                  (kpriority k)
-                  (operation k)
-                  (prob k)
-                  (pov k)
-          k' <- wellFormedPreskel k'
-          maybeThin thin (k0, k', n, phi, hsubst)
-
-maybeThin :: Algebra t p g s e c => Bool -> PRS t p g s e c ->
-              [PRS t p g s e c]
-maybeThin True prs = thin prs
-maybeThin False prs = reduce prs
-
-origNode :: Algebra t p g s e c => Preskel t g s e ->
-            t -> Maybe Node
-origNode k t =
-    case lookup t (korig k) of
-      Nothing -> error "Strand.origNode: term not in kunique"
-      Just [] -> Nothing
-      Just [n] -> Just n
-      Just _ -> error "Strand.origNode: not a hulled skeleton"
-
-addOrderings :: Algebra t p g s e c => Preskel t g s e ->
-                [Pair] -> t -> [Pair]
-addOrderings k orderings t =
-    case origNode k t of
-      Nothing -> orderings
-      Just n@(s, _) ->
-          foldl f orderings (L.delete s (strandids k))
-          where
-            f orderings s =
-                case gainedPos t (trace (strandInst k s)) of
-                  Nothing -> orderings
-                  Just pos -> adjoin (n, (s, pos)) orderings
-
-matchTraces :: Algebra t p g s e c => Trace t ->
-               Trace t -> (g, e) -> [(g, e)]
-matchTraces [] _ env = [env]    -- Pattern can be shorter
-matchTraces (In t : c) (In t' : c') env =
-    do
-      e <- match t t' env
-      matchTraces c c' e
-matchTraces (Out t : c) (Out t' : c') env =
-    do
-      e <- match t t' env
-      matchTraces c c' e
-matchTraces _ _ _ = []
-
--- Make sure a substitution does not take a unique out of the set of
--- uniques, and the same for nons and pnons.
-origCheck :: Algebra t p g s e c => Preskel t g s e -> e -> Bool
-origCheck k env =
-    check (kunique k) && check (knon k) && check (kpnon k)
-    where
-      check orig =
-          all (pred orig) orig
-      pred set item =
-          elem (instantiate env item) set
-
--- Thinning
-
-thin :: Algebra t p g s e c => PRS t p g s e c -> [PRS t p g s e c]
-thin prs =
-    thinStrands prs [] $ reverse ss
-    where                       -- Remove strands in image of POV
-      ss = filter (\s -> notElem s (prob $ skel prs)) (strandids $ skel prs)
-
--- Takes a skeleton, a list of pairs of strands that matched, and a
--- list of strands yet to be analyzed, and produces the result of
--- skeletonization.  It first tries single pair thinning, and during
--- that process collects potential multistrand thinning pairs.  Once
--- there are no more unanalyzed strands, it tries multistrand
--- thinning.
-thinStrands :: Algebra t p g s e c => PRS t p g s e c ->
-               [(Sid, Sid)] -> [Sid] -> [PRS t p g s e c]
-thinStrands prs ps [] =         -- All strands analyzied
-    case multiPairs ps of       -- Generate multipairs
-      [] -> reduce prs
-      mps -> thinMany prs mps   -- Try multistrand thinning
-thinStrands prs ps (s:ss) =
-  thinStrandPairs prs ps s ss ss
-
--- This loop tries pairs of strands.  Takes a skeleton, a list of
--- pairs of strands that matched but did not thin, a strand to be
--- eliminated, a list of strands to be used in the outer loop
--- (thinStrands), and a list of strands to be considered for matching,
--- and produces the result of skeletonization.
-thinStrandPairs :: Algebra t p g s e c => PRS t p g s e c -> [(Sid, Sid)] ->
-                   Sid -> [Sid] -> [Sid] -> [PRS t p g s e c]
-thinStrandPairs prs ps _ ss [] =
-  thinStrands prs ps ss
-thinStrandPairs prs ps s ss (s':ss') =
-  case thinStrand prs s s' of
-    -- Try next pair, there was no match
-    Nothing -> thinStrandPairs prs ps s ss ss'
-    -- Try next pair, there was a match so save this pair
-    Just [] -> thinStrandPairs prs ((s, s'):ps) s ss ss'
-    Just prss ->                -- Success at single strand thinning
-      do
-        prs <- prss
-        thin prs                -- Restart from the beginning
-
--- Try thinning s with s'.  If there was no match, return Nothing,
--- else return Just the list of results.
-thinStrand :: Algebra t p g s e c => PRS t p g s e c ->
-              Sid -> Sid -> Maybe [PRS t p g s e c]
-thinStrand prs s s' =
-    let k = skel prs in
-    case thinStrandMatch k s s' (gen k, emptyEnv) of
-      [] -> Nothing
-      ges ->
-          Just $ do
-            e <- ges
-            (gen, env) <- thinStrandCheck k s e
-            [ prs' | prs <- ksubst prs (gen, substitution env),
-                     prs <- reduce prs,
-                     prs' <- purge prs s s',
-                     prs'' <- purge prs s' s,
-                     isomorphic (gist (skel prs')) (gist (skel prs''))]
-
--- See if two strands match.
-thinStrandMatch :: Algebra t p g s e c => Preskel t g s e ->
-                   Sid -> Sid -> (g, e) -> [(g, e)]
-thinStrandMatch k s s' env =
-  do
-    let i = strandInst k s
-    let i' = strandInst k s'
-    case height i /= height i' of
-      True -> fail ""
-      False -> return ()
-    matchTraces (trace i) (trace i') env
-
--- Do the identity, renaming, and origination check.
-thinStrandCheck :: Algebra t p g s e c => Preskel t g s e ->
-                   Sid -> (g, e) -> [(g, e)]
-thinStrandCheck k s env =
-  do
-    let ts = concatMap (tterms . trace) $ deleteNth s $ insts k
-    (gen', env') <- identityEnvFor env ts
-    case matchRenaming (gen', env') of
-      True -> return ()
-      False -> fail ""
-    case origCheck k env' of
-      True -> return (gen', env')
-      False -> fail ""
-
--- Multistrand thinning
-
--- Generate all candidate pairings
-multiPairs :: [(Sid, Sid)] ->  [[(Sid, Sid)]]
-multiPairs _ | useSingleStrandThinning = []
-multiPairs ps = filter atLeastTwo $ thinOne ps
-
--- List is of length at least two.
-atLeastTwo :: [a] -> Bool
-atLeastTwo (_:_:_) = True
-atLeastTwo _ = False
-
-thinOne :: [(Sid, Sid)] -> [[(Sid, Sid)]]
-thinOne [] = []
-thinOne (p:ps) =
-    thinTwo p ps ++ thinOne ps
-
--- Construct possible pairs that include (s, s').
-thinTwo :: (Sid, Sid) -> [(Sid, Sid)] -> [[(Sid, Sid)]]
-thinTwo (s, s') ps =
-    [(s, s')] : [(s, s') : ps' | ps' <- thinOne (filter (diff (s, s')) ps)]
-    where                       -- filter out pairs with seen strands
-      diff (s0, s1) (s2, s3) =
-          s0 /= s2 && s0 /= s3 && s1 /= s2 && s1 /= s3
-
--- Try all multistrand pairings until one succeeds.
-thinMany :: Algebra t p g s e c => PRS t p g s e c ->
-            [[(Sid, Sid)]] -> [PRS t p g s e c]
-thinMany prs [] = reduce prs
-thinMany prs (ps:mps) =
-    case thinManyStrands prs ps of
-      [] -> thinMany prs mps
-      prss ->                           -- Success
-        do
-          prs <- prss
-          thin prs
-
-thinManyStrands :: Algebra t p g s e c => PRS t p g s e c ->
-                   [(Sid, Sid)] -> [PRS t p g s e c]
-thinManyStrands prs ps =
-    do
-      let k = skel prs
-      (gen, env) <- thinManyMatch k ps
-      [ prs' | prs <- ksubst prs (gen, substitution env),
-               prs <- reduce prs,
-               prs' <- compressMany prs ps,
-               prs'' <- compressMany prs (swap ps),
-               isomorphic (gist (skel prs')) (gist (skel prs''))]
-
-thinManyMatch :: Algebra t p g s e c => Preskel t g s e ->
-                [(Sid, Sid)] -> [(g, e)]
-thinManyMatch k ps =
-    do
-      let f e (s, s') = thinStrandMatch k s s' e
-      env <- foldM f (gen k, emptyEnv) ps
-      let ss = concatMap (\(s, s') -> [s, s']) ps
-      let ts = concatMap (tterms . trace) $ deleteMany ss $ insts k
-      (gen', env') <- identityEnvFor env ts
-      case matchRenaming (gen', env') of
-        True -> return ()
-        False -> fail ""
-      case origCheck k env' of
-        True -> return (gen', env')
-        False -> fail ""
-
-deleteMany :: [Int] -> [a] -> [a]
-deleteMany nums xs =
-    loop 0 xs
-    where
-      loop _ [] = []
-      loop n (x:xs) | elem n nums = loop (n + 1) xs
-                    | otherwise = x : loop (n + 1) xs
-
-compressMany :: Algebra t p g s e c => PRS t p g s e c ->
-                [(Sid, Sid)] -> [PRS t p g s e c]
-compressMany prs [] = [prs]
-compressMany prs ((s, s'):ps) =
-    do
-      prs' <- purge prs s s'
-      compressMany prs' (map (updatePairs s s') ps)
-
-swap :: [(a, a)] -> [(a, a)]
-swap ps =
-    map (\(x, y) -> (y, x)) ps
-
-updatePairs :: Sid -> Sid -> (Sid, Sid) -> (Sid, Sid)
-updatePairs old new (s, s') =
-    (updateStrand old new s, updateStrand old new s')
-
--- Transitive Reduction
-
--- An edge is essential if its removal eliminates all paths from its
--- source to its destination.  This function removes all non-essential
--- edges from the ordering relation.
-
-reduce :: Algebra t p g s e c => PRS t p g s e c -> [PRS t p g s e c]
-reduce (k0, k, n, phi, hsubst) =
-    let o = map graphPair (graphReduce (edges k)) in
-    if length o == length (orderings k) then
-        return (k0, k, n, phi, hsubst) -- Nothing to take away
-    else
-        do
-          let k' =
-                  newPreskel
-                  (gen k)
-                  (shared k)
-                  (insts k)
-                  o
-                  (knon k)
-                  (kpnon k)
-                  (kunique k)
-                  (kpriority k)
-                  (operation k)
-                  (prob k)
-                  (pov k)
-          k'' <- wellFormedPreskel k'
-          return (k0, k'', n, phi, hsubst)
-
--- Answers for cohorts
-type Ans t p g s e c = (Preskel t g s e, Node, [Sid], s)
-
-ans :: Algebra t p g s e c => PRS t p g s e c -> Ans t p g s e c
-ans (_, k, n, phi, subst) = (k, n, phi, subst)
-
--- Homomorphism Filter
-
-homomorphismFilter :: Algebra t p g s e c => PRS t p g s e c ->
-                      [Ans t p g s e c]
-homomorphismFilter prs@(k0, k, _, phi, subst)
-    | validateMappingSubst k0 phi subst k = [ans prs]
-    | otherwise = []
-
--- Ensure origination nodes a preserved as required to be a homomorphism
-validateMappingSubst :: Algebra t p g s e c => Preskel t g s e ->
-                        [Sid] -> s -> Preskel t g s e -> Bool
-validateMappingSubst k phi subst k' =
-    useNoOrigPreservation || all check (korig k)
-    where
-      check (u, ns) =
-          case lookup (substitute subst u) (korig k') of
-            Nothing -> False
-            Just ns' -> all (flip elem ns') (map (permuteNode phi) ns)
-
--- Returns the skeleton associated with a preskeleton or nothing when
--- there isn't one.  Manufacture a node and a term, and then drop them
--- afterwards.
-toSkeleton :: Algebra t p g s e c => Bool -> Preskel t g s e ->
-              [Preskel t g s e]
-toSkeleton thin k =
-    do
-      prs <- hull thin (k, k, (0, 0), strandids k, emptySubst)
-      (k', _, _, _) <- homomorphismFilter prs
-      return k'
-
--- Contraction
-
-contract :: Algebra t p g s e c => Preskel t g s e -> Node ->
-            Cause t -> (g, s) -> [Ans t p g s e c]
-contract k n cause subst =
-    do
-      prs <- ksubst (k, k { operation = Contracted emptySubst cause },
-                     n, strandids k, emptySubst) subst
-      prs' <- skeletonize useThinningWhileSolving prs
-      homomorphismFilter prs'
-
--- Regular Augmentation
-
--- First argument determines if displacement is used.
-augment :: Algebra t p g s e c => Preskel t g s e ->
-           Node -> Cause t -> Role t ->
-           (g, s) -> Instance t e -> [Ans t p g s e c]
-augment k0 n cause role subst inst =
-    do
-      prs <- augmentAndDisplace k0 n cause role subst inst
-      homomorphismFilter prs
-
--- Apply a substitution, and then augment and displace.  Augmentations
--- add an instance and one ordered pair.  Displacements add an ordered
--- pair and may add nodes.
-
-augmentAndDisplace :: Algebra t p g s e c => Preskel t g s e ->
-                      Node -> Cause t -> Role t ->
-                      (g, s) -> Instance t e -> [PRS t p g s e c]
-augmentAndDisplace k0 n cause role subst inst =
-    do
-      prs <- substAndAugment k0 n cause role subst inst
-      augDisplace prs ++ skeletonize useThinningWhileSolving prs
-
--- Apply the substitution and apply augmentation operator.
-substAndAugment :: Algebra t p g s e c => Preskel t g s e ->
-                   Node -> Cause t -> Role t ->
-                   (g, s) -> Instance t e -> [PRS t p g s e c]
-substAndAugment k n cause role subst inst =
-    do
-      let operation' = AddedStrand (rname role) (height inst) cause
-      prs <- ksubst (k, k { operation = operation' }, n,
-                     strandids k, emptySubst) subst
-      aug prs inst
-
--- Apply the augmentation operator by adding an instance and one
--- ordered pair.
-aug :: Algebra t p g s e c => PRS t p g s e c ->
-       Instance t e -> [PRS t p g s e c]
-aug (k0, k, n, phi, hsubst) inst =
-    do
-      let insts' = (insts k) ++ [inst]
-      let pair = ((length (insts k), height inst - 1), n)
-      let orderings' = pair : orderings k
-      let non' = inheritRnon inst ++ (knon k)
-      let pnon' = inheritRpnon inst ++ (kpnon k)
-      let unique' = inheritRunique inst ++ (kunique k)
-      let k' = newPreskel (gen k) (shared k) insts'
-           orderings' non' pnon' unique' (kpriority k)
-           (operation k) (prob k) (pov k)
-      k' <- wellFormedPreskel k'
-      return (k0, k', n, phi, hsubst)
-
--- Inherit non-originating atoms if the traces is long enough
-inheritRnon :: Algebra t p g s e c => Instance t e -> [t]
-inheritRnon i =
-    inherit i (rnorig (role i))
-
--- Inherit penenetrator non-originating atoms if the traces is long enough
-inheritRpnon :: Algebra t p g s e c => Instance t e -> [t]
-inheritRpnon i =
-    inherit i (rpnorig (role i))
-
--- Inherit uniquely originating atoms if the traces is long enough
-inheritRunique :: Algebra t p g s e c => Instance t e -> [t]
-inheritRunique i =
-    inherit i (ruorig (role i))
-
-inherit :: Algebra t p g s e c => Instance t e -> [(t, Int)] -> [t]
-inherit i rorigs =
-    map (instantiate (env i) . fst) $ filter f rorigs
-    where
-      f (_, pos) = pos < height i
-
--- Add all displacements
-augDisplace :: Algebra t p g s e c => PRS t p g s e c -> [PRS t p g s e c]
-augDisplace prs =
-    do
-      let s = nstrands (skel prs) - 1
-      s' <- nats s
-      augDisplaceStrands prs s s'
-
--- Try to displace with strand s'
-augDisplaceStrands :: Algebra t p g s e c => PRS t p g s e c ->
-                      Sid -> Sid -> [PRS t p g s e c]
-augDisplaceStrands (k0, k, n, phi, hsubst) s s' =
-    do
-      (s, s', subst) <- unifyStrands k s s'
-      let op = addedToDisplaced (operation k) s s'
-      prs <- ksubst (k0, k { operation = op}, n, phi, hsubst) subst
-      prs <- compress True prs s s'
-      skeletonize useThinningWhileSolving prs
-
--- See if two strands unify.  They can be of differing heights.  The
--- second strand returned may be longer.
-unifyStrands :: Algebra t p g s e c => Preskel t g s e ->
-                Sid -> Sid -> [(Sid, Sid, (g, s))]
-unifyStrands k s s' =
-    let i = strandInst k s
-        i' = strandInst k s' in
-    if height i > height i' then
-        unifyStrands k s' s
-    else
-        do
-          (gen', subst) <- unifyTraces (trace i) (trace i') (gen k, emptySubst)
-          return (s, s', (gen', subst))
-
--- Unify traces where the first trace is allowed to be shorter than
--- the second trace.
-unifyTraces :: Algebra t p g s e c => Trace t ->
-               Trace t -> (g, s) -> [(g, s)]
-unifyTraces [] _ subst = [subst]
-unifyTraces (In t : c) (In t' : c') subst =
-    do
-      s <- unify t t' subst
-      unifyTraces c c' s
-unifyTraces (Out t : c) (Out t' : c') subst =
-    do
-      s <- unify t t' subst
-      unifyTraces c c' s
-unifyTraces _ _ _ = []
-
-addedToDisplaced :: Algebra t p g s e c => Operation t s ->
-                    Int -> Int -> Operation t s
-addedToDisplaced (AddedStrand role height cause) s s' =
-    Displaced s s' role height cause
-addedToDisplaced _ _ _ = error "Strand.addedToDisplaced: Bad operation"
-
--- Listener Augmentation
-
-addListener :: Algebra t p g s e c => Preskel t g s e -> Node ->
-               Cause t -> t -> [Ans t p g s e c]
-addListener k n cause t =
-    do
-      k' <- wellFormedPreskel k'
-      prs <- skeletonize useThinningWhileSolving
-             (k, k', n, strandids k, emptySubst)
-      homomorphismFilter prs
-    where
-      k' = newPreskel gen' (shared k) insts' orderings' (knon k)
-           (kpnon k) (kunique k) (kpriority k)
-           (AddedListener t cause) (prob k) (pov k)
-      (gen', inst) = mkListener (protocol k) (gen k) t
-      insts' = insts k ++ [inst]
-      pair = ((length (insts k), 1), n)
-      orderings' = pair : orderings k
-
--- Homomorphisms
-
--- Find a substitution that demonstrates the existence of a
--- homomorphism between the two skeletons using the given
--- strand mapping function.
-
-homomorphism :: Algebra t p g s e c => Preskel t g s e ->
-                Preskel t g s e -> [Sid] -> [e]
-homomorphism k k' mapping =
-    do
-      (_, env) <- findReplacement k k' mapping
-      case validateEnv k k' mapping env of
-        True -> [env]
-        False -> []
-
-findReplacement :: Algebra t p g s e c => Preskel t g s e ->
-                   Preskel t g s e -> [Sid] -> [(g, e)]
-findReplacement k k' mapping =
-    foldM (matchStrand k k' mapping) (gen k', emptyEnv) (strandids k)
-
-matchStrand :: Algebra t p g s e c => Preskel t g s e ->
-               Preskel t g s e -> [Sid] -> (g, e) -> Sid -> [(g, e)]
-matchStrand k k' mapping env s =
-    matchTraces (trace (strandInst k s)) (trace (strandInst k' s')) env
-    where
-      s' = mapping !! s
-
-validateEnv :: Algebra t p g s e c => Preskel t g s e ->
-               Preskel t g s e -> [Sid] -> e -> Bool
-validateEnv k k' mapping env =
-    all (flip elem (knon k')) (map (instantiate env) (knon k)) &&
-    all (flip elem (kpnon k')) (map (instantiate env) (kpnon k)) &&
-    all (flip elem (kunique k')) (map (instantiate env) (kunique k)) &&
-    validateEnvOrig k k' mapping env &&
-    all (flip elem (tc k')) (permuteOrderings mapping (orderings k))
-
-validateEnvOrig :: Algebra t p g s e c => Preskel t g s e ->
-                   Preskel t g s e -> [Sid] -> e -> Bool
-validateEnvOrig k k' mapping env =
-    useNoOrigPreservation || all check (korig k)
-    where
-      check (u, ns) =
-          case lookup (instantiate env u) (korig k') of
-            Nothing -> error "Strand.validateEnv: term not in kunique"
-            Just ns' -> all (flip elem ns') (map (permuteNode mapping) ns)
-
--- Given a realized skeleton k, generate candidates for minimization.
--- A candidate is a preskeleton and a strand mapping from the
--- candidate to k.  The preskeleton need not be well formed, as that
--- test is applied elsewhere.
-
-type Candidate t p g s e c = (Preskel t g s e, [Sid])
-
-addIdentity :: Algebra t p g s e c => Preskel t g s e ->
-               Candidate t p g s e c
-addIdentity k = (k, strandids k)
-
-separateVariablesLimit :: Int
-separateVariablesLimit = 1024
-
-generalize :: Algebra t p g s e c => Preskel t g s e ->
-              [Candidate t p g s e c]
-generalize k = deleteNodes k ++
-               weakenOrderings k ++
-               forgetAssumption k ++
-               take separateVariablesLimit (separateVariables k)
-
--- Node deletion
-
-{-
-
-delete node n in k
-
-1. if (s, 0) part of prob return Nothing
-2. if not initial node, truncate instance of node else delete instance
-3. weaken ordering when filtering it (see shortenOrdering)
-4. drop nons that aren't mentioned anywhere
-5. drop uniques that aren't carried anywhere
-6. update prob upon instance deletion
--}
-
-deleteNodes :: Algebra t p g s e c => Preskel t g s e ->
-               [Candidate t p g s e c]
-deleteNodes k =
-    do
-      strand <- strands k
-      node <- nodes strand
-      deleteNode k node
-
-deleteNode :: Algebra t p g s e c => Preskel t g s e ->
-              Vertex t e -> [(Preskel t g s e, [Sid])]
-deleteNode k n
-    | p == 0 && elem s (prob k) = []
-    | p == 0 =
-        do
-          let mapping = deleteNth s (strandids k)
-          let k' = deleteNodeRest k (gen k) (s, p) (deleteNth s (insts k))
-                   (deleteOrderings s (tc k)) (updatePerm s s (prob k))
-          return (k', mapping)
-    | otherwise =
-        do
-          let mapping = strandids k
-          let i = inst (strand n)
-          (gen', i') <- bldInstance (role i) (take p (trace i)) (gen k)
-          let k' = deleteNodeRest k gen' (s, p) (replaceNth i' s (insts k))
-                   (shortenOrderings (s, p) (tc k)) (prob k)
-          return (k', mapping)
-    where
-      p = pos n
-      s = sid (strand n)
-
--- Update orderings when a strand is eliminated (p == 0)
-deleteOrderings :: Sid -> [Pair] -> [Pair]
-deleteOrderings s ps =
-    do
-      p <- ps
-      deleteOrdering p
-    where
-      deleteOrdering (n0@(s0, _), n1@(s1, _))
-          | s == s0 || s == s1 = []
-          | otherwise = [(adjust n0, adjust n1)]
-      adjust n@(s', i')
-          | s' > s = (s' - 1, i')
-          | otherwise = n
-
--- Update orderings when a strand is shortened (p > 0)
-shortenOrderings :: Node -> [Pair] -> [Pair]
-shortenOrderings (s, i) ps =
-    do
-      pair <- ps
-      shortenOrdering pair
-    where
-      shortenOrdering p@((s0, i0), (s1, i1))
-          | s == s0 && i <= i0 = []
-          | s == s1 && i <= i1 = []
-          | otherwise = [p]
-
-deleteNodeRest :: Algebra t p g s e c => Preskel t g s e ->
-                  g -> Node -> [Instance t e] -> [Pair] ->
-                  [Sid] -> Preskel t g s e
-deleteNodeRest k gen n insts' orderings prob =
-    newPreskel gen (shared k) insts' orderings non' pnon' unique'
-                   prio' (Generalized (Deleted n)) prob (pov k)
-    where
-      -- Drop nons that aren't mentioned anywhere
-      non' = filter mentionedIn (knon k)
-      pnon' = filter mentionedIn (kpnon k)
-      mentionedIn t = varSubset [t] terms
-      terms = iterms insts'
-      -- Drop uniques that aren't carried anywhere
-      unique' = filter carriedIn (kunique k)
-      carriedIn t = any (carriedBy t) terms
-      -- Drop unused priorities
-      prio' = filter within (kpriority k)
-      within ((s, i), _) =
-        s < fst n || s == fst n && i < snd n
-
--- Node ordering weakening
-
--- To weaken, create a candidate for each element in the current
--- ordering, which is already the result of a transitive reduction.
--- Weaken by computing the transitive closure of the ordering, and
--- then remove the selected element from the current ordering.  After
--- computing the transitive closure, filter out the edges that are not
--- well ordered, i.e. originate at a reception node or terminate at a
--- transmission node.  Also, filter out edges that link nodes in the
--- same strand.  The preskeleton constructor function performs a
--- transitive reduction on the generated ordering.
-
-weakenOrderings :: Algebra t p g s e c => Preskel t g s e ->
-                   [Candidate t p g s e c]
-weakenOrderings k =
-    map (weakenOrdering k) (orderings k)
-
-weakenOrdering :: Algebra t p g s e c => Preskel t g s e ->
-                  Pair -> Candidate t p g s e c
-weakenOrdering k p =
-    weaken k p (L.delete p (tc k))
-
-weaken :: Algebra t p g s e c => Preskel t g s e ->
-          Pair -> [Pair] -> Candidate t p g s e c
-weaken k p orderings =
-    addIdentity k'
-    where
-      k' = newPreskel (gen k) (shared k) (insts k)
-           orderings (knon k) (kpnon k) (kunique k) (kpriority k)
-           (Generalized (Weakened p)) (prob k) (pov k)
-
--- Origination assumption forgetting
-
--- Delete each non-originating term that is not specified by a
--- role.  Do the same for each uniquely-originating term.
-
-forgetAssumption :: Algebra t p g s e c => Preskel t g s e ->
-                    [Candidate t p g s e c]
-forgetAssumption k =
-    forgetNonTerm k ++ forgetPnonTerm k ++ forgetUniqueTerm k
-
--- Non-originating terms
-
-forgetNonTerm :: Algebra t p g s e c => Preskel t g s e ->
-                 [Candidate t p g s e c]
-forgetNonTerm k =
-    map (addIdentity . delNon) (skelNons k)
-    where
-      delNon t =
-          k { knon = L.delete t (knon k),
-              operation = Generalized (Forgot t) }
-
-skelNons :: Algebra t p g s e c => Preskel t g s e -> [t]
-skelNons k =
-    filter (flip notElem ru) (knon k)
-    where
-      ru = [u | i <- insts k, u <- inheritRnon i]
-
--- Penetrator non-originating terms
-
-forgetPnonTerm :: Algebra t p g s e c => Preskel t g s e ->
-                 [Candidate t p g s e c]
-forgetPnonTerm k =
-    map (addIdentity . delPnon) (skelPnons k)
-    where
-      delPnon t =
-          k { kpnon = L.delete t (kpnon k),
-              operation = Generalized (Forgot t) }
-
-skelPnons :: Algebra t p g s e c => Preskel t g s e -> [t]
-skelPnons k =
-    filter (flip notElem ru) (kpnon k)
-    where
-      ru = [u | i <- insts k, u <- inheritRpnon i]
-
--- Uniquely-originating terms
-
-forgetUniqueTerm :: Algebra t p g s e c => Preskel t g s e ->
-                    [Candidate t p g s e c]
-forgetUniqueTerm k =
-    map (addIdentity . delUniq) (skelUniques k)
-    where
-      delUniq t =
-          k { kunique = L.delete t (kunique k),
-              operation = Generalized (Forgot t) }
-
-skelUniques :: Algebra t p g s e c => Preskel t g s e -> [t]
-skelUniques k =
-    filter (flip notElem ru) (kunique k)
-    where
-      ru = [u | i <- insts k, u <- inheritRunique i]
-
--- Variable separation
-
--- A location is a strand, a role variable, and a position in the term
--- associated with the role variable.
-
--- step one: extract places
---
--- for each maplet in each environment in each strand
---   for each variable V in the range of the maplet
---     let P be the places at which V occurs
---     associate V with the location described by each element in P
---
--- step two: generate preskeletons
---
--- for each variable V in the skeleton K
---  let V' be a clone of V
---  let L be the set of locations associated with V from above
---  for each subset L' of L
---    for each instance I in K
---      update the environment of I by replacing V' at the locations
---      given by L' that refer to I, and use the modified environment
---      to update the instance
---    let K' be the result of updating instances in K as above
---    if V occurs in non, add terms with V replaced by V' to
---      the non's of K'
---    if V occurs in unique, add terms with V replaced by V'
---      to the unique's of K'
---    add K' to the list of generated preskeletons
-
-separateVariables :: Algebra t p g s e c => Preskel t g s e ->
-                     [Candidate t p g s e c]
-separateVariables k =
-    do
-      v <- kvars k
-      separateVariable k (extractPlaces k) v
-
--- A location is a strand, a role variable, and a position in the term
--- associated with the role variable.
-
-type Location t p g s e c = (Sid, t, p)
-
--- Returns a list of pairs.  For each occurrence of a preskeleton
--- variable in every instance, there is a pair where the first element
--- is the variable, and the second as the location at which it occurs.
-extractPlaces :: Algebra t p g s e c => Preskel t g s e ->
-                 [(t, Location t p g s e c)]
-extractPlaces k =
-    [ (var, (sid s, v, p)) |
-      s <- strands k,
-      (v, t) <- instAssocs (inst s),
-      var <- foldVars (flip adjoin) [] t,
-      p <- places var t ]
-
-instAssocs :: Algebra t p g s e c => Instance t e -> [(t, t)]
-instAssocs i =
-    reify (rvars (role i)) (env i)
-
--- For each variable, generate candidates by generating a fresh
--- variable for subsets of the locations associated with the variable.
-separateVariable :: Algebra t p g s e c => Preskel t g s e ->
-                    [(t, Location t p g s e c)] -> t ->
-                    [Candidate t p g s e c]
-separateVariable k ps t =
-    sepVar (locsFor ps t)
-    where
-      sepVar [] = []
-      sepVar [_] = []
-      sepVar locs =
-          do
-            locs' <- parts locs
-            changeLocations k env gen'' t' locs'
-      (gen'', env) = matchAlways t t' (gen', emptyEnv)
-      parts locs = map (map (locs !!)) (subsets (length locs))
-      (gen', t') = clone (gen k) t
-
--- Extract the locations for a given variable
-locsFor :: Algebra t p g s e c => [(t, Location t p g s e c)] ->
-           t -> [Location t p g s e c]
-locsFor ps t =
-    map snd (filter (\(t', _) -> t == t') (reverse ps)) -- Why reverse?
-
-matchAlways :: Algebra t p g s e c => t -> t -> (g, e) -> (g, e)
-matchAlways t t' env =
-    case match t t' env of
-      e : _ -> e
-      [] -> error "Strand.matchAlways: bad match"
-
--- Change the given locations and create the resulting preskeleton
-changeLocations :: Algebra t p g s e c => Preskel t g s e ->
-                   e -> g -> t -> [Location t p g s e c] ->
-                   [Candidate t p g s e c]
-changeLocations k env gen t locs =
-    [addIdentity k0, addIdentity k1]
-    where
-      k0 = newPreskel gen' (shared k) insts' (orderings k) non pnon unique0
-           (kpriority k) (Generalized (Separated t)) (prob k) (pov k)
-      k1 = newPreskel gen' (shared k) insts' (orderings k) non pnon unique1
-           (kpriority k) (Generalized (Separated t)) (prob k) (pov k)
-      (gen', insts') = changeStrands locs t gen (strands k)
-      non = knon k ++ map (instantiate env) (knon k)
-      pnon = kpnon k ++ map (instantiate env) (kpnon k)
-      unique0 = kunique k ++ unique'
-      unique1 = map (instantiate env) (kunique k) ++ unique'
-      -- Ensure all role unique assumptions are in.
-      unique' = concatMap inheritRunique insts'
-
-changeStrands :: Algebra t p g s e c => [Location t p g s e c] -> t ->
-                 g -> [Strand t e] -> (g, [Instance t e])
-changeStrands locs copy gen strands =
-    case foldMapM (changeStrand locs copy) gen strands of
-      i : _ -> i
-      [] -> error "Strand.changeStrands: bad strand build"
-
--- Create an new environment incorporating changes, and from that,
--- create the new strand.
-changeStrand :: Algebra t p g s e c => [Location t p g s e c] ->
-                t -> g -> Strand t e -> [(g, Instance t e)]
-changeStrand locs copy gen s =
-    bldInstance (role i) trace'  gen'
-    where
-      i = inst s
-      (gen', env') = foldl f (gen, emptyEnv)
-             (map (changeMaplet locs copy (sid s)) (instAssocs i))
-      f env (v, t) = matchAlways v t env
-      trace' = map (evtMap $ instantiate env') trace
-      trace = take (height i) (rtrace (role i))
-
--- Change a maplet
-changeMaplet :: Algebra t p g s e c => [Location t p g s e c] ->
-                t -> Sid -> (t, t) -> (t, t)
-changeMaplet [] _ _ maplet = maplet
-changeMaplet ((s', v', p) : locs) copy s (v, t) =
-    changeMaplet locs copy s (v, t')
-    where
-      t' = if s' == s && v' == v then replace copy p t else t
-
--- Return the set of subsets of natural numbers less than n
-subsets :: Int -> [[Int]]
-subsets n
-    | n < 0 = error $ "Utilities.subsets: Bad argument " ++ show n
-    | n == 0 = []
-    | otherwise =
-        [n - 1] : subset ++ map (n - 1 :) subset
-        where
-          subset = subsets (n - 1)
-
--- Collapse a shape by unifying strands.
-
-collapse :: Algebra t p g s e c => Preskel t g s e ->
-            [Preskel t g s e]
-collapse k =
-    [k' | s <- strandids k, s' <- nats s,
-          k' <- collapseStrands k s s']
-
-collapseStrands :: Algebra t p g s e c => Preskel t g s e ->
-                   Sid -> Sid -> [Preskel t g s e]
-collapseStrands k s s' =
-    do
-      (s, s', subst) <- unifyStrands k s s'
-      prs <- ksubst (k, k { operation = Collapsed s s' },
-                     (0, 0), strandids k, emptySubst) subst
-      prs <- compress True prs s s'
-      prs <- skeletonize useThinningDuringCollapsing prs
-      return $ skel prs
-
--- Security goals: satisfaction of atomic formulas
-
-type Sem t g s e = Preskel t g s e -> (g, e) -> [(g, e)]
-
--- Extends an environment (a variable assignment) according to the
--- given atomic formula.
-satisfy :: Algebra t p g s e c => AForm t -> Sem t g s e
-satisfy (Equals t t') = geq t t'
-satisfy (Non t) = ggnon t
-satisfy (Pnon t) = ggpnon t
-satisfy (Uniq t) = gguniq t
-satisfy (UniqAt t n) = guniqAt t n
-satisfy (StrPrec n n') = gstrPrec n n'
-satisfy (Prec n n') = gprec n n'
-satisfy (RolePred r i n) = grole r i n
-satisfy (ParamPred r v n t) = gparam r v n t
-
--- Equality assumes there has been a static role specific check to
--- eliminate error cases.
-geq :: Algebra t p g s e c => t -> t -> Sem t g s e
-geq t t' _ (g, e)
-  | ti == ti' = [(g, e)]
-  | otherwise = []
-  where
-    ti = instantiate e t
-    ti' = instantiate e t'
-
--- Non-origination
-ggnon :: Algebra t p g s e c => t -> Sem t g s e
-ggnon t k e =
-  do
-    t' <- knon k
-    match t t' e
-
--- Penetrator non-origination
-ggpnon :: Algebra t p g s e c => t -> Sem t g s e
-ggpnon t k e =
-  do
-    t' <- kpnon k
-    match t t' e
-
--- Unique origination
-gguniq :: Algebra t p g s e c => t -> Sem t g s e
-gguniq t k e =
-  do
-    t' <- kunique k
-    match t t' e
-
--- Unique origination at a node
-guniqAt :: Algebra t p g s e c => t -> t -> Sem t g s e
-guniqAt t n k e =
-  do
-    (t', ls) <- korig k
-    case ls of
-      [l] ->
-        do
-          e <- match t t' e
-          nodeMatch n l e
-      _ -> []
-
-inSkel :: Algebra t p g s e c => Preskel t g s e -> (Int, Int) -> Bool
-inSkel k (s, i) =
-  s >= 0 && s < nstrands k && i >= 0 && i < height (insts k !! s)
-
-strandPrec :: Node -> Node -> Bool
-strandPrec (s, i) (s', i')
-  | s == s' && i < i' = True
-  | otherwise = False
-
--- Within strand node precedes
-gstrPrec :: Algebra t p g s e c => t -> t -> Sem t g s e
-gstrPrec n n' k (g, e) =
-  case (nodeLookup e n, nodeLookup e n') of
-    (Just p, Just p')
-      | inSkel k p && inSkel k p' && strandPrec p p' -> [(g, e)]
-    (Just _, Just _) -> []
-    (_, Just _) ->
-      error ("Strand.gstrPrec: node " ++ show n ++ " unbound")
-    _ ->
-      error ("Strand.gstrPrec: node " ++ show n' ++ " unbound")
-
--- Node precedes
--- This should look at the transitive closure of the ordering graph.
-gprec :: Algebra t p g s e c => t -> t -> Sem t g s e
-gprec n n' k (g, e) =
-  case (nodeLookup e n, nodeLookup e n') of
-    (Just p, Just p')
-      | inSkel k p && inSkel k p' &&
-        (strandPrec p p' || elem (p, p') tc) -> [(g, e)]
-    (Just _, Just _) -> []
-    (_, Just _) ->
-      error ("Strand.gstrPrec: node " ++ show n ++ " unbound")
-    _ ->
-      error ("Strand.gstrPrec: node " ++ show n' ++ " unbound")
-  where
-    tc = map graphPair $ graphClose $ graphEdges $ strands k
-
--- Role predicate
--- r and i determine the predicate, which has arity one.
-grole :: Algebra t p g s e c => Role t -> Int -> t -> Sem t g s e
-grole r i n k (g, e) =
-  case nodeLookup e n of
-    Nothing ->
-      do
-        (z, inst) <- zip [0..] $ insts k
-        case () of
-          _ | i >= height inst -> []
-            | rname (role inst) == rname r -> nodeMatch n (z, i) (g, e)
-            | otherwise ->      -- See if z could have been an instance of r
-              case bldInstance r (take (i + 1) $ trace inst) g of
-                [] -> []
-                _ -> nodeMatch n (z, i) (g, e)
-    Just (z, j) | z < nstrands k && i == j ->
-      let inst = insts k !! z in
-      case () of
-        _ | i >= height inst -> []
-          | rname (role inst) == rname r -> [(g, e)]
-          | otherwise ->
-            case bldInstance r (take (i + 1) $ trace inst) g of
-              [] -> []
-              _ -> [(g, e)]
-    _ -> []
-
--- Parameter predicate
-
--- r and t determine the predicate, which has arity two.  t must be
--- a variable declared in role r.
-gparam :: Algebra t p g s e c => Role t -> t -> t -> t -> Sem t g s e
-gparam r t n t' k (g, e) =
-  case nodeLookup e n of
-    Just (z, i) | z < nstrands k  ->
-      let inst = insts k !! z in
-      case () of
-        _ | i >= height inst -> []
-          | rname (role inst) == rname r ->
-            match t' (instantiate (env inst) t) (g, e)
-          | otherwise ->
-              do
-                (g, inst) <- bldInstance r (take (i + 1) $ trace inst) g
-                match t' (instantiate (env inst) t) (g, e)
-    Nothing -> error ("Strand.gparam: node " ++ show n ++ " unbound")
-    _ -> []
-
--- Conjunction
-
-conjoin :: Algebra t p g s e c => [AForm t] -> Sem t g s e
-conjoin [] _ e = [e]
-conjoin (a: as) k e =
+    firstSkeleton, Pair, Preskel, gen, protocol, kgoals, insts, orderings, leadsto,
+    pov, korig, kugen, kcomment, nstrands, kvars, kpriority, kpriorities,
+    strandids, kterms, avoid, preskelWellFormed, verbosePreskelWellFormed,
+    Strand, inst, nodes, Vertex, preds, spreds, event, algebraSolve,
+    graphNode, strands, vertex, Gist, gist, isomorphic, contract, augment,
+    addListener, Cause (..), Direction (..), Method (..), Operation (..),
+    operation, SkelDeclInst, SkelDeclInstList, SkelDeclaration,
+    SkelDeclList, SkelDeclarations, priority,
+    prob, homomorphism, toSkeleton, generalize, collapse, decls, sat) where
+
+import Control.Monad
+-- import System.IO.Error (ioeGetErrorString)
+import qualified Data.List as L
+import qualified Data.Set as S
+import Data.Set (Set)
+import qualified Data.Maybe as M
+import CPSA.Lib.Utilities
+import CPSA.Lib.SExpr
+import CPSA.Lib.Algebra
+import CPSA.Lib.AlgebraLibrary
+import CPSA.Lib.Declaration
+import CPSA.Lib.State
+import CPSA.Lib.Protocol
+import CPSA.Lib.Goal
+
+-- Debugging support
+--import CPSA.Lib.Debug
+--import System.IO.Unsafe
+--}
+{-- Additional debugging support
+zi :: Algebra t p g s e c => Instance t e -> String
+zi inst =
+    show (map f e)
+    where
+      domain = rvars (role inst)
+      e = reify domain (env inst)
+      range = map snd e
+      f (x, t) = (displayTerm (context domain) x,
+                  displayTerm (context range) t)
+      context ts = addToContext emptyContext ts
+
+zs :: Algebra t p g s e c => Set t -> String
+zs s =
+    show $ map (displayTerm (addToContext emptyContext ts)) ts
+    where
+      ts = S.toList s
+-- Also see showst
+--}
+
+-- Compile time switches for expermentation.
+
+-- Enable thinning, else use pruning.
+useThinning :: Bool
+useThinning = True -- False
+
+-- Do not do multistrand thinning.
+useSingleStrandThinning :: Bool
+useSingleStrandThinning = False -- True
+
+-- Enable de-origination.
+-- Don't use de-origination without thinning although you may want to
+-- use thinning without de-origination.
+useDeOrigination :: Bool
+useDeOrigination = False -- useThinning
+
+-- Sanity check: ensure no role variable occurs in a skeleton.
+useCheckVars :: Bool
+useCheckVars = False
+
+usePruningDuringCollapsing :: Bool
+usePruningDuringCollapsing = False -- True
+
+usePruningWhileSolving :: Bool
+usePruningWhileSolving = True -- False
+
+useStrictPrecedesCheck :: Bool
+useStrictPrecedesCheck = False -- True
+
+usePruningUnboundCheck :: Bool
+usePruningUnboundCheck = False -- True
+
+-- Instances and Strand Identifiers
+
+-- An Instance is an instance of a role, in the sense that each
+-- variable in the role's trace has been replaced by a term.  The
+-- trace of the instance might be shorter that the role's trace, but
+-- only truncating nodes from the end of the trace.
+
+-- A preskeleton stores its strands as a ordered sequence of
+-- instances.  A strand is the position of an instance in the
+-- sequence.  Duplicates are allowed in the sequence, as two strands
+-- can be instantiated from the same role in the same way.
+
+type Sid = Int                  -- Strand Identifier
+
+data Instance t e = Instance
+    { role :: Role t,           -- Role from which this was
+                                -- instantiated
+
+      env :: !e,                -- The environment used to build this
+                                -- instance's trace from its role's
+                                -- trace
+
+      trace :: ![Event t], -- Instance's trace
+      height :: !Int }          -- Height of the instance
+    deriving Show
+
+-- Create a fresh instance of the given height.  The environment
+-- specifies how to map some variables in the role's trace.  Unmapped
+-- variables are instantiated with fresh variables to avoid naming
+-- conflicts.
+mkInstance :: Algebra t p g s e c => g -> Role t ->
+              e -> Int -> (g, Instance t e)
+mkInstance gen role env height =
+    let trace = rtrace role
+        rheight = length trace in
+    if height < 1 || height > rheight then
+        error "Strand.mkInstance: Bad strand height"
+    else
+        let (gen', env') = grow (rvars role) gen env
+            trace' = map (evtMap $ instantiate env') (take height trace) in
+        -- Ensure every variable in the range of the environment
+        -- occurs in the trace.
+        case bldInstance role trace' gen' of
+          (gen'', inst) : _ -> (gen'', inst)
+          [] -> error "Strand.mkInstance: Not an instance"
+
+-- For each term that matches itself in the environment, extend the
+-- mapping so that the term maps to one with a fresh set of variables.
+-- It is an error if a variable in one of the terms is explicitly
+-- mapped to itself in the initial environment.
+grow :: Algebra t p g s e c => [t] -> g -> e -> (g, e)
+grow [] gen env = (gen, env)
+grow (t : ts) gen env =
+    case match t t (gen, env) of
+      [] -> grow ts gen env     -- Term already mapped
+      _ ->                      -- Otherwise make a fresh mapping
+          let (gen', t') = clone gen t in
+          case match t t' (gen', env) of
+            (gen'', env') : _ -> grow ts gen'' env'
+            [] -> error "Strand.grow: Internal error"
+
+-- Build an instance from a role and a trace.  Returns the empty list
+-- if the trace is not an instance of the given role.
+bldInstance :: Algebra t p g s e c => Role t ->
+               Trace t -> g -> [(g, Instance t e)]
+bldInstance _ [] _ = error "Strand.bldInstance: Bad trace"
+bldInstance role trace gen =
+    loop (rtrace role) trace (gen, emptyEnv) -- Loop builds env
+    where
+      loop _ [] (gen, env) =        -- Trace can be shorter than role's trace
+          [(gen, makeInstance role env trace)]
+      loop (In t : c) (In t' : c') ge =
+          do
+            env <- match t t' ge
+            loop c c' env
+      loop (Out t : c) (Out t' : c') ge =
+          do
+            env <- match t t' ge
+            loop c c' env
+      loop (Sync t : c) (Sync t' : c') ge =
+          do
+            env <- matchTran t t' ge
+            loop c c' env
+      loop _ _ _ = []
+
+makeInstance :: Role t -> e ->
+                Trace t -> Instance t e
+makeInstance role env trace =
+    Instance { role = role,
+               env = env,
+               trace = trace,
+               height = h }
+    where
+      h = length trace
+
+-- This is the only place a role is generated with an empty name.
+-- This is what marks a strand as a listener.
+mkListener :: Algebra t p g s e c => Prot t g -> g -> t ->
+              (g, Instance t e)
+mkListener p gen term =
+    case bldInstance (listenerRole p) [In term, Out term] gen of
+      [x] -> x
+      _ -> error "Strand.mkListener: Cannot build an instance of a listener"
+
+-- Add to set s the variables that are in the range of instance i
+addIvars :: Algebra t p g s e c => Set t -> Instance t e -> Set t
+addIvars s i =
+    foldl g s (reify (rvars (role i)) (env i))
+    where
+      g s (_, t) = foldVars (flip S.insert) s t
+
+listenerTerm :: Algebra t p g s e c => Instance t e -> Maybe t
+listenerTerm inst =
+    case rname (role inst) of
+      "" -> recvTerm (trace inst !! 0) -- Get first term in trace
+      _ -> Nothing              -- Not a listener strand
+
+-- Nodes, Pairs, and Graphs
+
+-- A node is composed of two integers, a strand identifier and a
+-- position.  The position identifies an event in the strand's trace.
+-- The second integer must be non-negative and less than the strand's
+-- height
+
+type Node = (Sid, Int)
+
+-- A pair gives an ordering of two nodes, meaning the first node is
+-- before the second one.
+
+type Pair = (Node, Node)
+
+-- Graphs of preskeletons
+
+-- A strand is what is referred to by a strand ID.
+
+data GraphStrand e i                 -- e for event, i for instance
+    = GraphStrand { inst :: i,
+                    nodes :: [GraphNode e i],
+                    sid :: Sid }
+
+-- The Strand ID determines equality and orderings
+instance Eq (GraphStrand e i) where
+    s0 == s1 = sid s0 == sid s1
+
+instance Ord (GraphStrand e i) where
+    compare s0 s1 = compare (sid s0) (sid s1)
+
+instance Show (GraphStrand e i) where
+    showsPrec _ s = shows (sid s)
+
+-- A vertex is what is referred to by a node.
+
+data GraphNode e i                 -- e for event, i for instance
+    = GraphNode { event :: e,
+                  preds :: [GraphNode e i], -- Immediate preds including
+                  strand :: GraphStrand e i,  -- strand succession edges
+                  pos :: Int }  -- The position of the node in the strand
+
+-- The node determines equality and orderings
+instance Eq (GraphNode e i) where
+    n0 == n1 = (strand n0, pos n0) == (strand n1, pos n1)
+
+instance Ord (GraphNode e i) where
+    compare n0 n1 = compare (strand n0, pos n0) (strand n1, pos n1)
+
+instance Show (GraphNode e i) where
+    showsPrec _ n = let (s, i') = graphNode n in
+                    showChar '(' . shows s . showString ", " .
+                    shows i' . showChar ')'
+
+-- The node of a vertex
+graphNode :: GraphNode e i -> Node
+graphNode n = (sid (strand n), pos n)
+
+type GraphEdge e i = (GraphNode e i, GraphNode e i)
+
+-- The pair of an edge
+graphPair :: GraphEdge e i -> Pair
+graphPair (n0, n1) = (graphNode n0, graphNode n1)
+
+graphEdges :: [GraphStrand e i] -> [GraphEdge e i]
+graphEdges strands =
+    [ (dst, src) | s <- strands, src <- nodes s, dst <- preds src ]
+
+data Graph e i
+    = Graph { gstrands :: [GraphStrand e i],
+              gedges :: [GraphEdge e i] }
+
+-- The graph associated with a preskeleton
+graph :: (i -> [d]) -> (i -> Int) -> [i] -> [Pair] -> Graph d i
+graph trace height insts pairs =
+    Graph { gstrands = strands,
+            gedges = map getEdge pairs }
+    where
+      strands = [ GraphStrand { inst = inst,
+                                nodes = nodes !! sid,
+                                sid = sid } |
+                  (sid, inst) <- zip [0..] insts ]
+      nodes = [ [ GraphNode { event = trace (inst strand) !! pos,
+                              preds = preds (sid, pos),
+                              strand = strand,
+                              pos = pos } |
+                  pos <- nats (height (inst strand)) ] |
+                (sid, strand) <- zip [0..] strands ]
+      preds n = map getNode (entry n)
+      getNode (s, i) = nodes !! s !! i
+      getEdge (n0, n1) = (getNode n0, getNode n1)
+      entry n = enrich n [ n0 | (n0, n1) <- pairs, n1 == n ]
+      -- add strand succession edges
+      enrich (s, i) ns
+          | i > 0 = (s, i - 1) : ns
+          | otherwise = ns
+
+-- Does start node precede end node?
+graphPrecedes :: GraphNode e i -> GraphNode e i -> Bool
+graphPrecedes start end =
+    let predecessors = preds end in
+    any (== start) predecessors || any (graphPrecedes start) predecessors
+
+-- Compute the transitive reduction
+graphReduce :: [GraphEdge e i] -> [GraphEdge e i]
+graphReduce orderings =
+    filter essential orderings
+    where
+      essential (dst, src) =
+          loop dst (L.delete dst (preds src)) [src]
+      loop _ [] _ = True        -- No other path found
+      loop dst (n : ns) seen
+          | n == dst = False    -- There is another path
+          | elem n seen = loop dst ns seen
+          | otherwise = loop dst (preds n ++ ns) (n : seen)
+
+-- Compute the transitive closure
+-- This routine returns pairs that are not well ordered.
+-- Deal with it!
+graphClose :: [GraphEdge e i] -> [GraphEdge e i]
+graphClose orderings =
+    filter (not . sameStrands) (loop orderings False orderings)
+    where
+      loop orderings False [] = orderings
+      loop orderings True [] =
+          loop orderings False orderings -- restart loop
+      loop orderings repeat ((n0, n1) : pairs) =
+          inner orderings repeat pairs [(n, n1) | n <- preds n0]
+      inner orderings repeat pairs [] =
+          loop orderings repeat pairs
+      inner orderings repeat pairs (p : rest)
+          | elem p orderings = inner orderings repeat pairs rest
+          | otherwise = inner (p : orderings) True pairs rest
+      sameStrands (n0, n1) = strand n0 == strand n1
+
+-- The nodes that preceed node n via strand succession
+spreds :: GraphNode e i -> [GraphNode e i]
+spreds n =
+  filter f (nodes $ strand n)
+  where
+    f n' = pos n' < pos n
+
+-- Shared part of preskeletons
+
+data Shared t g = Shared
+    { prot  :: Prot t g,
+      goals :: [Goal t] }
+
+instance (Show t, Show g) => Show (Shared t g) where
+    showsPrec _ s = shows (prot s)
+
+protocol :: Preskel t g s e -> Prot t g
+protocol k = prot $ shared k
+
+kgoals :: Preskel t g s e -> [Goal t]
+kgoals k = goals $ shared k
+
+-- Preskeletons
+
+data Preskel t g s e = Preskel
+    { gen :: !g,
+      shared :: Shared t g,
+      insts :: ![Instance t e],
+      strands :: ![Strand t e],
+      orderings :: ![Pair],
+      leadsto :: ![Pair],
+      edges :: ![Edge t e],
+      cInfo :: ConstInfo t,
+      decls :: SkelDeclarations t,
+      kcomment :: [SExpr ()],   -- Comments from the input
+      pov :: Maybe (Preskel t g s e), -- Point of view, the
+                                          -- original problem statement.
+      strandids :: ![Sid],
+      tc :: [Pair],             -- Transitive closure of orderings
+                                -- Used only during generalization
+      operation :: Operation t s,
+      kpriority :: [(Node,Int)],
+      prob :: [Sid] }        -- A map from the strands in the original
+    deriving Show               -- problem statement, the pov, into
+                                -- these strands.
+
+-- The pov skeleton is the only skeleton that should have Nothing in
+-- its pov field.
+
+type Strand t e
+    = GraphStrand (Event t) (Instance t e)
+
+type Vertex t e
+    = GraphNode (Event t) (Instance t e)
+
+type Edge t e
+    = GraphEdge (Event t) (Instance t e)
+
+-- Data structure for tracking the causes for the creation of
+-- preskeletons.
+
+data Cause t
+    = Cause Direction Node t (Set t)
+    deriving Show
+
+data Direction
+    = Encryption
+    | Nonce
+    | StatePassing
+    deriving Show
+
+data Method t
+    = Deleted Node
+    | Weakened Pair
+    | Separated t
+    | Forgot t
+    deriving Show
+
+-- The operation used to generate the preskeleteton is either new via
+-- the loader, a contraction, a regular augmentation, a listener
+-- augmentation, or a mininization.  The augmentation includes a role
+-- name and instance height.
+data Operation t s
+    = New
+    | Contracted s (Cause t)
+    | Displaced Int Int String Int (Cause t)
+    | AddedStrand String Int (Cause t)
+    | AddedListener t (Cause t)
+    | AlgebraSolved s (Cause t)
+    | Generalized (Method t)
+    | Collapsed Int Int
+      deriving Show
+
+-- Create a preskeleton.  The point of view field is not filled in.
+-- This version is exported for use by the loader.  This preskeleton
+-- must be consumed by firstSkeleton.
+mkPreskel :: Algebra t p g s e c => g -> Prot t g -> [Goal t] ->
+             [Instance t e] -> [Pair] -> [Pair] -> SkelDeclList t ->
+             [SExpr ()] -> [(Node,Int)] -> Preskel t g s e
+mkPreskel gen protocol gs insts orderings leadsto dlist comment priorities =
+    k { kcomment = comment }
+    where
+      k = newPreskel gen shared insts orderings leadsto' decls'
+          New prob kpriority Nothing
+      shared = Shared { prot = protocol, goals = gs }
+      decls' = foldl addInstOrigs decls (zip (nats (length insts)) insts)
+      decls = mkDecls dlist'
+      leadsto' = checkLeadsto leadsto []
+      dlist' = map g dlist
+      prob = strandids k        -- Fixed point on k is okay.
+      kpriority = priorities
+      g ("uniq-orig", ds) = ("uniq-orig", map fuo ds)
+      g ("uniq-gen", ds) = ("uniq-gen", map fug ds)
+      g (tag, ds) = (tag, ds)
+      fuo dinst
+        | length (ts) == 1 = oneOrig (originationNodes (strands k) (head ts))
+        | otherwise = error ("Strand.mkPreskel: uniq-orig expects single terms")
+        where ts = dterms dinst
+      oneOrig (t, []) =
+        error ("Strand.mkPreskel: no origination point for " ++ show t)
+      oneOrig (t, [l]) = declInst [t] [l]
+      oneOrig (t, (_:_:_)) =
+        error ("Strand.mkPreskel: too many origination points for " ++ show t)
+      fug dinst
+        | length (ts) /= 1 = error ("Strand.mkPreskel: uniq-gen expects single terms")
+        | not (isVar $ head ts) && (isNum $ head ts) =
+          error ("Strand.mkPreskel: uniq-gen numeric values must be variables")
+        | otherwise = oneGen (generationNodes (strands k) (head ts))
+        where ts = dterms dinst
+      oneGen (t, []) =
+        error ("Strand.mkPreskel: no generation point for " ++ show t)
+      oneGen (t, [l]) = declInst [t] [l]
+      oneGen (t, (_:_:_)) =
+        error ("Strand.mkPreskel: too many generation points for " ++ show t)
+      checkLeadsto [] _ = []
+      checkLeadsto (((s1,i1),(s2,i2)) : rest) consumed =
+        case ((trace (insts !! s1)) !! i1) of
+          Sync (Tran (_, Just t, _)) -> case ((trace (insts !! s2)) !! i2) of
+            Sync (Tran (Just t', nxt, _)) ->
+               if (t /= t') then error ("Strand.mkPreskel: invalid state edge at " ++ show (s1,i1))
+               else case nxt of
+                 Nothing -> (((s1,i1),(s2,i2)) : checkLeadsto rest consumed)
+                 Just _ -> if (elem (s1,i1) consumed) then
+                   error ("Strand.mkPreskel: state of " ++ show (s1,i1) ++
+                          " already consumed") else
+                   (((s1,i1),(s2,i2)) : checkLeadsto rest ((s1,i1) : consumed))
+            _ -> error ("Strand.mkPreskel: malformed state edge at " ++ show (s1,i1))
+          _ -> error ("Strand.mkPreskel: malformed state edge at " ++ show (s1,i1))
+
+addInstOrigs :: Algebra t p g s e c => SkelDeclarations t ->
+                (Sid, Instance t e) -> SkelDeclarations t
+addInstOrigs d (s, i) = inheritRdecls s i d
+
+-- Strand functions
+
+strandInst :: Algebra t p g s e c => Preskel t g s e ->
+              Sid -> Instance t e
+strandInst k strand = insts k !! strand
+
+nstrands :: Algebra t p g s e c => Preskel t g s e -> Int
+nstrands k = length (strandids k)
+
+-- Convert the preskeleton made by the loader into the first skeleton
+-- used in the search.
+firstSkeleton :: Algebra t p g s e c => Preskel t g s e ->
+                 [Preskel t g s e]
+firstSkeleton k =
+    do
+      k <- wellFormedPreskel k
+      k' <- toSkeleton False k   -- only k' should have pov = Nothing
+      return $ k' { prob = strandids k', pov = Just k' }
+
+-- Create a preskeleton.  The node ordering relation is put into the
+-- preds field of each instance in this function.  The maybe uniquely
+-- originating term data is also filled in.  This version is used
+-- within this module.
+newPreskel :: Algebra t p g s e c => g -> Shared t g ->
+             [Instance t e] -> [Pair] -> [Pair] -> SkelDeclarations t ->
+             Operation t s -> [Sid] -> [(Node,Int)] ->
+             Maybe (Preskel t g s e) -> Preskel t g s e
+newPreskel gen shared insts orderings leadsto decls oper prob kpriority pov =
+    let orderings' = L.nub orderings
+        g = graph trace height insts orderings'
+        strands = gstrands g
+        decls' = declsNub decls
+        edges = gedges g
+        tc = filter pairWellOrdered (graphClose $ graphEdges strands)
+        k = Preskel { gen = gen,
+                      shared = shared,
+                      insts = insts,
+                      strands = strands,
+                      orderings = orderings',
+                      leadsto = leadsto,
+                      edges = edges,
+                      decls = decls',
+                      cInfo = declsOrig strands decls',
+                      kcomment = [],
+                      tc = map graphPair tc,
+                      strandids = nats (length insts),
+                      operation = oper,
+                      prob = prob,
+                      kpriority = kpriority,
+                      pov = pov } in
+        if useCheckVars then
+            checkVars k
+        else k
+
+checkVars :: Algebra t p g s e c => Preskel t g s e ->
+             Preskel t g s e
+checkVars k =
+    foldl f k rolevars
+    where
+      skelvars = S.fromList $ kvars k
+      rolevars = concatMap (rvars . role) (insts k)
+      f k v
+        | S.member v skelvars =
+            error ("Strand.checkVars: role var in skel " ++ show k)
+        | otherwise = k
+
+vertex  :: Algebra t p g s e c => Preskel t g s e -> Node ->
+           Vertex t e
+vertex k (s, i) =
+    nodes (strands k !! s) !! i
+
+originationNodes :: Algebra t p g s e c => [Strand t e] ->
+                    t -> (t, [Node])
+originationNodes strands u =
+    (u, [ (sid strand, p) |
+          strand <- reverse strands,
+          p <- M.maybeToList $ originationPos u (trace (inst strand)) ])
+
+generationNodes :: Algebra t p g s e c => [Strand t e] ->
+                    t -> (t, [Node])
+generationNodes strands u =
+    (u, [ (sid strand, p) |
+          strand <- reverse strands,
+          p <- M.maybeToList $ generationPos u (trace (inst strand)) ])
+
+-- Do the nodes in the orderings have the right direction?
+wellOrdered :: Algebra t p g s e c => Preskel t g s e -> Bool
+wellOrdered k =
+    all pairWellOrdered (edges k)
+
+pairWellOrdered :: Algebra t p g s e c => Edge t e -> Bool
+pairWellOrdered (n0, n1) =
+    case (event n0, event n1) of
+      (Out _, In _) -> True
+      (Sync _, Sync _) -> True
+      (Out _, Sync _) -> True
+      (Sync _, In _) -> True
+      _ -> False
+
+-- Do transitively reduced orderings have the right direction?
+reducedWellOrdered :: Algebra t p g s e c => Preskel t g s e -> Bool
+reducedWellOrdered k =
+    all reducedPairWellOrdered (edges k)
+
+reducedPairWellOrdered :: Algebra t p g s e c => Edge t e -> Bool
+reducedPairWellOrdered (n0, n1) =
+    case (event n0, event n1) of
+      (Out _, In _) -> True
+      (Sync (Tran (_, Just _, _)), Sync (Tran (Just _, _, _))) ->
+        True
+      (Sync (Tran (_, Nothing, _)), Sync (Tran (Just _, Just _, _))) ->
+        True
+      (Sync _, In _) -> True
+      (Out _, Sync _) -> True
+      _ -> False
+
+-- The terms used in the strands in this preskeleton.
+-- Should this return a set, or a multiset?
+kterms :: Eq t => Preskel t g s e -> [t]
+kterms k = iterms (insts k)
+
+-- The terms used in only the message events in this preskeleton.
+kmesgterms :: Eq t => Preskel t g s e -> [t]
+kmesgterms k = imesgterms (insts k)
+
+-- The terms used in a list of instances.
+iterms :: Eq t => [Instance t e] -> [t]
+iterms insts =
+  L.nub [t | i <- insts,
+             evt <- trace i,
+             t <- evtTerms evt]
+
+-- The terms used in only the message events in a list of instances.
+imesgterms :: Eq t => [Instance t e] -> [t]
+imesgterms insts =
+  L.nub [t | i <- insts,
+             evt <- trace i,
+             t <- evtMesgTerms evt]
+
+-- The node orderings form an acyclic order if there are no cycles.
+-- Use depth first search to detect cycles.  A graph with no node with
+-- an indegree of zero is cyclic and must not be checked with depth
+-- first search.
+acyclicOrder :: Algebra t p g s e c => Preskel t g s e -> Bool
+acyclicOrder k =
+    all (not . backEdge numbering) edges
+    where
+      edges = graphEdges (strands k)
+      -- The starting set contains the last node in every strand
+      start = map (last . nodes) (strands k)
+      -- Remove nodes that have non-zero indegree
+      start' = foldl (flip L.delete) start (map fst edges)
+      numbering = dfs preds start'
+
+-- Variables in this preskeleton, excluding ones in roles, and ones
+-- that only occur in a cause.
+kvars :: Algebra t p g s e c => Preskel t g s e -> [t]
+kvars k =
+    S.elems $ foldl addIvars S.empty (insts k)
+
+-- Isomorphism Check
+
+-- Are two skeletons equivalent?  Two skeletons are equivalent if they
+-- are isomorphic.  A key efficiency requirement in the implementation
+-- of the cryptograhic protocol shapes analysis algorithm is to ensure
+-- only one member of each equivalence class of skeletons is analyzed,
+-- and the results of that analysis is immediately used for all other
+-- members of the equivalence class.
+
+-- To meet this requirement, a list of skeletons that have been seen
+-- is maintained.  Before a skeleton is put on a to do list for
+-- analysis, it is checked to see if it is ismorphic to one already
+-- seen.  If so, the results of the analysis for the ismorphic
+-- skeleton is used instead of putting the skeleton on the to do list.
+
+-- Once a skeleton has been printed, the only reason for saving it is
+-- for isomorphism checking.  The isomorphism check is performed
+-- frequently, so an specialized data structure is used.  The gist of
+-- a skeleton is all that is needed for the test for equivalence.
+
+data Gist t g = Gist
+    { ggen :: g,
+      gtraces :: [(Int, Trace t)],
+      gorderings :: [Pair],
+      gleadsto :: [Pair],
+      gdecls :: SkelDeclarations t,
+      nvars :: !Int,           -- Number of variables
+      ntraces :: !Int,         -- Number of traces
+      norderings :: !Int,      -- Number of orderings
+      nleadsto :: !Int,        -- Number of leadsto pairs
+      nsndecls :: [Int] }      -- Counts of decls
+    deriving Show
+
+gist :: Algebra t p g s e c => Preskel t g s e -> Gist t g
+gist k =
+    Gist { ggen = gen k,
+           gtraces = gtraces,
+           gorderings = gorderings,
+           gleadsto = gleadsto,
+           gdecls = gdecls,
+           nvars = length (kvars k),
+           ntraces = length gtraces,
+           norderings = length gorderings,
+           nleadsto = length gleadsto,
+           nsndecls = nsdecls gdecls }
+    where
+      gtraces = map (\i -> (height i, trace i)) (insts k)
+      gorderings = orderings k
+      gleadsto = leadsto k
+      gdecls = decls k
+
+-- Test to see if two preskeletons are isomorphic
+
+-- First, ensure the two preskeletons have:
+-- 1. The same number of variables
+-- 2. The same number of strands
+-- 3. The same number of node orderings
+-- 4. The same number of terms in knon and kunique
+
+-- Next compute the plausible permutations and substitutions.
+
+-- Next, for each permutation of the strands, eliminate the ones that
+-- map a strand to another of a different length, and don't cause the
+-- node orderings to be equal.
+
+-- For permutations that meet the previous conditions, see if there is
+-- a renaming that maps every strand trace in one preskeleton into the
+-- appropriate one in the other preskeleton.  Finally, check to see if
+-- the renaming works in the nr and ur terms.
+
+isomorphic :: Algebra t p g s e c => Gist t g -> Gist t g -> Bool
+isomorphic g g' =
+    nvars g == nvars g' &&
+    ntraces g == ntraces g' &&
+    norderings g == norderings g' &&
+    nleadsto g == nleadsto g' &&
+    nsndecls g == nsndecls g' &&
+    any (tryPerm g g') (permutations g g')
+
+-- Extend a permutation while extending a substitution
+-- Extend by matching later strands first
+permutations :: Algebra t p g s e c => Gist t g ->
+                Gist t g -> [((g, e), [Sid])]
+permutations g g' =
+    map rev $ perms (ggen g', emptyEnv)
+                    (reverse $ gtraces g)
+                    (reverse $ nats $ ntraces g)
+    where
+      perms env [] [] = [(env, [])]
+      perms env ((h, c):hcs) xs =
+          [ (env'', x:ys) |
+            x <- xs,
+            let (h', c') = gtraces g' !! x,
+            h == h',
+            env' <- jibeTraces c c' env,
+            (env'', ys) <- perms env' hcs (L.delete x xs) ]
+      perms _ _ _ = error "Strand.permutations: lists not same length"
+      rev (env, xs) = (env, reverse xs)
+
+-- Length of matched traces must agree.
+jibeTraces :: Algebra t p g s e c => Trace t ->
+              Trace t -> (g, e) -> [(g, e)]
+jibeTraces [] [] ge = [ge]
+jibeTraces (In t : c) (In t' : c') ge =
+    do
+      env <- match t t' ge
+      jibeTraces c c' env
+jibeTraces (Out t : c) (Out t' : c') ge =
+    do
+      env <- match t t' ge
+      jibeTraces c c' env
+jibeTraces (Sync t : c) (Sync t' : c') ge =
+    do
+      env <- matchTran t t' ge
+      jibeTraces c c' env
+jibeTraces _ _ _ = []
+
+{-
+-- Here is the permutation algorithm used
+
+permutations :: Int -> [[Int]]
+permutations n =
+    perms (nats n)
+    where
+      perms []  = [[]]
+      perms xs = [ x:ys | x <- xs, ys <- perms (L.delete x xs) ]
+
+-- Here is the usual algorithm
+
+-- Returns a list of all the permutations of the natural numbers less
+-- that the argument.  The identity permutation is the first one in
+-- the returned list.  The code is based on a function in Haskell 1.3.
+permutations :: Int -> [[Int]]
+permutations n =
+    perms (nats n)
+    where
+      perms [] = [[]]
+      perms (x:xs) = [zs | ys <- perms xs, zs <- interleave x ys]
+      interleave x [] = [[x]]
+      interleave x (y:ys) = (x:y:ys) : map (y:) (interleave x ys)
+-}
+
+tryPerm :: Algebra t p g s e c => Gist t g ->
+           Gist t g -> ((g, e), [Sid]) -> Bool
+tryPerm g g' (env, perm) =
+    checkOrigs g g' env perm &&
+    containsMapped (permutePair perm) (gorderings g') (gorderings g) &&
+    containsMapped (permutePair perm) (gleadsto g') (gleadsto g)
+
+-- containsMapped f xs ys is true when list xs contains each element
+-- in ys after being mapped with function f.
+containsMapped :: Eq a => (a -> a) -> [a] -> [a] -> Bool
+containsMapped f xs ys =
+    all (flip elem xs) (map f ys)
+
+permutePair :: [Sid] -> Pair -> Pair
+permutePair perm (n, n') = (permuteNode perm n, permuteNode perm n')
+
+permuteNode :: [Sid] -> Node -> Node
+permuteNode perm (strand, pos) = (perm !! strand, pos)
+
+-- Preskeleton Reduction System (PRS)
+
+-- The PRS reduces a preskeleton to a list of skeletons.  Along the way,
+-- it applies the associtated homomorphism to a node and computes a
+-- substitution.  Thus if skel (k, n, empty) = [(k', n', sigma)], then
+-- phi,sigma is a homomorphism from k to k', n' = phi(n).
+
+type PRS t p g s e c = (Preskel t g s e, -- Parent
+                        Preskel t g s e, -- Potential cohort member
+                        Node,   -- Image of test node in member
+                        [Sid],  -- Strand map part of homomorphism
+                        s)      -- Substition part of homomorphism
+
+-- Extract the protential cohort member from a PRS.
+skel :: Algebra t p g s e c => PRS t p g s e c -> Preskel t g s e
+skel (_, k, _, _, _) = k
+
+-- Returns the preskeletons that result from applying a substitution.
+-- If validate is True, preskeletons that fail to preserve the nodes
+-- at which each maybe uniquely originating term originates are filter
+-- out.
+
+ksubst :: Algebra t p g s e c => PRS t p g s e c ->
+          (g, s) -> [PRS t p g s e c]
+ksubst (k0, k, n, phi, hsubst) (gen, subst) =
+  do
+      (gen', insts') <- foldMapM (substInst subst) gen (insts k)
+      let decls' = declsMapTerms (substitute subst) (decls k)
+      let operation' = substOper subst (operation k)
+      let k' = newPreskel gen' (shared k) insts'
+               (orderings k) (leadsto k) decls' operation' (prob k) (kpriority k) (pov k)
+      k' <- wellFormedPreskel k'
+      return (k0, k', n, phi, compose subst hsubst)
+
+-- Monad version of mapAccumR
+foldMapM :: Monad m => (a -> b -> m (a, c)) -> a -> [b] -> m (a, [c])
+foldMapM _ acc [] = return (acc, [])
+foldMapM f acc (x:xs) =
+  do
+      (acc', xs') <- foldMapM f acc xs
+      (acc'', x') <- f acc' x
+      return (acc'', x':xs')
+
+substInst :: Algebra t p g s e c => s -> g -> Instance t e ->
+             [(g, Instance t e)]
+substInst subst gen i =
+    bldInstance (role i) (map (evtMap $ substitute subst) (trace i)) gen
+
+substOper :: Algebra t p g s e c => s ->
+             Operation t s ->
+             Operation t s
+substOper _ New = New
+substOper subst (Contracted s cause) =
+    Contracted (compose subst s) (substCause subst cause)
+substOper _ m@(Displaced _ _ _ _ _) = m
+substOper subst (AddedStrand role height cause) =
+    AddedStrand role height (substCause subst cause)
+substOper subst (AddedListener t cause) =
+    AddedListener (substitute subst t) (substCause subst cause)
+substOper subst (AlgebraSolved s cause) =
+    AlgebraSolved (compose subst s) (substCause subst cause)
+substOper _ m@(Generalized _) = m
+substOper _ m@(Collapsed _ _) = m
+
+substCause :: Algebra t p g s e c => s ->
+              Cause t ->
+              Cause t
+substCause subst (Cause dir n t escape) =
+    Cause dir n (substitute subst t) (S.map (substitute subst) escape)
+
+-- A compression (s is to be eliminated)
+compress :: Algebra t p g s e c => Bool -> PRS t p g s e c ->
+            Sid -> Sid -> [PRS t p g s e c]
+compress validate (k0, k, n, phi, hsubst) s s' =
+    do
+      let perm = updatePerm s s' (strandids k)
+      orderings' <- normalizeOrderings validate
+                    (permuteOrderings perm (orderings k))
+--      leadsto' <- normalizeOrderings validate
+--                    (permuteOrderings perm (leadsto k))
+      let k' =
+              newPreskel
+              (gen k)
+              (shared k)
+              (deleteNth s (insts k))
+              orderings'
+              (permuteOrderings perm (leadsto k))
+              (declsMapStrands perm (decls k))
+              (operation k)
+              (updateProb perm (prob k))
+              (updatePriority perm (kpriority k))
+              (pov k)
+      k'' <- wellFormedPreskel k'
+      return (k0, k'', permuteNode perm n, map (perm !!) phi, hsubst)
+
+permuteOrderings :: [Sid] -> [Pair] -> [Pair]
+permuteOrderings perm orderings = map (permutePair perm) orderings
+
+updatePerm :: Int -> Int -> [Sid] -> [Sid]
+updatePerm old new perm =
+    map (updateStrand old new) perm
+
+-- Old is to be eliminated and merged into new
+updateStrand :: Int -> Int -> Sid -> Sid
+updateStrand old new i =
+    let j = if old == i then new else i in
+    if j > old then j - 1 else j
+
+-- Eliminates implied intrastrand orderings and fails if it finds a
+-- reverse intrastrand ordering when flag is true.
+normalizeOrderings :: Bool -> [Pair] -> [[Pair]]
+normalizeOrderings True orderings =
+    loop [] orderings
+    where
+      loop acc [] = [acc]
+      loop acc (p@((s0, i0), (s1, i1)) : ps)
+          | s0 /= s1 = loop (p : acc) ps
+          | i0 < i1 = loop acc ps
+          | otherwise = []
+normalizeOrderings False orderings =
+    [filter (\ ((s0, _), (s1, _)) -> s0 /= s1) orderings]
+
+updateProb :: [Sid] -> [Sid] -> [Sid]
+updateProb mapping prob =
+    map (mapping !!) prob
+
+updatePriority :: [Sid] -> [(Node,Int)] -> [(Node,Int)]
+updatePriority mapping kpriority =
+    map (\ (n,i) -> (nodeMap mapping n, i)) kpriority
+
+-- Provide a list of nodes with non-default priorities
+kpriorities :: Algebra t p g s e c => Preskel t g s e -> [(Node,Int)]
+kpriorities k =
+  [((s,i),priority k (s,i)) | s <- [0..(length (insts k) - 1)],
+               i <- [0..(height ((insts k) !! s) -1)],
+               priority k (s,i) /= defaultPriority,
+               outNode s i]
+  where
+    outNode s i =
+      case event (nodes (strands k !! s) !! i) of
+        Out _ -> False
+        In _ -> True
+        Sync _ -> False
+
+priority :: Algebra t p g s e c => Preskel t g s e -> Node -> Int
+priority k (s,i) =
+  case lookup (s,i) (kpriority k) of
+    Just p -> p
+    Nothing -> rpriority (role $ (insts k !! s)) !! i
+
+-- Purge a strand.  Used by thinning.  The same as pruning except
+-- edges to the purged strand are forwarded as a first step.
+purge :: Algebra t p g s e c => PRS t p g s e c ->
+            Sid -> Sid -> [PRS t p g s e c]
+purge (k0, k, n, phi, hsubst) s s' =
+    do
+      let perm = updatePerm s s' (strandids k)
+      orderings' <- normalizeOrderings False
+                    (permuteOrderings perm
+                     (forward s (orderings k))) -- Pruning difference
+      leadsto' <- normalizeOrderings False
+                    (permuteOrderings perm
+                     (forward s (leadsto k))) -- Pruning difference
+      let k' =
+              newPreskel
+              (gen k)
+              (shared k)
+              (deleteNth s (insts k))
+              orderings'
+              leadsto'
+              (declsMapStrands perm (decls k))
+              (operation k)
+              (updateProb perm (prob k))
+              (updatePriority perm (kpriority k))
+              (pov k)
+      k'' <- wellFormedPreskel k'
+      return (k0, k'', permuteNode perm n, map (perm !!) phi, hsubst)
+
+-- Forward orderings from strand s
+forward :: Sid -> [Pair] -> [Pair]
+forward s orderings =
+    concatMap f orderings
+    where
+      f p@((s0, i0), (s1, i1))
+          | s0 == s = [((s2, i2), (s1, i1)) | -- Forward here
+                       ((s2, i2), (s3, i3)) <- orderings,
+                       s3 == s0 && i0 >= i3]
+          | s1 == s = []        -- Dump edges to strand s
+          | otherwise = [p]     -- Pass thru other edges
+
+maybePrune :: Algebra t p g s e c => Bool -> PRS t p g s e c ->
+              [PRS t p g s e c]
+maybePrune True prs
+  | useThinning = thin prs
+  | otherwise = prune prs
+maybePrune False prs = reduce prs
+
+-- Redundant Strand Elimination (also known as pruning)
+
+prune :: Algebra t p g s e c => PRS t p g s e c -> [PRS t p g s e c]
+prune prs =
+    pruneStrands prs (reverse $ strandids $ skel prs) (strandids $ skel prs)
+
+pruneStrands :: Algebra t p g s e c => PRS t p g s e c ->
+                [Sid] -> [Sid] -> [PRS t p g s e c]
+pruneStrands prs [] _ =
+    reduce prs                  -- No redundant strands found
+pruneStrands prs (_:ss) [] =
+    pruneStrands prs ss (strandids $ skel prs)
+pruneStrands prs (s:ss) (s':ss')
+    | s == s' = pruneStrands prs (s:ss) ss'
+    | otherwise =
+        case pruneStrand prs s s' of
+          [] -> pruneStrands prs (s:ss) ss'  -- Try next pair
+          prss ->                            -- Success
+              do
+                prs <- prss
+                prune prs
+
+-- Strand s is redundant if there is an environment that maps
+-- the trace of s into a prefix of the trace of s', but changes
+-- no other traces in the preskeleton.
+pruneStrand :: Algebra t p g s e c => PRS t p g s e c ->
+               Sid -> Sid -> [PRS t p g s e c]
+pruneStrand prs s s' =
+    do
+      let k = skel prs
+      case elem s (prob k) && elem s' (prob k) of
+        True -> fail ""   -- Strands s and s' in image of POV skeleton
+        False -> return ()
+      env <- matchTraces
+             (trace (strandInst k s))
+             (trace (strandInst k s'))
+             (gen k, emptyEnv)
+      let ts = concatMap (tterms . trace) $ deleteNth s $ insts k
+      (gen', env') <- identityEnvFor env ts
+      case matchRenaming (gen', env') of
+        True -> return ()
+        False -> fail ""
+      case origCheck k env' of
+        True -> return ()
+        False -> fail ""
+      case all (precedesCheck k s s') (edges k) of
+        True -> return ()
+        False -> fail ""
+      case not useStrictPrecedesCheck ||
+           strictPrecedesCheck s s' (orderings k) &&
+           strictPrecedesCheck s' s (orderings k) of
+        True -> return ()
+        False -> fail ""
+      case not usePruningUnboundCheck || unboundCheck k s s' env' of
+        True -> return ()
+        False -> fail ""
+      prs <- ksubst prs (gen', substitution env')
+      compress True prs s s'
+
+matchTraces :: Algebra t p g s e c => Trace t ->
+               Trace t -> (g, e) -> [(g, e)]
+matchTraces [] _ env = [env]    -- Pattern can be shorter
+matchTraces (In t : c) (In t' : c') env =
+    do
+      e <- match t t' env
+      matchTraces c c' e
+matchTraces (Out t : c) (Out t' : c') env =
+    do
+      e <- match t t' env
+      matchTraces c c' e
+matchTraces (Sync t : c) (Sync t' : c') env =
+    do
+      e <- matchTran t t' env
+      matchTraces c c' e
+matchTraces _ _ _ = []
+
+-- Ensure that if (s, p) precedes (s", p"), then (s', p) precedes (s", p")
+-- and if (s", p") precedes (s, p), then (s", p") precedes (s', p)
+precedesCheck :: Algebra t p g s e c => Preskel t g s e ->
+                 Sid -> Sid -> Edge t e -> Bool
+precedesCheck k s s' (gn0, gn1)
+    | s == sid (strand gn0) = graphPrecedes (vertex k (s', pos gn0)) gn1
+    | s == sid (strand gn1) = graphPrecedes gn0 (vertex k (s', pos gn1))
+    | otherwise = True
+
+-- Experiment
+strictPrecedesCheck :: Sid -> Sid -> [Pair] -> Bool
+strictPrecedesCheck s s' pairs =
+    all (flip elem pairs) before &&
+    all (flip elem pairs) after
+    where
+      before = [ (n0, (s', i1)) |
+                 (n0, (s1, i1)) <- pairs,
+                 s1 == s ]
+      after = [ ((s', i0), n1) |
+                 ((s0, i0), n1) <- pairs,
+                 s0 == s ]
+
+-- Another experiment
+unboundCheck :: Algebra t p g s e c => Preskel t g s e ->
+              Sid -> Sid -> e -> Bool
+unboundCheck k s s' env =
+    all (flip S.member unbound) (map (instantiate env) (S.elems unbound))
+    where
+      -- The vars in s and s'
+      this = addIvars (addIvars S.empty (strandInst k s)) (strandInst k s')
+      -- The vars in strands other than s and s'
+      others = kvarsBut k s s'
+      unbound = S.difference this others
+
+kvarsBut :: Algebra t p g s e c => Preskel t g s e ->
+            Sid -> Sid -> Set t
+kvarsBut k s s' =
+    loop S.empty (insts k) 0
+    where
+      loop xs [] _ = xs
+      loop xs (i:is) s''
+          | s'' == s || s'' == s' =
+              loop xs is (s'' + 1)
+          | otherwise =
+              loop (addIvars xs i) is (s'' + 1)
+
+-- Thinning
+
+thin :: Algebra t p g s e c => PRS t p g s e c -> [PRS t p g s e c]
+thin prs =
+    thinStrands prs [] $ reverse ss
+    where                       -- Remove strands in image of POV
+      ss = filter (\s -> notElem s (prob $ skel prs)) (strandids $ skel prs)
+
+-- Takes a skeleton, a list of pairs of strands that matched, and a
+-- list of strands yet to be analyzed, and produces the result of
+-- skeletonization.  It first tries single pair thinning, and during
+-- that process collects potential multistrand thinning pairs.  Once
+-- there are no more unanalyzed strands, it tries multistrand
+-- thinning.
+thinStrands :: Algebra t p g s e c => PRS t p g s e c ->
+               [(Sid, Sid)] -> [Sid] -> [PRS t p g s e c]
+thinStrands prs ps [] =         -- All strands analyzied
+    case multiPairs ps of       -- Generate multipairs
+      [] -> reduce prs
+      mps -> thinMany prs mps   -- Try multistrand thinning
+thinStrands prs ps (s:ss) =
+  thinStrandPairs prs ps s ss ss
+
+-- This loop tries pairs of strands.  Takes a skeleton, a list of
+-- pairs of strands that matched but did not thin, a strand to be
+-- eliminated, a list of strands to be used in the outer loop
+-- (thinStrands), and a list of strands to be considered for matching,
+-- and produces the result of skeletonization.
+thinStrandPairs :: Algebra t p g s e c => PRS t p g s e c -> [(Sid, Sid)] ->
+                   Sid -> [Sid] -> [Sid] -> [PRS t p g s e c]
+thinStrandPairs prs ps _ ss [] =
+  thinStrands prs ps ss
+thinStrandPairs prs ps s ss (s':ss') =
+  case thinStrand prs s s' of
+    -- Try next pair, there was no match
+    Nothing -> thinStrandPairs prs ps s ss ss'
+    -- Try next pair, there was a match so save this pair
+    Just [] -> thinStrandPairs prs ((s, s'):ps) s ss ss'
+    Just prss ->                -- Success at single strand thinning
+      do
+        prs <- prss
+        thin prs                -- Restart from the beginning
+
+-- Try thinning s with s'.  If there was no match, return Nothing,
+-- else return Just the list of results.
+thinStrand :: Algebra t p g s e c => PRS t p g s e c ->
+              Sid -> Sid -> Maybe [PRS t p g s e c]
+thinStrand prs s s' =
+  case thinStrandMatch k s s' (gen k, emptyEnv) of
+      [] -> Nothing
+      ges ->
+          Just $ do
+            e <- ges
+            (gen, env) <- thinStrandCheck k s e
+            [ prs' | prs <- ksubst prs (gen, substitution env),
+                     prs <- reduce prs,
+                     prs' <- purge prs s s',
+                     prs'' <- purge prs s' s,
+                     isomorphic (gist (skel prs')) (gist (skel prs'')) ]
+  where
+    k = skel prs
+
+-- See if two strands match.
+thinStrandMatch :: Algebra t p g s e c => Preskel t g s e ->
+                   Sid -> Sid -> (g, e) -> [(g, e)]
+thinStrandMatch k s s' e =
+  ans
+  where
+    i = strandInst k s
+    i' = strandInst k s'
+    ans = do
+    case height i /= height i' of
+      True -> fail ""
+      False -> return ()
+    matchTraces (trace i) (trace i') e
+
+-- Do the identity, renaming, and origination check.
+thinStrandCheck :: Algebra t p g s e c => Preskel t g s e ->
+                   Sid -> (g, e) -> [(g, e)]
+thinStrandCheck k s env =
+  do
+    (gen', env') <- identityEnvFor env ts
+    case matchRenaming (gen', env') of
+      True -> return ()
+      False -> fail ""
+    case origCheck k env' of
+      True -> return (gen', env')
+      False -> fail ""
+  where
+    ts = concatMap (tterms . trace) $ deleteNth s $ insts k
+
+-- Multistrand thinning
+
+-- Generate all candidate pairings
+multiPairs :: [(Sid, Sid)] ->  [[(Sid, Sid)]]
+multiPairs _ | useSingleStrandThinning = []
+multiPairs ps = filter atLeastTwo $ thinOne ps
+
+-- List is of length at least two.
+atLeastTwo :: [a] -> Bool
+atLeastTwo (_:_:_) = True
+atLeastTwo _ = False
+
+thinOne :: [(Sid, Sid)] -> [[(Sid, Sid)]]
+thinOne [] = []
+thinOne (p:ps) =
+    thinTwo p ps ++ thinOne ps
+
+-- Construct possible pairs that include (s, s').
+thinTwo :: (Sid, Sid) -> [(Sid, Sid)] -> [[(Sid, Sid)]]
+thinTwo (s, s') ps =
+    [(s, s')] : [(s, s') : ps' | ps' <- thinOne (filter (diff (s, s')) ps)]
+    where                       -- filter out pairs with seen strands
+      diff (s0, s1) (s2, s3) =
+          s0 /= s2 && s0 /= s3 && s1 /= s2 && s1 /= s3
+
+-- Try all multistrand pairings until one succeeds.
+thinMany :: Algebra t p g s e c => PRS t p g s e c ->
+            [[(Sid, Sid)]] -> [PRS t p g s e c]
+thinMany prs [] = reduce prs
+thinMany prs (ps:mps) =
+    case thinManyStrands prs ps of
+      [] -> thinMany prs mps
+      prss ->                           -- Success
+        do
+          prs <- prss
+          thin prs
+
+thinManyStrands :: Algebra t p g s e c => PRS t p g s e c ->
+                   [(Sid, Sid)] -> [PRS t p g s e c]
+thinManyStrands prs ps =
+    do
+      let k = skel prs
+      (gen, env) <- thinManyMatch k ps
+      [ prs' | prs <- ksubst prs (gen, substitution env),
+               prs <- reduce prs,
+               prs' <- compressMany prs ps,
+               prs'' <- compressMany prs (swap ps),
+               isomorphic (gist (skel prs')) (gist (skel prs'')) ]
+
+thinManyMatch :: Algebra t p g s e c => Preskel t g s e ->
+                [(Sid, Sid)] -> [(g, e)]
+thinManyMatch k ps =
+    do
+      let f e (s, s') = thinStrandMatch k s s' e
+      env <- foldM f (gen k, emptyEnv) ps
+      let ss = concatMap (\(s, s') -> [s, s']) ps
+      let ts = concatMap (tterms . trace) $ deleteMany ss $ insts k
+      (gen', env') <- identityEnvFor env ts
+      case matchRenaming (gen', env') of
+        True -> return ()
+        False -> fail ""
+      case origCheck k env' of
+        True -> return (gen', env')
+        False -> fail ""
+
+deleteMany :: [Int] -> [a] -> [a]
+deleteMany nums xs =
+    loop 0 xs
+    where
+      loop _ [] = []
+      loop n (x:xs) | elem n nums = loop (n + 1) xs
+                    | otherwise = x : loop (n + 1) xs
+
+compressMany :: Algebra t p g s e c => PRS t p g s e c ->
+                [(Sid, Sid)] -> [PRS t p g s e c]
+compressMany prs [] = [prs]
+compressMany prs ((s, s'):ps) =
+    do
+      prs' <- purge prs s s'
+      compressMany prs' (map (updatePairs s s') ps)
+
+swap :: [(a, a)] -> [(a, a)]
+swap ps =
+    map (\(x, y) -> (y, x)) ps
+
+updatePairs :: Sid -> Sid -> (Sid, Sid) -> (Sid, Sid)
+updatePairs old new (s, s') =
+    (updateStrand old new s, updateStrand old new s')
+
+-- Transitive Reduction
+
+-- An edge is essential if its removal eliminates all paths from its
+-- source to its destination.  This function removes all non-essential
+-- edges from the ordering relation.
+
+reduce :: Algebra t p g s e c => PRS t p g s e c -> [PRS t p g s e c]
+reduce (k0, k, n, phi, hsubst) =
+    let o = L.nub (map graphPair (graphReduce (edges k)) ++ (filter nonIntraStrand (leadsto k))) in
+    if length o == length (orderings k) then
+        do
+          reducedWellFormed k
+          noStateSplit k
+          return (k0, k, n, phi, hsubst) -- Nothing to take away
+    else
+        do
+          let k' =
+                  newPreskel
+                  (gen k)
+                  (shared k)
+                  (insts k)
+                  o
+                  (leadsto k)
+                  (decls k)
+                  (operation k)
+                  (prob k)
+                  (kpriority k)
+                  (pov k)
+          k'' <- wellFormedPreskel k'
+          reducedWellFormed k''
+          noStateSplit k''
+          return (k0, k'', n, phi, hsubst)
+      where
+        nonIntraStrand ((s1,_),(s2,_)) = (s1 /= s2)
+--    where
+--      leadstoPairs = filter isLeadsTo pairs
+--      pairs = map graphPair (edges k)
+--      isLeadsTo ((s1,i1),(s2,i2)) =
+--        case (trace (insts k !! s1) !! i1) of
+--        (Sync (Tran (_, Just next, _))) -> case (trace (insts k !! s2) !! i2) of
+--                      (Sync (Tran (Just now, _, _))) -> (now == next)
+--                      _ -> False
+--        _ -> False
+
+-- Answers for cohorts
+type Ans t p g s e c = (Preskel t g s e, Node, [Sid], s)
+
+ans :: Algebra t p g s e c => PRS t p g s e c -> [Ans t p g s e c]
+ans (_, k, n, phi, subst) = [(k, n, phi, subst)]
+
+-- Returns the skeleton associated with a preskeleton or nothing when
+-- there isn't one.  Manufacture a node and a term, and then drop them
+-- afterwards.
+toSkeleton :: Algebra t p g s e c => Bool -> Preskel t g s e ->
+              [Preskel t g s e]
+toSkeleton prune k =
+    do
+      prs <- skeletonize prune (k, k, (0, 0), strandids k, emptySubst)
+      (k', _, _, _) <- ans prs
+      return k'
+
+-- Contraction
+
+contract :: Algebra t p g s e c => Preskel t g s e -> Node ->
+            Cause t -> (g, s) -> [Ans t p g s e c]
+contract k n cause subst =
+    do
+      prs <- ksubst (k, k { operation = Contracted emptySubst cause },
+                           n, strandids k, emptySubst) subst
+      prs' <- skeletonize usePruningWhileSolving prs
+      ans prs'
+
+-- Regular Augmentation
+
+-- First argument determines if displacement is used.
+augment :: Algebra t p g s e c => Preskel t g s e ->
+           Node -> Cause t -> Role t ->
+           (g, s) -> Instance t e -> Bool -> [Ans t p g s e c]
+augment k0 n cause role subst inst isState =
+  do
+    prs <- augmentAndDisplace k0 n cause role subst inst isState
+    ans prs
+
+-- Apply a substitution, and then augment and displace.  Augmentations
+-- add an instance and one ordered pair.  Displacements add an ordered
+-- pair and may add nodes.
+augmentAndDisplace :: Algebra t p g s e c => Preskel t g s e ->
+                      Node -> Cause t -> Role t ->
+                      (g, s) -> Instance t e -> Bool -> [PRS t p g s e c]
+augmentAndDisplace k0 n cause role subst inst isState =
+    do
+      prs <- substAndAugment k0 n cause role subst inst isState
+      augDisplace prs ++ skeletonize usePruningWhileSolving prs
+
+-- Apply the substitution and apply augmentation operator.
+substAndAugment :: Algebra t p g s e c => Preskel t g s e ->
+                   Node -> Cause t -> Role t ->
+                   (g, s) -> Instance t e -> Bool -> [PRS t p g s e c]
+substAndAugment k n cause role subst inst isState =
+  do
+      let operation' = AddedStrand (rname role) (height inst) cause
+      prs <- (ksubst (k, k { operation = operation' }, n,
+                           strandids k, emptySubst) subst)
+      aug prs inst isState
+
+-- Apply the augmentation operator by adding an instance and one
+-- ordered pair.
+aug :: Algebra t p g s e c => PRS t p g s e c ->
+       Instance t e -> Bool -> [PRS t p g s e c]
+aug (k0, k, n, phi, hsubst) inst isState =
+  do
+      let insts' = (insts k) ++ [inst]
+      let s = length (insts k)  -- The newly created strand
+      let pair = ((s, height inst - 1), n)
+      let orderings' = pair : orderings k
+      let leadsto' = if isState then pair : leadsto k else leadsto k
+      let decls' = inheritRdecls s inst (decls k)
+      let k' = newPreskel (gen k) (shared k) insts'
+           orderings' leadsto' decls' (operation k) (prob k) (kpriority k) (pov k)
+      k' <- wellFormedPreskel k'
+      return (k0, k', n, phi, hsubst)
+
+-- Add all displacements
+augDisplace :: Algebra t p g s e c => PRS t p g s e c -> [PRS t p g s e c]
+augDisplace prs =
+  do
+      let s = nstrands (skel prs) - 1
+      s' <- nats s
+      augDisplaceStrands prs s s'
+
+-- Try to displace with strand s'
+augDisplaceStrands :: Algebra t p g s e c => PRS t p g s e c ->
+                      Sid -> Sid -> [PRS t p g s e c]
+augDisplaceStrands (k0, k, n, phi, hsubst) s s' =
+  do
+      (s, s', subst) <- us
+      let op = addedToDisplaced (operation k) s s'
+      prs <- ksubst (k0, k { operation = op}, n, phi, hsubst) subst
+      prs <- compress True prs s s'
+      skeletonize usePruningWhileSolving prs
+  where
+    us = unifyStrands k s s'
+
+-- See if two strands unify.  They can be of differing heights.  The
+-- second strand returned may be longer.
+unifyStrands :: Algebra t p g s e c => Preskel t g s e ->
+                Sid -> Sid -> [(Sid, Sid, (g, s))]
+unifyStrands k s s' =
+    let i = strandInst k s
+        i' = strandInst k s' in
+    if height i > height i' then
+        unifyStrands k s' s
+    else
+        do
+          (gen', subst) <- unifyTraces (trace i) (trace i') (gen k, emptySubst)
+          return (s, s', (gen', subst))
+
+-- Unify traces where the first trace is allowed to be shorter than
+-- the second trace.
+unifyTraces :: Algebra t p g s e c => Trace t ->
+               Trace t -> (g, s) -> [(g, s)]
+unifyTraces [] _ subst = [subst]
+unifyTraces (In t : c) (In t' : c') subst =
+    do
+      s <- unify t t' subst
+      unifyTraces c c' s
+unifyTraces (Out t : c) (Out t' : c') subst =
+    do
+      s <- unify t t' subst
+      unifyTraces c c' s
+unifyTraces (Sync t : c) (Sync t' : c') subst =
+    do
+      s <- unifyTran t t' subst
+      unifyTraces c c' s
+unifyTraces _ _ _ = []
+
+addedToDisplaced :: Algebra t p g s e c => Operation t s ->
+                    Int -> Int -> Operation t s
+addedToDisplaced (AddedStrand role height cause) s s' =
+    Displaced s s' role height cause
+addedToDisplaced _ _ _ = error "Strand.addedToDisplaced: Bad operation"
+
+-- Listener Augmentation
+
+addListener :: Algebra t p g s e c => Preskel t g s e -> Node ->
+               Cause t -> t -> [Ans t p g s e c]
+addListener k n cause t =
+    do
+      k' <- wellFormedPreskel k'
+      prs <- skeletonize usePruningWhileSolving
+             (k, k', n, strandids k, emptySubst)
+      ans prs
+    where
+      k' = newPreskel gen' (shared k) insts' orderings' (leadsto k) (decls k)
+           (AddedListener t cause) (prob k) (kpriority k) (pov k)
+      (gen', inst) = mkListener (protocol k) (gen k) t
+      insts' = insts k ++ [inst]
+      pair = ((length (insts k), 1), n)
+      orderings' = pair : orderings k
+
+-- Numeric contraction
+-- MDL: Diffie-Hellman specific
+algebraSolve :: Algebra t p g s e c => Preskel t g s e -> Node ->
+                Cause t -> t -> t -> [Ans t p g s e c]
+algebraSolve k n cause ct t =
+  do
+    subst <- solutions
+    prs <- ksubst (k, k { operation = AlgebraSolved emptySubst cause },
+                         n, strandids k, emptySubst) subst
+    prs' <- skeletonize usePruningWhileSolving prs
+    ans prs'
+  where
+    solutions = unify ct t' (gen', emptySubst)
+    (gen', t') = genericize (gen k) t
+
+-- Homomorphisms
+
+-- Find a substitution that demonstrates the existence of a
+-- homomorphism between the two skeletons using the given
+-- strand mapping function.
+
+homomorphism :: Algebra t p g s e c => Preskel t g s e ->
+                Preskel t g s e -> [Sid] -> [e]
+homomorphism k k' mapping =
+    do
+      (_, env) <- findReplacement k k' mapping
+      case validateEnv k k' mapping env of
+        True -> [env]
+        False -> []
+
+findReplacement :: Algebra t p g s e c => Preskel t g s e ->
+                   Preskel t g s e -> [Sid] -> [(g, e)]
+findReplacement k k' mapping =
+    foldM (matchStrand k k' mapping) (gen k', emptyEnv) (strandids k)
+
+matchStrand :: Algebra t p g s e c => Preskel t g s e ->
+               Preskel t g s e -> [Sid] -> (g, e) -> Sid -> [(g, e)]
+matchStrand k k' mapping env s =
+    matchTraces (trace (strandInst k s)) (trace (strandInst k' s')) env
+    where
+      s' = mapping !! s
+
+validateEnv :: Algebra t p g s e c => Preskel t g s e ->
+               Preskel t g s e -> [Sid] -> e -> Bool
+validateEnv k k' mapping env =
+  validateDeclEnv k k' mapping env &&
+  all (flip elem (tc k')) (permuteOrderings mapping (orderings k))
+
+-- Given a realized skeleton k, generate candidates for minimization.
+-- A candidate is a preskeleton and a strand mapping from the
+-- candidate to k.  The preskeleton need not be well formed, as that
+-- test is applied elsewhere.
+
+type Candidate t p g s e c = (Preskel t g s e, [Sid])
+
+addIdentity :: Algebra t p g s e c => Preskel t g s e ->
+               Candidate t p g s e c
+addIdentity k = (k, strandids k)
+
+separateVariablesLimit :: Int
+separateVariablesLimit = 1024
+
+generalize :: Algebra t p g s e c => Preskel t g s e ->
+              [Candidate t p g s e c]
+generalize k = deleteNodes k ++
+               weakenOrderings k ++
+               forgetAssumption k ++
+               take separateVariablesLimit (separateVariables k)
+
+-- Node deletion
+
+{-
+
+delete node n in k
+
+1. if (s, 0) part of prob return Nothing
+2. if not initial node, truncate instance of node else delete instance
+3. weaken ordering when filtering it (see shortenOrdering)
+4. drop nons that aren't mentioned anywhere
+5. drop uniques that aren't carried anywhere
+6. update prob upon instance deletion
+-}
+
+deleteNodes :: Algebra t p g s e c => Preskel t g s e ->
+               [Candidate t p g s e c]
+deleteNodes k =
+    do
+      strand <- strands k
+      node <- nodes strand
+      deleteNode k node
+
+deleteNode :: Algebra t p g s e c => Preskel t g s e ->
+              Vertex t e -> [(Preskel t g s e, [Sid])]
+deleteNode k n
+    | p == 0 && elem s (prob k) = []
+    | p == 0 =
+        do
+          let mapping = deleteNth s (strandids k)
+          let k' = deleteStrand k (gen k) s (s, p)
+          return (k', mapping)
+    | otherwise =
+        do
+          let mapping = strandids k
+          let i = inst (strand n)
+          (gen', i') <- bldInstance (role i) (take p (trace i)) (gen k)
+          let k' = deleteNodeRest k gen' (s, p) (replaceNth i' s (insts k))
+                   (shortenOrderings (s, p) (tc k)) (shortenOrderings (s, p) (leadsto k))
+                   (prob k)
+          return (k', mapping)
+    where
+      p = pos n
+      s = sid (strand n)
+
+-- Update orderings when a strand is eliminated (p == 0)
+deleteOrderings :: Sid -> [Pair] -> [Pair]
+deleteOrderings s ps =
+    do
+      p <- ps
+      deleteOrdering p
+    where
+      deleteOrdering (n0@(s0, _), n1@(s1, _))
+          | s == s0 || s == s1 = []
+          | otherwise = [(adjust n0, adjust n1)]
+      adjust n@(s', i')
+          | s' > s = (s' - 1, i')
+          | otherwise = n
+
+-- Update orderings when a strand is shortened (p > 0)
+shortenOrderings :: Node -> [Pair] -> [Pair]
+shortenOrderings (s, i) ps =
+    do
+      pair <- ps
+      shortenOrdering pair
+    where
+      shortenOrdering p@((s0, i0), (s1, i1))
+          | s == s0 && i <= i0 = []
+          | s == s1 && i <= i1 = []
+          | otherwise = [p]
+
+strandNotInSkel :: Sid -> Node -> Bool
+strandNotInSkel s (s', _) = s /= s'
+
+deleteStrand :: Algebra t p g s e c => Preskel t g s e ->
+                  g -> Sid -> Node -> Preskel t g s e
+deleteStrand k gen s n =
+    newPreskel gen (shared k) insts'
+    (deleteOrderings s (tc k))
+    (deleteOrderings s (leadsto k)) -- is this the right thing?
+    decls'
+    (Generalized (Deleted n))
+    (updatePerm s s (prob k))
+    (kpriority k)
+    (pov k)
+  where
+    insts' = deleteNth s (insts k)
+    -- Drop nons that aren't mentioned anywhere
+    mapping = updatePerm s (-1) (strandids k)
+    decls0 = declsFilterValid (iterms (insts k)) (strandNotInSkel s) (decls k)
+    decls' = declsFilterValid terms (const True)
+             (declsMapStrands mapping decls0)
+    terms = iterms insts'
+
+nodeInSkel :: Algebra t p g s e c => Preskel t g s e -> Node -> Bool
+nodeInSkel k (s, i) =
+  s >= 0 && s < nstrands k && i >= 0 &&
+  i < height (strandInst k s)
+
+deleteNodeRest :: Algebra t p g s e c => Preskel t g s e ->
+                  g -> Node -> [Instance t e] -> [Pair] -> [Pair] ->
+                  [Sid] -> Preskel t g s e
+deleteNodeRest k gen n insts' orderings leadsto prob =
+    newPreskel gen (shared k) insts' orderings leadsto decls'
+                   (Generalized (Deleted n)) prob (kpriority k) (pov k)
+    where
+      -- Drop nons that aren't mentioned anywhere
+      decls' = declsFilterValid terms (nodeInSkel k) (decls k)
+      terms = iterms insts'
+
+-- Node ordering weakening
+
+-- To weaken, create a candidate for each element in the current
+-- ordering, which is already the result of a transitive reduction.
+-- Weaken by computing the transitive closure of the ordering, and
+-- then remove the selected element from the current ordering.  After
+-- computing the transitive closure, filter out the edges that are not
+-- well ordered, i.e. originate at a reception node or terminate at a
+-- transmission node.  Also, filter out edges that link nodes in the
+-- same strand.  The preskeleton constructor function performs a
+-- transitive reduction on the generated ordering.
+
+weakenOrderings :: Algebra t p g s e c => Preskel t g s e ->
+                   [Candidate t p g s e c]
+weakenOrderings k =
+    map (weakenOrdering k) ((orderings k) L.\\ (leadsto k))
+
+weakenOrdering :: Algebra t p g s e c => Preskel t g s e ->
+                  Pair -> Candidate t p g s e c
+weakenOrdering k p =
+    weaken k p (L.delete p (tc k))
+
+weaken :: Algebra t p g s e c => Preskel t g s e ->
+          Pair -> [Pair] -> Candidate t p g s e c
+weaken k p orderings =
+    addIdentity k'
+    where
+      k' = newPreskel (gen k) (shared k) (insts k)
+           orderings (leadsto k) (decls k)
+           (Generalized (Weakened p)) (prob k) (kpriority k) (pov k)
+
+-- Origination assumption forgetting
+
+-- Delete each non-originating term that is not specified by a
+-- role.  Do the same for each uniquely-originating term.
+
+forgetAssumption :: Algebra t p g s e c => Preskel t g s e ->
+                    [Candidate t p g s e c]
+forgetAssumption k =
+    forgetSomeTerm k
+
+-- Variable separation
+
+-- A location is a strand, a role variable, and a position in the term
+-- associated with the role variable.
+
+-- step one: extract places
+--
+-- for each maplet in each environment in each strand
+--   for each variable V in the range of the maplet
+--     let P be the places at which V occurs
+--     associate V with the location described by each element in P
+--
+-- step two: generate preskeletons
+--
+-- for each variable V in the skeleton K
+--  let V' be a clone of V
+--  let L be the set of locations associated with V from above
+--  for each subset L' of L
+--    for each instance I in K
+--      update the environment of I by replacing V' at the locations
+--      given by L' that refer to I, and use the modified environment
+--      to update the instance
+--    let K' be the result of updating instances in K as above
+--    if V occurs in non, add terms with V replaced by V' to
+--      the non's of K'
+--    if V occurs in unique, add terms with V replaced by V'
+--      to the unique's of K'
+--    add K' to the list of generated preskeletons
+
+separateVariables :: Algebra t p g s e c => Preskel t g s e ->
+                     [Candidate t p g s e c]
+separateVariables k | M.isJust (pov k) =
+    do
+      let pk = M.fromJust (pov k)
+      v <- kvars k
+      case isNum v of
+        True -> fail "separation of numeric values not supported"
+        False -> separateVariable k pk
+          (extractPlaces pk)
+          (extractPlaces k) v
+separateVariables _ | otherwise = []
+
+-- A location is a strand, a role variable, and a position in the term
+-- associated with the role variable.
+
+type Location t p g s e c = (Sid, t, p)
+
+-- A POV location is a location with the map from the POV.  It
+-- consists of a POV variable, list of locations, and a position in
+-- the term assoctiated with the POV variable.
+
+type PovLocation t p g s e c = (t, [Location t p g s e c], p)
+
+-- Returns a list of pairs.  For each occurrence of a preskeleton
+-- variable in every instance, there is a pair where the first element
+-- is the variable, and the second as the location at which it occurs.
+extractPlaces :: Algebra t p g s e c => Preskel t g s e ->
+                 [(t, Location t p g s e c)]
+extractPlaces k =
+    [ (var, (sid s, v, p)) |
+      s <- strands k,
+      (v, t) <- instAssocs (inst s),
+      var <- foldVars (flip adjoin) [] t,
+      p <- places var t ]
+
+instAssocs :: Algebra t p g s e c => Instance t e -> [(t, t)]
+instAssocs i =
+    reify (rvars (role i)) (env i)
+
+-- For each variable, generate candidates by generating a fresh
+-- variable for subsets of the locations associated with the variable.
+separateVariable :: Algebra t p g s e c => Preskel t g s e ->
+                    Preskel t g s e ->
+                    [(t, Location t p g s e c)] ->
+                    [(t, Location t p g s e c)] -> t ->
+                    [Candidate t p g s e c]
+separateVariable k pk _ _ _
+    | null (homomorphism pk k (prob k)) = [] -- HACK
+separateVariable k pk povps ps v =
+    sepVar rolelocs' povlocs
+    where
+      povhom = head (homomorphism pk k (prob k))  -- For completeness, should
+      rolelocs = locsFor ps v                      -- use all homs.
+      povlocs = povLocsFor k povps rolelocs
+      povrolelocs = concatMap (\(_,x,_)->x) povlocs
+      rolelocs' = rolelocs L.\\ povrolelocs
+      sepVar [] [] = []
+      sepVar locs plocs =
+          do
+            comblocs <- combparts locs plocs
+            changeLocations k pk gen' v' comblocs povhom
+      parts x = map (map (x !!)) (subsets (length x))
+      combparts x y = [(xs, ys) | xs <- parts x,
+                                  ys <- parts y,
+                                  let n = length xs + length ys,
+                                  n /= 0 && n /= length x + length y]
+      (gen', v') = clone (gen k) v
+
+-- Extract the locations for a given variable
+locsFor :: Algebra t p g s e c => [(t, Location t p g s e c)] ->
+           t -> [Location t p g s e c]
+locsFor ps t =
+    map snd (filter (\(t', _) -> t == t') (reverse ps)) -- Why reverse?
+
+-- On input k e povps locs v, produces a list of pairs
+-- (t, tps) where t is a pov variable and tps is a non-empty list of
+-- locations in locs such that if (sid, t', p) is in tps, then sid is
+-- in (prob k), and (t, (sid, t', p')) is in povps where p' is a prefix
+-- of p.
+povLocsFor :: Algebra t p g s e c => Preskel t g s e ->
+              [(t, Location t p g s e c)] -> [Location t p g s e c] ->
+              [PovLocation t p g s e c]
+povLocsFor k povps locs =
+   [ (t, tps, p) |
+     povp <- map (probMapPOVps k) povps,
+     Just p <- map (f povp) locs,
+     let (t, _) = povp,
+     let tps = [ loc |
+                 loc <- locs,
+                 M.isJust $ f povp loc ] ]
+   where
+     f (_, (sid', t', p')) (sid, t, p)  =
+       if sid == sid' && t == t' then
+         placeStripPrefix p' p
+       else
+         Nothing
+
+matchAlways :: Algebra t p g s e c => String -> t -> t -> (g, e) -> (g, e)
+matchAlways note t t' env =
+    case match t t' env of
+      e : _ -> e
+      [] -> error ("Strand.matchAlways: bad match " ++ note)
+
+probMapPOVps :: Algebra t p g s e c => Preskel t g s e ->
+                (t, Location t p g s e c) -> (t, Location t p g s e c)
+probMapPOVps k (t, loc) =
+  (t, f loc)
+  where
+    f (s, t, p) | length (prob k) <= s =
+      error ("Strand.probMapPOVps: bad s " ++ show s)
+                | otherwise = (prob k !! s, t, p)
+
+-- Change the given locations and create the resulting preskeleton
+changeLocations :: Algebra t p g s e c => Preskel t g s e ->
+                   Preskel t g s e -> g -> t ->
+                   ([Location t p g s e c], [PovLocation t p g s e c]) ->
+                   e -> [Candidate t p g s e c]
+changeLocations k pk gen t (rlocs, povlocs) pove =
+    [addIdentity ks]
+    where
+      ks = f (splitDecls k pk gen' insts' t povlocs pove)
+      locs = rlocs ++ concatMap (\(_,x,_)->x) povlocs
+      f (gen'', newdecl) =
+        newPreskel gen'' (shared k) insts' (orderings k) (leadsto k)
+        newdecl (Generalized (Separated t)) (prob k) (kpriority k) (pov k)
+      (gen', insts') = changeStrands locs t gen (strands k)
+
+-- For variable separation
+-- Exported
+splitDecls :: Algebra t p g s e c => Preskel t g s e ->
+              Preskel t g s e -> g ->
+              [Instance t e] -> t -> [PovLocation t p g s e c] ->
+              e -> (g, SkelDeclarations t)
+splitDecls k pk gen insts copy povlocs pove =
+    (gen', foldl addInstOrigs d (zip (nats (length insts)) insts))
+    where
+      -- povdecls: calculate from pov
+      d = declsMap (instantiate pove') (nodeMap (prob k)) (decls pk)
+      (gen', pove') = foldl f (gen, emptyEnv)
+             (map (changePovMaplet povlocs copy) pova)
+      f env (v, t) = matchAll v t env
+      pova = reify (kvars pk) pove
+      matchAll v' t' env' =
+        case match v' t' env' of
+          e : _ -> e
+          [] -> error ("Strand.matchAlways: bad match " ++ show v' ++ "\n"
+                       ++ show t' ++ "\n" ++ show (length pova) ++ "\n\n" ++
+                       show pova ++ "\n\n" ++
+                       show (map (changePovMaplet povlocs copy) pova))
+
+changeStrands :: Algebra t p g s e c => [Location t p g s e c] -> t ->
+                 g -> [Strand t e] -> (g, [Instance t e])
+changeStrands locs copy gen strands =
+    case foldMapM (changeStrand locs copy) gen strands of
+      i : _ -> i
+      [] -> error "Strand.changeStrands: bad strand build"
+
+-- Create an new environment incorporating changes, and from that,
+-- create the new strand.
+changeStrand :: Algebra t p g s e c => [Location t p g s e c] ->
+                t -> g -> Strand t e -> [(g, Instance t e)]
+changeStrand locs copy gen s =
+    bldInstance (role i) trace'  gen'
+    where
+      i = inst s
+      (gen', env') = foldl f (gen, emptyEnv)
+             (map (changeMaplet locs copy (sid s)) (instAssocs i))
+      f env (v, t) = matchAlways "in changeStrand" v t env
+      trace' = map (evtMap $ instantiate env') trace
+      trace = take (height i) (rtrace (role i))
+
+-- Change a maplet
+changeMaplet :: Algebra t p g s e c => [Location t p g s e c] ->
+                t -> Sid -> (t, t) -> (t, t)
+changeMaplet [] _ _ maplet = maplet
+changeMaplet ((s', v', p) : locs) copy s (v, t) =
+    changeMaplet locs copy s (v, t')
+    where
+      t' = if s' == s && v' == v then replace copy p t else t
+
+-- Change a maplet
+changePovMaplet :: Algebra t p g s e c => [PovLocation t p g s e c] ->
+                t -> (t, t) -> (t, t)
+changePovMaplet [] _ maplet = maplet
+changePovMaplet ((v', _, p) : locs) copy (v, t) =
+    changePovMaplet locs copy (v, t')
+    where
+      t' = if v' == v then replace copy p t else t
+
+-- Return the set of subsets of natural numbers less than n
+subsets :: Int -> [[Int]]
+subsets n
+    | n < 0 = error $ "Utilities.subsets: Bad argument " ++ show n
+    | n == 0 = []
+    | otherwise =
+        [n - 1] : subset ++ map (n - 1 :) subset
+        where
+          subset = subsets (n - 1)
+
+-- Collapse a shape by unifying strands.
+
+collapse :: Algebra t p g s e c => Preskel t g s e ->
+            [Preskel t g s e]
+collapse k =
+    [k' | s <- strandids k, s' <- nats s,
+          k' <- collapseStrands k s s']
+
+collapseStrands :: Algebra t p g s e c => Preskel t g s e ->
+                   Sid -> Sid -> [Preskel t g s e]
+collapseStrands k s s' =
+    do
+      (s, s', subst) <- unifyStrands k s s'
+      prs <- ksubst (k, k { operation = Collapsed s s' },
+                           (0, 0), strandids k, emptySubst) subst
+      prs <- compress True prs s s'
+      prs <- skeletonize usePruningDuringCollapsing prs
+      return $ skel prs
+
+------------------------------------------------------------------
+
+-------------- Declarations and Constraints Section --------------
+
+------------------------------------------------------------------
+
+data ConstInfo t = ConstInfo
+     {
+       dkorig :: ![(t, [Node])],  -- This is an association list with a
+                                  -- pair for each element of kunique.
+                                  -- The value associated with a term
+                                  -- is a list of the nodes at which it
+                                  -- originates--the term's provenance.
+       dkugen :: ![(t, [Node])] }  -- As korig but for uniq-gen terms.
+     deriving Show
+
+-- Exported
+knon :: Algebra t p g s e c => Preskel t g s e -> [t]
+knon = dknon . decls
+
+-- Exported
+kpnon :: Algebra t p g s e c => Preskel t g s e -> [t]
+kpnon = dkpnon . decls
+
+-- Exported
+kunique :: Algebra t p g s e c => Preskel t g s e -> [t]
+kunique = dkunique . decls
+
+-- Exported
+korig :: Algebra t p g s e c => Preskel t g s e -> [(t, [Node])]
+korig = dkorig . cInfo
+
+-- Exported
+kugen :: Algebra t p g s e c => Preskel t g s e -> [(t, [Node])]
+kugen = dkugen . cInfo
+
+-- Exported
+kuniqgen :: Algebra t p g s e c => Preskel t g s e -> [t]
+kuniqgen k = map head $ filter (\ts -> not $ null ts) $ map dterms $ tagDecls "uniq-gen" $ decls k
+
+{-- Exported
+kuniqexp :: Algebra t p g s e c => Preskel t g s e -> [t]
+kuniqexp k = map head $ filter (\ts -> not $ null ts) $ map dterms $ tagDecls "uniq-exp" $ decls k
+--}
+
+-- Exported
+nsdecls :: (Algebra t p g s e c, Loc l) => Declarations t l -> [Int]
+nsdecls decls =
+  [length (dknon decls), length (dkpnon decls), length (dkunique decls)]
+
+-- Exported
+-- JDR: duplicate code with mkPreskel
+forgetSomeTerm :: Algebra t p g s e c => Preskel t g s e ->
+                  [Candidate t p g s e c]
+forgetSomeTerm k =
+  [ addIdentity (k { decls = d, operation = Generalized (Forgot t) }) |
+      (t, d) <- forgetSomeDecls (decls k),
+      let insts' = insts k,
+      let rd = foldl addInstOrigs (declsUnion [])
+               (zip (nats (length insts')) insts'),
+      validateDeclMap rd d id emptyEnv ]
+
+-- Returns that atoms that cannot be guess when determining if a
+-- term is derivable from some other terms, and the atoms that
+-- uniquely originate in this skeleton.
+avoid :: Algebra t p g s e c => Preskel t g s e -> Set t
+avoid k =
+    avoidTerms (decls k)
+
+{-- uniqOrig :: Algebra t p g s e c => Preskel t g s e -> [t]
+uniqOrig k =
+    do
+      (t, [_]) <- reverse (korig k)
+      return t --}
+
+-- A preskeleton is well formed if the ordering relation is acyclic,
+-- each atom declared to be uniquely-originating is carried in some
+-- preskeleton term, and every variable that occurs in each base term
+-- declared to be non-originating or pen-non-originating occurs in
+-- some preskeleton term, and the atom must never be carried by any
+-- term, and every uniquely originating role term mapped by an
+-- instance is mapped to a term that originates on the instance's
+-- strand.
+
+-- Exported
+preskelWellFormed :: Algebra t p g s e c => Preskel t g s e -> Bool
+preskelWellFormed k =
+    varSubset (knon k) terms &&
+    varSubset (kpnon k) terms &&
+    all nonCheck (knon k) &&
+    all uniqueCheck (kunique k) &&
+    origNonNullCheck k && ugenNonNullCheck k &&
+    wellOrdered k && acyclicOrder k &&
+    roleOrigCheck k && fst (declCheck (decls k))
+    where
+      terms = kterms k
+      mesgterms = kmesgterms k
+      nonCheck t = all (not . carriedBy t) mesgterms
+      uniqueCheck t = any (carriedBy t) mesgterms
+      origNonNullCheck k = (all (\(_, ns) -> not (null ns)) (korig k))
+      ugenNonNullCheck k = (all (\(_, ns) -> not (null ns))
+                            (filter (\(t, _) -> not (isNum t)) (kugen k)))
+
+-- Do notation friendly preskeleton well formed check.
+wellFormedPreskel :: (Monad m, Algebra t p g s e c) =>
+                     Preskel t g s e -> m (Preskel t g s e)
+wellFormedPreskel k
+    | preskelWellFormed k = return k
+    | otherwise = fail "preskeleton not well formed"
+
+-- Exported
+-- A version of preskelWellFormed that explains why a preskeleton is
+-- not well formed.
+verbosePreskelWellFormed :: (Monad m, Algebra t p g s e c) =>
+                            Preskel t g s e -> m ()
+verbosePreskelWellFormed k =
+    do
+      failwith "a variable in non-orig is not in some trace"
+                   $ varSubset (knon k) terms
+      failwith "a variable in pen-non-orig is not in some trace"
+                   $ varSubset (kpnon k) terms
+      mapM_ nonCheck $ knon k
+      mapM_ uniqueCheck $ kunique k
+      origNonNullCheck k
+      uniqgenNonNullCheck k
+      failwith "ordered pairs not well formed" $ wellOrdered k
+      failwith "cycle found in ordered pairs" $ acyclicOrder k
+      failwith "an inherited unique doesn't originate in its strand"
+                   $ roleOrigCheck k
+      let chk = declCheck $ decls k
+      failwith (snd chk) (fst chk)
+    where
+      terms = kterms k
+      mesgterms = kmesgterms k
+      nonCheck t =
+          failwith (showString "non-orig " $ showst t " carried")
+                       $ all (not . carriedBy t) mesgterms
+      uniqueCheck t =
+          failwith (showString "uniq-orig " $ showst t " not carried")
+                       $ any (carriedBy t) mesgterms
+      origNonNullCheck k =
+          let ts = filter (\(_, ns) -> null ns) (korig k) in
+          failwith (showString "uniq-orig " $
+                    showst (fst $ head ts) " does not originate")
+          (null ts)
+      uniqgenNonNullCheck k =
+          let ts = filter (\(_, ns) -> null ns)
+                   (filter (\(t, _) -> not (isNum t)) (kugen k)) in
+          failwith (showString "uniq-gen " $
+                    showst (fst $ head ts) " does not generate")
+          (null ts)
+
+-- Do notation friendly preskeleton well formed check.
+reducedWellFormed :: (Monad m, Algebra t p g s e c) =>
+                     Preskel t g s e -> m ()
+reducedWellFormed k
+  | reducedWellOrdered k = return ()
+  | otherwise = fail "reduced preskeleton not well formed"
+
+-- A transition or an observer node should have at most one transition
+-- node immediately after it.
+noStateSplit :: (Monad m, Algebra t p g s e c) =>
+                     Preskel t g s e -> m ()
+noStateSplit k
+  | loop (leadsto k) S.empty = return ()
+  | otherwise = fail "reduced preskeleton has a state split"
+  where
+    loop [] _ = True
+    loop ((n0, (s, i)) : es) ns =
+      case (trace (insts k !! s) !! i) of
+        Sync (Tran (Just _, Just _, _)) ->
+          S.notMember n0 ns && loop es (S.insert n0 ns)
+        _ -> loop es ns
+
+---------------------------------------
+-- Constraints
+---------------------------------------
+
+-- Ensure each role unique origination assumption mapped by an
+-- instance originates in the instance's strand.
+roleOrigCheck :: Algebra t p g s e c => Preskel t g s e -> Bool
+roleOrigCheck k =
+    all declOrigCheck (dkuniqFull $ decls k)
+    && all declUGenCheck (filter nonNum $ (dkugenFull $ decls k))
+    where
+      declOrigCheck (u, n) =
+         case lookup u (korig k) of
+           Nothing -> error "Strand.roleOrigCheck: u not found in korig"
+           Just ns -> any (==n) ns
+      declUGenCheck (u, Just n) =
+         case lookup u (kugen k) of
+           Nothing -> error "Strand.roleUGenCheck: u not found in kugen"
+           Just ns -> any (==n) ns
+      declUGenCheck (_, Nothing) = True
+                 --error "Strand.roleUGenCheck: u generation point not found in kugen"
+      nonNum (u, _) = not (isNum u)
+
+showst :: Algebra t p g s e c => t -> ShowS
+showst t =
+    shows $ displayTerm (addToContext emptyContext [t]) t
+
+-- This is the starting point of the Preskeleton Reduction System
+-- This code is structured a bit strangely, in order to not rewrite
+-- the existing PRS code.  "coreAlg" is the rectification algorithm
+-- that might or might not use deorigination, pruning, thinning, etc.
+-- "rectifiableConstraintCheck" returns True on a PRS that already
+-- meets all rectifiable constraints and false otherwise.  "rectify"
+-- takes a PRS and outputs a [PRS] that rectifies failed rectifiable
+-- constraints.
+--
+-- The idea is to run the coreAlg first.  Any PRS'es in the result
+-- are left alone if the rectifiable constraint check passes, and
+-- replaced with the result of rectify-and-then-skeletonize otherwise.
+skeletonize :: Algebra t p g s e c => Bool -> PRS t p g s e c ->
+               [PRS t p g s e c]
+skeletonize prune prs =
+--          zfun (\ans -> (length ans, map (rname . role) (insts $ skel prs), hasMultipleOrig prs)) $
+            skeletonize2 prune 5 prs
+
+skeletonize2 :: Algebra t p g s e c => Bool -> Int -> PRS t p g s e c ->
+               [PRS t p g s e c]
+skeletonize2 _ 0 prs = [prs]
+skeletonize2 prune iter prs =
+  concatMap maybeRectify coreResult
+  where
+      coreResult = concatMap coreAlg [prs]
+      coreAlg
+        | useDeOrigination = hull prune
+        | otherwise = normalAlg
+      normalAlg prs | hasMultipleOrig prs = []
+                    | otherwise = (enrich prune prs)
+      maybeRectify prs
+                | rectifiableConstraintCheck (skel prs) = [prs]
+                | otherwise = concatMap (skeletonize2 prune (iter-1)) (rectify prs)
+
+-- rectifiableConstraintCheck: outputs True if all rectifiable
+-- constraints are true of the input skeleton.
+rectifiableConstraintCheck :: Algebra t p g s e c => Preskel t g s e
+                              -> Bool
+rectifiableConstraintCheck k
+  | not (null (rectUnifications k)) = False
+  | not (indicatorConstraintsCheck k) = False
+  | otherwise = True
+
+-- indicatorConstraintsCheck: outputs True iff all indicator constraints are
+-- currently met.
+indicatorConstraintsCheck :: Algebra t p g s e c => Preskel t g s e -> Bool
+indicatorConstraintsCheck k =
+  (indZeroCheck && indZeroInCheck)
+  where
+    indZeroCheck = all (\(t,v) -> t == v || indicator t v == Just 0) (pairs indZeroTerms avoidExpVars)
+    indZeroTerms = map head (map dterms $ tagDecls "ind-zero" (decls k))
+    avoidExpVars = filter isNum (S.toList $ avoid k)
+    indZeroInCheck = all (\(t,v) -> indicator t v == Just 0) indZeroInPairs
+    indZeroInPairs = map (\ts -> (ts !! 0, ts !! 1)) (map dterms $ tagDecls "ind-zero-in" (decls k))
+    pairs x y = [(a,b)|a <- x, b <- y]
+
+-- rectify: rectify rectifiable constraints.
+rectify :: Algebra t p g s e c => PRS t p g s e c -> [PRS t p g s e c]
+rectify prs =
+   concatMap rectifyIndicatorConstraints $
+   doUnifs prs
+   where
+     doUnifs prs
+       | null $ unifs prs = [prs]
+       | otherwise = concatMap (ksubst prs) (rectUnifs (unifs prs) (gen (skel prs), emptySubst))
+     unifs prs = rectUnifications (skel prs)
+     rectUnifs [] sigma = [sigma]
+     rectUnifs ((t1,t2):rest) sigma =
+       do
+         s <- unify t1 t2 sigma
+         rectUnifs rest s
+
+-- sklyynch: cancel a numeric variable from points earlier than its
+-- generation point.
+rectifyIndicatorConstraints :: Algebra t p g s e c => PRS t p g s e c -> [PRS t p g s e c]
+rectifyIndicatorConstraints prs
+  | indicatorConstraintsCheck (skel prs) = [prs]
+  | otherwise = [prs'|ge <- gefix,
+                      prs' <- recurse1 (ind0Problems (skel prs)) prs ge]
+  where
+    -- Rectify ind-zero constraints until none are left, then rectify
+    -- ind-zero-in constraints.
+    recurse1 [] prs ge = recurse2 (ind0_inProblems (skel prs)) prs ge
+    recurse1 (t:ts) prs ge =
+      [prs'|(g,e) <- zeroIndicator t ge (filter (/= t) $ resExps (skel prs)),
+            sprs <- ksubst prs (g, substitution e),
+            prs' <- recurse1 (map (substitute (substitution e)) ts) sprs (g,e)]
+
+    -- Rectify ind-zero-in constraints until none are left
+    recurse2 [] prs _ = [prs]
+    recurse2 (tv:tvs) prs ge = [prs'|(g,e) <- zeroIndicatorIn (tv !! 1) (tv !! 0) ge,
+            sprs <- ksubst prs (g,substitution e),
+            prs' <- recurse2 (map (\tv -> map (substitute (substitution e)) tv) tvs) sprs (g,e)]
+
+    -- Include restricted variables
+    gefix = matchMany (resExps (skel prs)) (resExps (skel prs)) (gen (skel prs), emptyEnv)
+    resExps k = (filter isNum $ S.toList (avoid k))
+
+    ind0Problems k = filter (\t -> ind0ProblemCheck t (resExps k))
+                  (map head $ map dterms $ tagDecls "ind-zero" (decls k))
+    ind0_inProblems k = filter (\ts -> indicator (ts !! 1) (ts !! 0) /= Just 0)
+                  (map dterms $ tagDecls "ind-zero-in" (decls k))
+    ind0ProblemCheck t av = any (\v -> indicator t v /= Just 0) (filter (/= t) av)
+
+-- rectUnifications: list required, non-trivial unification for
+-- rectifying k
+rectUnifications :: Algebra t p g s e c => Preskel t g s e -> [(t,t)]
+rectUnifications k = fnofUnifications k
+
+-- fnofUnifications: list unifications required by fnof constraint
+fnofUnifications :: Algebra t p g s e c => Preskel t g s e -> [(t,t)]
+fnofUnifications k =
+   reducePairs [(head $ dterms ti1, head $ dterms ti2) |
+          ti1 <- fnofDecls, ti2 <- fnofDecls, daux ti1 == daux ti2,
+          (head $ dterms ti1) /= (head $ dterms ti2),
+          ((dterms ti1) !! 1) == ((dterms ti2) !! 1)]
+   where
+     -- Relies every fn-of declaration including at least 2 entries in dterms.
+     fnofDecls = filter (\d -> (length $ dterms d) >= 2) $ tagDecls "fn-of" (decls k)
+     -- removes duplicates and flips
+     reducePairs [] = []
+     reducePairs ((a,b):rest) = ((a,b):(reducePairs (filter (\ (c,d) ->
+                              ((c,d) /= (a,b)) && ((c,d) /= (b,a))) rest)))
+
+-- Determine if a given PRS has a multiple origination of a
+-- non-numeric fresh value.
+hasMultipleOrig :: Algebra t p g s e c => PRS t p g s e c -> Bool
+hasMultipleOrig prs =
+  any (\(_, l) -> length l > 1) (korig (skel prs)) ||
+  any (\(_, l) -> length l > 1) (kugen (skel prs))
+
+checkOrigs :: Algebra t p g s e c => Gist t g ->
+              Gist t g -> (g, e) -> [Sid] -> Bool
+checkOrigs g g' env perm =
+  declCheckOrigs (declsMapLocations (permuteNode perm) $ gdecls g) (gdecls g') env
+
+-- Exported
+declsOrig :: (Algebra t p g s e c, Loc l) => [Strand t e] ->
+             Declarations t l -> ConstInfo t
+declsOrig strands d =
+  ConstInfo { dkorig = map (originationNodes strands) (dkunique d),
+              dkugen = map (generationNodes strands) (dkuniqgen d)}
+
+-- Exported
+declsMapStrands :: Algebra t p g s e c => [Sid] ->
+                   SkelDeclarations t ->
+                   SkelDeclarations t
+declsMapStrands mapping d = declsMapLocations (nodeMap mapping) d
+
+-- Exported
+inheritRdecls :: Algebra t p g s e c => Sid -> Instance t e ->
+                 SkelDeclarations t -> SkelDeclarations t
+inheritRdecls s inst d =
+  declsUnion [inherit s inst (ridecls (role inst)), d]
+
+inherit :: Algebra t p g s e c => Sid -> Instance t e ->
+           [(RoleDeclarations t, Int)] ->
+           SkelDeclarations t
+inherit s i ridecls =
+    declsUnion (map g $ filter f ridecls)
+    where
+      f (_, pos) = pos < height i
+      g = declsMap (instantiate (env i)) h . fst
+      h j = (s, j)
+
+declsMap :: (Algebra t p g s e c, Loc l, Loc l') => (t->t) -> (l->l') ->
+            Declarations t l -> Declarations t l'
+declsMap tf lf = declsMapLocations lf . declsMapTerms tf
+
+-- Order Enrichment
+
+-- Adds orderings so that a skeleton respects origination.
+
+enrich :: Algebra t p g s e c => Bool -> PRS t p g s e c ->
+          [PRS t p g s e c]
+enrich prune (k0, k, n, phi, hsubst) =
+    if length o == length (orderings k) then
+        maybePrune prune (k0, k, n, phi, hsubst) -- Nothing to add
+    else
+        do
+          k'' <- wellFormedPreskel k'
+          maybePrune prune (k0, k'', n, phi, hsubst)
+    where
+      o = addOrderings k
+      k' = newPreskel
+                  (gen k)
+                  (shared k)
+                  (insts k)
+                  o
+                  (leadsto k)
+                  (decls k)
+                  (operation k)
+                  (prob k)
+                  (kpriority k)
+                  (pov k)
+
+origNode :: Algebra t p g s e c => t -> [(t,[Node])] -> Maybe Node
+origNode t origlist =
+    case lookup t origlist of
+      Nothing -> Nothing
+      Just [] -> Nothing
+      Just [n] -> Just n
+      Just _ -> error "Strand.origNode: not a hulled skeleton"
+
+addOrderings :: Algebra t p g s e c => Preskel t g s e ->
+                [Pair]
+addOrderings k =
+  addSyncOrderings (map foo (leadsto k)) orderings''
+  where
+    orderings' = foldl (addUniqOrigOrderings k) (orderings k) (kunique k)
+    orderings'' = foldl (addUniqGenOrderings k) orderings' (kuniqgen k)
+    foo (p1, p2) = ((p1,p2), (f p1, f p2))
+    f (s,n) = (trace (insts k !! s) !! n)
+
+addUniqOrigOrderings :: Algebra t p g s e c => Preskel t g s e ->
+                [Pair] -> t -> [Pair]
+addUniqOrigOrderings k orderings t =
+  case origNode t (korig k) of
+      Nothing -> orderings
+      Just n@(s, _) ->
+          foldl f orderings (L.delete s (strandids k))
+          where
+            f orderings s =
+                case gainedPos t (trace (strandInst k s)) of
+                  Nothing -> orderings
+                  Just pos -> adjoin (n, (s, pos)) orderings
+
+addUniqGenOrderings :: Algebra t p g s e c => Preskel t g s e ->
+                [Pair] -> t -> [Pair]
+addUniqGenOrderings k orderings t =
+  case origNode t (kugen k) of
+      Nothing -> orderings
+      Just n@(s, _) ->
+          foldl f orderings (L.delete s (strandids k))
+          where
+            f orderings s =
+                case genGainedPos t (trace (strandInst k s)) of
+                  Nothing -> orderings
+                  Just pos -> adjoin (n, (s, pos)) orderings
+
+-- Add implied edges from an observer
+addSyncOrderings :: Algebra t p g s e c => [(Pair, (Event t,Event t))] -> [Pair] -> [Pair]
+addSyncOrderings es orderings =
+  foldl f orderings es
+  where
+    f acc (p, (Sync t0, Sync t1)) = -- t0 transforms, t1 observes
+      if (path t0 && observer t1) then
+        -- Need to look for a pair (p', (e1, e2)) in xform s.t. e1 = Sync t0
+            if (null (h t0 xform)) then acc else ((snd p, snd (fst ((h t0 xform) !! 0))) : acc)
+                                                 else acc
+    f acc _ = acc
+    xform = filter g es         -- Edges that transform
+    g (_, (Sync t@(Tran (_, Just _, _)), Sync t'@(Tran (Just _, Just _, _)))) =
+      next t == now t'
+    g _ = False
+    h t0 pes =
+      filter (\(_,(t1,_))->t1==Sync t0) pes
+
+-- Make sure a substitution does not take a unique out of the set of
+-- uniques, and the same for nons and pnons.
+-- Exported
+origCheck :: Algebra t p g s e c => Preskel t g s e -> e -> Bool
+origCheck k env =
+    check (kunique k) && check (knon k) && check (kpnon k)
+    where
+      check orig =
+          all (pred orig) orig
+      pred set item =
+          elem (instantiate env item) set
+
+nodeMap :: [Sid] -> Node -> Node
+nodeMap mapping (s, i) =
+  if s < length mapping && s >= 0 then
+    (mapping !! s, i)
+  else
+    error ("Strand.nodeMap: bad " ++ show s ++ " " ++ show mapping)
+
+-- Exported
+validateDeclEnv :: Algebra t p g s e c => Preskel t g s e ->
+                   Preskel t g s e -> [Sid] -> e -> Bool
+validateDeclEnv k k' mapping env =
+    validateDeclMap (decls k) (decls k') (nodeMap mapping) env
+
+-- Hulling or Ensuring Unique Origination
+hull :: Algebra t p g s e c => Bool -> PRS t p g s e c ->
+        [PRS t p g s e c]
+hull prune prs =
+    loop (korig $ skel prs)
+    where
+      -- No uniques originate on more than one strand
+      loop [] = enrich prune prs
+      -- Found a pair that needs hulling
+      loop ((u, (s, i) : (s', i') : _) : _) =
+              hullByDeOrigination prune prs u (s, i) (s', i')
+      loop(_ : orig) = loop orig
+
+-- De-Origination
+
+hullByDeOrigination :: Algebra t p g s e c => Bool -> PRS t p g s e c ->
+                       t -> Node -> Node -> [PRS t p g s e c]
+hullByDeOrigination  prune prs u (s, i) (s', i') =
+    do
+      subst <- deOrig (skel prs) u (s, i) ++ deOrig (skel prs) u (s', i')
+      prs <- ksubst prs subst
+      hull prune prs
+
+deOrig :: Algebra t p g s e c => Preskel t g s e -> t -> Node -> [(g, s)]
+deOrig k u (s, i) =
+    [ (g, s) |
+      let tr = trace $ strandInst k s,
+      e <- take i tr,
+      t <- M.maybeToList $ recvTerm e,
+      subterm <- S.toList $ foldCarriedTerms (flip S.insert) S.empty t,
+      (g, s) <- unify u subterm (gen k, emptySubst),
+      not $ originates (substitute s u) (map (evtMap $ substitute s) tr) ]
+
+type SkelDeclInst t = DeclInst t (Int, Int)
+type SkelDeclInstList t = DeclInstList t (Int, Int)
+type SkelDeclaration t = Declaration t (Int, Int)
+type SkelDeclList t = DeclList t (Int, Int)
+type SkelDeclarations t = Declarations t (Int, Int)
+
+-- Security goals: satisfaction of atomic formulas
+
+type Sem t g s e = Preskel t g s e -> (g, e) -> [(g, e)]
+
+satisfy :: Algebra t p g s e c => AForm t -> Sem t g s e
+satisfy (Equals t t') = geq t t'
+satisfy (Non t) = gnon t
+satisfy (Pnon t) = gpnon t
+satisfy (Uniq t) = guniq t
+satisfy (UniqAt t n) = guniqAt t n
+satisfy (UgenAt t n) = gugenAt t n
+satisfy (Ugen t) = gugen t
+satisfy (StrPrec n n') = gstrPrec n n'
+satisfy (Prec n n') = gprec n n'
+satisfy (RolePred r i n) = grole r i n
+satisfy (ParamPred r v n t) = gparam r v n t
+
+-- Equality assumes there has been a static role specific check to
+-- eliminate error cases.
+geq :: Algebra t p g s e c => t -> t -> Sem t g s e
+geq t t' _ (g, e)
+  | ti == ti' = [(g, e)]
+  | otherwise = []
+  where
+    ti = instantiate e t
+    ti' = instantiate e t'
+
+-- Non-origination
+gnon :: Algebra t p g s e c => t -> Sem t g s e
+gnon t k e =
+  do
+    t' <- dknon $ decls k
+    match t t' e
+
+-- Penetrator non-origination
+gpnon :: Algebra t p g s e c => t -> Sem t g s e
+gpnon t k e =
+  do
+    t' <- dkpnon $ decls k
+    match t t' e
+
+-- Unique origination
+guniq :: Algebra t p g s e c => t -> Sem t g s e
+guniq t k e =
+  do
+    t' <- kunique k
+    match t t' e
+
+-- Unique origination at a node
+guniqAt :: Algebra t p g s e c => t -> t -> Sem t g s e
+guniqAt t n k e =
+  do
+    (t', l) <- dkuniqFull $ decls k
+    e <- match t t' e
+    nodeMatch n l e
+
+-- Unique generation at a node
+gugenAt :: Algebra t p g s e c => t -> t -> Sem t g s e
+gugenAt t n k e =
+  do
+    (t', l) <- dkugenFull $ decls k
+    case l of
+      Nothing -> []
+      Just n' -> do
+        e <- match t t' e
+        nodeMatch n n' e
+
+-- Unique generation
+gugen :: Algebra t p g s e c => t -> Sem t g s e
+gugen t k e =
+  do
+    t' <- dkuniqgen $ decls k
+    match t t' e
+
+inSkel :: Algebra t p g s e c => Preskel t g s e -> (Int, Int) -> Bool
+inSkel k (s, i) =
+  s >= 0 && s < nstrands k && i >= 0 && i < height (insts k !! s)
+
+strandPrec :: Node -> Node -> Bool
+strandPrec (s, i) (s', i')
+  | s == s' && i < i' = True
+  | otherwise = False
+
+-- Within strand node precedes
+gstrPrec :: Algebra t p g s e c => t -> t -> Sem t g s e
+gstrPrec n n' k (g, e) =
+  case (nodeLookup e n, nodeLookup e n') of
+    (Just p, Just p')
+      | inSkel k p && inSkel k p' && strandPrec p p' -> [(g, e)]
+    (Just _, Just _) -> []
+    (_, Just _) ->
+      error ("Strand.gstrPrec: node " ++ show n ++ " unbound")
+    _ ->
+      error ("Strand.gstrPrec: node " ++ show n' ++ " unbound")
+
+-- Node precedes
+-- This should look at the transitive closure of the ordering graph.
+gprec :: Algebra t p g s e c => t -> t -> Sem t g s e
+gprec n n' k (g, e) =
+  case (nodeLookup e n, nodeLookup e n') of
+    (Just p, Just p')
+      | inSkel k p && inSkel k p' &&
+        (strandPrec p p' || elem (p, p') (tc k)) -> [(g, e)]
+    (Just _, Just _) -> []
+    (_, Just _) ->
+      error ("Strand.gstrPrec: node " ++ show n ++ " unbound")
+    _ ->
+      error ("Strand.gstrPrec: node " ++ show n' ++ " unbound")
+
+-- Role predicate
+-- r and i determine the predicate, which has arity one.
+grole :: Algebra t p g s e c => Role t -> Int -> t -> Sem t g s e
+grole r i n k (g, e) =
+  case nodeLookup e n of
+    Nothing ->
+      do
+        (z, inst) <- zip [0..] $ insts k
+        case () of
+          _ | i >= height inst -> []
+            | rname (role inst) == rname r -> nodeMatch n (z, i) (g, e)
+            | otherwise ->      -- See if z could have been an instance of r
+              case bldInstance r (take (i + 1) $ trace inst) g of
+                [] -> []
+                _ -> nodeMatch n (z, i) (g, e)
+    Just (z, j) | z < nstrands k && i == j ->
+      let inst = insts k !! z in
+      case () of
+        _ | i >= height inst -> []
+          | rname (role inst) == rname r -> [(g, e)]
+          | otherwise ->
+            case bldInstance r (take (i + 1) $ trace inst) g of
+              [] -> []
+              _ -> [(g, e)]
+    _ -> []
+
+-- Parameter predicate
+
+-- r and t determine the predicate, which has arity two.  t must be
+-- a variable declared in role r.
+gparam :: Algebra t p g s e c => Role t -> t -> t -> t -> Sem t g s e
+gparam r t n t' k (g, e) =
+  case nodeLookup e n of
+    Just (z, i) | z < nstrands k  ->
+      let inst = insts k !! z in
+      case () of
+        _ | i >= height inst -> []
+          | rname (role inst) == rname r ->
+            match t' (instantiate (env inst) t) (g, e)
+          | otherwise ->
+              do
+                (g, inst) <- bldInstance r (take (i + 1) $ trace inst) g
+                match t' (instantiate (env inst) t) (g, e)
+    Nothing -> error ("Strand.gparam: node " ++ show n ++ " unbound")
+    _ -> []
+
+-- Conjunction
+
+conjoin :: Algebra t p g s e c => [AForm t] -> Sem t g s e
+conjoin [] _ e = [e]
+conjoin (a: as)  k e =
   do
     e <- satisfy a k e
     conjoin as k e
diff --git a/src/CPSA/Lib/Utilities.hs b/src/CPSA/Lib/Utilities.hs
--- a/src/CPSA/Lib/Utilities.hs
+++ b/src/CPSA/Lib/Utilities.hs
@@ -9,10 +9,31 @@
 
 module CPSA.Lib.Utilities where
 
+import Control.Applicative
 import qualified Data.Set as S
 import qualified Data.List as L
 import Data.List (foldl')
 
+-- Like Either String but with fail method defined
+data ReturnFail a
+    = Return a
+    | Fail String
+
+instance Functor (ReturnFail) where
+    fmap _ (Fail x) = Fail x
+    fmap f (Return y) = Return (f y)
+
+instance Applicative (ReturnFail) where
+    pure          = Return
+    Fail e <*> _ = Fail e
+    Return f <*> r = fmap f r
+
+instance Monad ReturnFail where
+    return = Return
+    Fail l >>= _ = Fail l
+    Return r >>= k = k r
+    fail s = Fail s
+
 adjoin :: Eq a => a -> [a] -> [a]
 adjoin x xs
     | x `elem` xs = xs
@@ -29,12 +50,13 @@
 
 -- Replace the nth item in a list
 replaceNth :: a -> Int -> [a] -> [a]
+replaceNth _ n xs
+    | n < 0 = error "Utilities.replaceNth: negative index"
+    | n >= length xs = error "Utilities.replaceNth: n out of bounds"
 replaceNth z n (x : xs)
     | n == 0 = z : xs
     | n > 0 = x : replaceNth z (n - 1) xs
-replaceNth _ n _
-    | n < 0 = error "Utilities.replaceNth: negative index"
-    | otherwise = error "Utilities.replaceNth: negative index"
+replaceNth _ _ _ = error "Utilities.replaceNth: something odd happened"
 
 -- Returns a list of the natural numbers less that the argument.
 {-# INLINE nats #-}
@@ -93,3 +115,18 @@
     case (lookup node alist, lookup node' alist) of
       (Just n, Just n') -> n >= n'
       _ -> True
+
+failwith :: Monad m => String -> Bool -> m ()
+failwith msg test =
+    case test of
+      True -> return ()
+      False -> fail msg
+
+concatMapM :: (Monad m) => (a -> m [b]) -> [a] -> m [b]
+concatMapM fn ins =
+    do
+       res <- mapM fn ins
+       return (concat res)
+
+assertError :: [Char] -> a
+assertError s = error ("[ASSERT FAILED] " ++ s)
diff --git a/src/CPSA/Parameters/Flow.hs b/src/CPSA/Parameters/Flow.hs
deleted file mode 100644
--- a/src/CPSA/Parameters/Flow.hs
+++ /dev/null
@@ -1,90 +0,0 @@
--- Performs a data flow analysis of traces in protocol roles
-
--- Copyright (c) 2009 The MITRE Corporation
---
--- This program is free software: you can redistribute it and/or
--- modify it under the terms of the BSD License as published by the
--- University of California.
-
-module CPSA.Parameters.Flow (dataFlow) where
-
-import CPSA.Lib.CPSA
-
-dataFlow :: (Algebra t p g s e c, Monad m) => String -> g ->
-            SExpr Pos -> m (SExpr ())
-dataFlow nom origin (L pos (S _ "defprotocol" :
-                            S _ name :
-                            S _ alg :
-                            xs))
-    | nom == alg =
-        do
-          xs <- mapM (mapRole origin) xs
-          return (L () (S () "defprotocol" :
-                        S () name :
-                        S () alg :
-                        xs))
-    | otherwise = fail (shows pos $ "Expecting terms in algebra " ++ nom)
-dataFlow _ _ x = return (strip x)
-
--- Strip positions from an S-expression
-
-strip :: SExpr a -> SExpr ()
-strip (S _ s) = S () s
-strip (Q _ s) = Q () s
-strip (N _ n) = N () n
-strip (L _ l) = L () (map strip l)
-
-mapRole :: (Algebra t p g s e c, Monad m) => g ->
-           SExpr Pos -> m (SExpr ())
-mapRole gen (L _ (S _ "defrole" :
-                  S _ name :
-                  L _ (S _ "vars" : vars) :
-                  L _ (S _ "trace" : trace) :
-                  rest)) =
-    do
-      (_, vs) <- loadVars gen vars
-      c <- loadTrace vs trace
-      let rest' = addParams (displayParams vs (flow c)) (map strip rest)
-      trace <- mapM stripEvt trace
-      return (L () (S () "defrole" :
-                    S () name :
-                    L () (S () "vars" : map strip vars) :
-                    L () (S () "trace" : trace) :
-                    rest'))
-mapRole _ x = return (strip x)
-
-loadTrace :: (Algebra t p g s e c, Monad m) => [t] ->
-             [SExpr Pos] -> m [Event t]
-loadTrace vars xs = mapM (loadEvt vars) xs
-
-loadEvt :: (Algebra t p g s e c, Monad m) => [t] ->
-          SExpr Pos -> m (Event t)
-loadEvt vars (L _ [S _ "recv", t]) =
-    do
-      t <- loadTerm vars t
-      return (In t)
-loadEvt vars (L _ [S _ "send", t]) =
-    do
-      t <- loadTerm vars t
-      return (Out t)
-loadEvt _ (L pos [S _ dir, _]) =
-    fail (shows pos $ "Unrecognized direction " ++ dir)
-loadEvt _ x = fail (shows (annotation x) "Malformed direction")
-
-displayParams :: Algebra t p g s e c => [t] -> [[t]] -> [SExpr ()]
-displayParams vs inits =
-    map (L () . map (displayTerm ctx)) inits
-    where
-      ctx = addToContext emptyContext vs
-
-addParams :: [SExpr ()] -> [SExpr ()] -> [SExpr ()]
-addParams inits rest =
-    filter notParams rest ++ [L () (S () "parameters" : inits)]
-    where
-      notParams (L () (S () "parameters" : _)) = False
-      notParams _ = True
-
-stripEvt ::Monad m => SExpr Pos -> m (SExpr ())
-stripEvt (L _ [S _ "send", t]) = return (L () [S () "send", strip t])
-stripEvt (L _ [S _ "recv", t]) = return (L () [S () "recv", strip t])
-stripEvt x = fail (shows (annotation x) "Malformed direction")
diff --git a/src/CPSA/Parameters/Main.hs b/src/CPSA/Parameters/Main.hs
deleted file mode 100644
--- a/src/CPSA/Parameters/Main.hs
+++ /dev/null
@@ -1,67 +0,0 @@
--- Compute the parameters of each protocol in the input
-
--- This module simply maps the function flow to S-expressions in the
--- file.
-
--- Copyright (c) 2009 The MITRE Corporation
---
--- This program is free software: you can redistribute it and/or
--- modify it under the terms of the BSD License as published by the
--- University of California.
-
-module Main (main) where
-
-import System.IO
-import CPSA.Lib.CPSA
-import CPSA.Lib.Entry
-import CPSA.Parameters.Flow
-import qualified CPSA.Basic.Algebra
-import qualified CPSA.DiffieHellman.Algebra
-
--- Algebra names
-algs :: [String]
-algs = [CPSA.Basic.Algebra.name, CPSA.DiffieHellman.Algebra.name]
-
-main :: IO ()
-main =
-    do
-      let options = algOptions CPSA.Basic.Algebra.name
-      let interp = algInterp CPSA.Basic.Algebra.name algs
-      (p, (output, alg, margin)) <- start options interp
-      h <- outputHandle output
-      writeComment h margin cpsaVersion
-      writeComment h margin "Protocols annotated with their parameters"
-      case () of
-        _ | alg == CPSA.Basic.Algebra.name ->
-              go (step h alg CPSA.Basic.Algebra.origin margin) p
-          | alg == CPSA.DiffieHellman.Algebra.name ->
-              go (step h alg CPSA.DiffieHellman.Algebra.origin margin) p
-          | otherwise ->
-               abort ("Bad algebra: " ++ alg)
-      hClose h
-
-go :: (SExpr Pos -> IO ()) -> PosHandle -> IO ()
-go f p =
-    loop
-    where
-      loop =
-          do
-            x <- readSExpr p
-            case x of
-              Nothing ->
-                  return ()
-              Just sexpr ->
-                  do
-                    f sexpr
-                    loop
-
-step :: Algebra t p g s e c => Handle ->
-        String -> g -> Int -> SExpr Pos -> IO ()
-step output name origin margin sexpr =
-    do
-      sexpr <- tryIO (dataFlow name origin sexpr)
-      case sexpr of
-        Right sexpr ->
-            writeLnSEexpr output margin sexpr
-        Left err ->
-            abort (show err)
diff --git a/src/CPSA/SAS/Main.hs b/src/CPSA/SAS/Main.hs
--- a/src/CPSA/SAS/Main.hs
+++ b/src/CPSA/SAS/Main.hs
@@ -26,18 +26,44 @@
       let interp = algInterp CPSA.Basic.Algebra.name algs
       (p, (output, alg, margin)) <- start options interp
       h <- outputHandle output
-      writeComment h margin cpsaVersion
-      writeComment h margin "Coherent logic"
-      case () of
-        _ | alg == CPSA.Basic.Algebra.name ->
-              go (step h alg CPSA.Basic.Algebra.origin margin)
-                 p ([], [])
-          | alg == CPSA.DiffieHellman.Algebra.name ->
-              go (step h alg CPSA.DiffieHellman.Algebra.origin margin)
-                 p ([], [])
+      -- Handle the herald
+      x <- readSExpr p
+      case x of
+        Nothing -> abort "Empty input"
+        Just (L _ (S _ "herald" : _ : xs)) ->
+             selAlg p h (getName xs alg) margin Nothing
+        Just x -> selAlg p h alg margin (Just x)
+
+-- Select algebra and then continue with next
+selAlg :: PosHandle -> Handle -> String -> Int -> Maybe (SExpr Pos) -> IO ()
+selAlg p h alg margin sexpr =
+    case () of
+      _ | alg == CPSA.Basic.Algebra.name ->
+           next p h margin sexpr
+                    (step h alg CPSA.Basic.Algebra.origin margin)
+        | alg == CPSA.DiffieHellman.Algebra.name ->
+           next p h margin sexpr
+                    (step h alg CPSA.DiffieHellman.Algebra.origin margin)
           | otherwise ->
                abort ("Bad algebra: " ++ alg)
+
+-- Continue and ignore header if one was found
+next :: Algebra t p g s e c => PosHandle -> Handle -> Int ->
+        Maybe (SExpr Pos) -> (State t g c -> Maybe (SExpr Pos)
+                              -> IO (State t g c)) -> IO ()
+next p h margin Nothing f = -- Found header
+    do
+      writeComment h margin cpsaVersion
+      writeComment h margin "Coherent logic"
+      go f p ([], [])
       hClose h
+next p h margin sexpr f =   -- No header found
+    do
+      writeComment h margin cpsaVersion
+      writeComment h margin "Coherent logic"
+      st <- f ([], []) sexpr -- Process first S-expression.
+      go f p st
+      hClose h
 
 go :: (a -> Maybe (SExpr Pos) -> IO a) -> PosHandle -> a -> IO ()
 go f p a =
@@ -56,11 +82,11 @@
                     a <- f a x
                     loop a
 
-step :: Algebra t p g s e c => Handle ->
-        String -> g -> Int -> State t g c ->
+step :: Algebra t p g s e c => Handle -> String ->
+        g -> Int -> State t g c ->
         Maybe (SExpr Pos) -> IO (State t g c)
-step output _ _ margin state@([], []) (Just sexpr@(L _ (S _ cmt : _)))
-     | cmt == "herald" || cmt == "comment" =
+step output _ _ margin state
+         (Just sexpr@(L _ (S _ "comment" : _))) =
          do
            writeLnSEexpr output margin sexpr
            return state
@@ -85,3 +111,14 @@
       return state
 after _ _ state _ =
     return state
+
+getName :: [SExpr a] -> String -> String
+getName xs name =
+    case assoc "algebra" xs of
+      [S _ nom] -> nom
+      _ -> name
+
+-- Lookup value in alist, appending values with the same key
+assoc :: String -> [SExpr a] -> [SExpr a]
+assoc key alist =
+    concat [ rest | L _ (S _ head : rest) <- alist, key == head ]
diff --git a/src/CPSA/SAS/SAS.hs b/src/CPSA/SAS/SAS.hs
--- a/src/CPSA/SAS/SAS.hs
+++ b/src/CPSA/SAS/SAS.hs
@@ -48,7 +48,9 @@
       k <- loadPreskel pos p (pgen p) xs
       case (isSkeleton k, isShape k) of
         (True, False) ->
-          return ((ps, [k]), Nothing) -- Found POV
+          do                    -- Found POV
+            origCheck pos k     -- Ensure uniqs originate
+            return ((ps, [k]), Nothing)
         _ -> return ((ps, []), Nothing) -- Not POV
 loadPOV _ _ ps _ = return ((ps, []), Nothing)
 
@@ -65,10 +67,26 @@
       let g = kgen (last ks)      -- Make sure vars in skeleton are
       k <- loadPreskel pos p g xs -- distinct from the ones in the POV
       case isShape k of
-        True -> return ((ps, k : ks), Nothing) -- Found shape
+        True ->
+          do                    -- Found shape
+            origCheck pos k     -- Ensure uniqs originate
+            return ((ps, k : ks), Nothing)
         False -> return ((ps, ks), Nothing) -- Found intermediate skeleton
 loadOtherPreskel _ _ ps ks _ = return ((ps, ks), Nothing)
 
+-- Ensure every uniq originates
+origCheck :: (Algebra t p g s e c, Monad m) =>
+             Pos -> Preskel t g c -> m ()
+origCheck pos k =
+  mapM_ f (uniqs k)
+  where
+    f t | any (\(t', _) -> t == t') (origs k) = return ()
+        | otherwise =
+      fail (shows pos "Uniq " ++ u ++ " has no origination point")
+      where
+        u = pp 0 0 (displayTerm ctx t)
+        ctx = addToContext emptyContext (kvars k)
+
 -- Load a protocol
 
 -- The Prot record contains information extraced from protocols for
@@ -230,7 +248,6 @@
       orderings :: [(t, t)],
       succs :: [(t, t)],
       nons :: [t],
-      pnons :: [t],
       uniqs :: [t],
       origs :: [(t, t)],
       isSkeleton :: Bool,
@@ -247,7 +264,6 @@
       let heights = map height insts
       orderings <- loadOrderings heights (assoc precedesKey xs)
       nons <- loadBaseTerms kvars (assoc nonOrigKey xs)
-      pnons <- loadBaseTerms kvars (assoc pnonOrigKey xs)
       uniqs <- loadBaseTerms kvars (assoc uniqOrigKey xs)
       origs <- loadOrigs kvars heights (assoc origsKey xs)
       let strands = map (\(s, h) -> (s, h - 1)) (zip [0..] heights)
@@ -263,7 +279,6 @@
                         orderings = map f orderings,
                         succs = loadSuccs varmap,
                         nons = nons,
-                        pnons = pnons,
                         uniqs = uniqs,
                         origs = map g origs,
                         isSkeleton = not $ hasKey preskeletonKey xs,
@@ -314,8 +329,8 @@
               [t] -> [t] -> SExpr Pos -> m (t, t)
 loadMaplet kvars vars (L _ [domain, range]) =
     do
-      t <- loadTerm vars domain
-      t' <- loadTerm kvars range
+      t <- loadTerm vars False domain
+      t' <- loadTerm kvars False range
       return (t, t')
 loadMaplet _ _ x = fail (shows (annotation x) "Malformed maplet")
 
@@ -324,7 +339,7 @@
 loadListener pos prot kvars x =
     do
       r <- lookupRole pos prot listenerName
-      t <- loadTerm kvars x
+      t <- loadTerm kvars False x
       return (Instance { pos = pos, role = r,
                          env = [(head $ vars r, t)], height = 2 })
 
@@ -377,7 +392,7 @@
 loadBaseTerm :: (Algebra t p g s e c, Monad m) => [t] -> SExpr Pos -> m t
 loadBaseTerm vars x =
     do
-      t <- loadTerm vars x
+      t <- loadTerm vars False x
       case isAtom t of
         True -> return t
         False -> fail (shows (annotation x) "Expecting an atom")
@@ -410,7 +425,7 @@
             SExpr Pos -> m (t, Node)
 loadOrig vars heights (L _ [x, y]) =
     do
-      t <- loadTerm vars x
+      t <- loadTerm vars False x
       n <- loadNode heights y
       return (t, n)
 loadOrig _ _ x =
@@ -501,10 +516,6 @@
 nonOrigKey :: String
 nonOrigKey = "non-orig"
 
--- The key used in preskeletons for penetrator non-originating atoms
-pnonOrigKey :: String
-pnonOrigKey = "pen-non-orig"
-
 -- The key used in preskeletons for uniquely originating atoms
 uniqOrigKey :: String
 uniqOrigKey = "uniq-orig"
@@ -590,7 +601,6 @@
       orderings = mapPair (instantiate env) (orderings k),
       succs = mapPair (instantiate env) (succs k),
       nons = map (instantiate env) (nons k),
-      pnons = map (instantiate env) (pnons k),
       uniqs = map (instantiate env) (uniqs k),
       origs = mapPair (instantiate env) (origs k),
       varmap = M.map (instantiate env) (varmap k) }
@@ -615,7 +625,7 @@
 form (pov, shapes) =
   let (c, vars, conj) = skel emptyContext pov in
   let disj = map (shape c conj) shapes in
-  L () [S () "defgoal", S () (pname $ protocol pov), -- Name of protocol
+  L () [S () "defsas", S () (pname $ protocol pov), -- Name of protocol
         quantify "forall" vars (imply (conjoin conj) (disjoin disj))]
 
 -- Convert one skeleton into a declaration and a conjunction.  The
@@ -635,9 +645,7 @@
    map (precForm kctx) (orderings k) ++
    map (sprecForm kctx) (succs k) ++
    map (unary "non" kctx) (nons k) ++
-   map (unary "pnon" kctx) (pnons k) ++
-   map (unary "uniq" kctx) (noOrigUniqs k) ++
-   map (uniqAtForm kctx) (origs k))
+   map (uniqForm kctx) (origs k))
 
 -- map through lists in an S-Expression.
 listMap :: ([SExpr ()] -> [SExpr ()]) -> [SExpr ()] -> [SExpr ()]
@@ -686,15 +694,8 @@
 sprecForm :: Algebra t p g s e c => c -> (t, t) -> SExpr ()
 sprecForm = binary "str-prec"
 
-uniqAtForm :: Algebra t p g s e c => c -> (t, t) -> SExpr ()
-uniqAtForm = binary "uniq-at"
-
--- Returns the uniqs that do not originate in k.
-noOrigUniqs :: Algebra t p g s e c => Preskel t g c -> [t]
-noOrigUniqs k =
-  [ t | t <- uniqs k, all (f t) (origs k) ]
-  where
-    f t (t', _) = t /= t'
+uniqForm :: Algebra t p g s e c => c -> (t, t) -> SExpr ()
+uniqForm = binary "uniq-at"
 
 -- Creates a formula associated with a shape.  It is a disjunction of
 -- existentially quantified formulas that describe the homomorphism
diff --git a/src/cpsa.pl b/src/cpsa.pl
--- a/src/cpsa.pl
+++ b/src/cpsa.pl
@@ -112,9 +112,9 @@
 %% Top ::= c(Comment)             -- Comment
 %%      |  h(Name, Alist)         -- Herald
 %%      |  p(Name, Alg, Roles)    -- Defprotocol
-%%      |  k(Prot, Decls, Strands, Precedes, Nons, Pens, Uniqs).
+%%      |  k(Prot, Decls, Strands, Precedes, Nons, Uniqs).
 %%                                -- Defskeleton
-%% Role ::= r(Name, Decls, Trace, Nons, Pens, Uniqs).
+%% Role ::= r(Name, Decls, Trace, Nons, Uniqs).
 %%                                -- Defrole
 %% Decl ::= d(Sort, Vars).
 %%
@@ -124,11 +124,9 @@
 %%
 %% Nons ::= [Term].
 %%
-%% Pens ::= [Term].
-%%
 %% Uniqs ::= [Term].
 %%
-%% Strand ::= s(RoleName, Height, Map) | l(Term).
+%% Strand ::= s(RoleName, Height, Map).
 %%
 %% Height ::= Int.
 %%
@@ -144,7 +142,7 @@
 %%
 %% Var ::= Atom.
 %%
-%% Tag ::= String
+%% Tag ::= String.
 
 sexpr_to_cpsa([comment|X], c(X)).
 sexpr_to_cpsa([herald, Name|Alist], h(Name, Alist)).
@@ -153,7 +151,7 @@
 	atom(Name), atom(Alg),
 	sexpr_to_roles(Rest, Roles).
 sexpr_to_cpsa([defskeleton, Prot, [vars|Vars]|Rest],
-	k(Prot, Decls, Strands, Precedes, Nons, Pens, Uniqs)) :-
+	k(Prot, Decls, Strands, Precedes, Nons, Uniqs)) :-
 	atom(Prot),
 	decls(Vars, Decls),
 	sexpr_to_strands(Rest, Strands, Alist),
@@ -161,8 +159,6 @@
 	edges(Values, Precedes),
 	lookup('non-orig', Alist, Snons),
 	sexprs_to_terms(Snons, Nons),
-	lookup('pen-non-orig', Alist, Spens),
-	sexprs_to_terms(Spens, Pens),
 	lookup('uniq-orig', Alist, Suniqs),
 	sexprs_to_terms(Suniqs, Uniqs).
 
@@ -173,13 +169,11 @@
 sexpr_to_roles(_, []).
 
 sexpr_to_role([Name, [vars|Vars], [trace|Strace]|Alist],
-	r(Name, Decls, Trace, Nons, Pens, Uniqs)) :-
+	r(Name, Decls, Trace, Nons, Uniqs)) :-
 	decls(Vars, Decls),
 	sexprs_to_trace(Strace, Trace),
 	lookup('non-orig', Alist, Snons),
 	sexprs_to_terms(Snons, Nons),
-	lookup('pen-non-orig', Alist, Spens),
-	sexprs_to_terms(Spens, Pens),
 	lookup('uniq-orig', Alist, Suniqs),
 	sexprs_to_terms(Suniqs, Uniqs).
 
@@ -295,18 +289,18 @@
 cpsa_to_sexpr(h(Name, Alist), [herald, Name|Alist]).
 cpsa_to_sexpr(p(Name, Alg, Roles), [defprotocol, Name, Alg|Rest]) :-
 	roles_to_sexprs(Roles, Rest).
-cpsa_to_sexpr(k(Prot, Decls, Strands, Precedes, Nons, Pens, Uniqs),
+cpsa_to_sexpr(k(Prot, Decls, Strands, Precedes, Nons, Uniqs),
 	[defskeleton, Prot, [vars|Vars]|Rest]) :-
 	decls(Vars, Decls),
-	preds(Precedes, Nons, Pens, Uniqs, Alist),
+	preds(Precedes, Nons, Uniqs, Alist),
 	strands_to_sexprs(Strands, Alist, Rest).
 
-preds([], Nons, Pens, Uniqs, Alist) :-
+preds([], Nons, Uniqs, Alist) :-
 	!,
-	origs(Nons, Pens, Uniqs, Alist).
-preds(Precedes, Nons, Pens, Uniqs, [[precedes|Sexprs]|Alist]) :-
+	origs(Nons, Uniqs, Alist).
+preds(Precedes, Nons, Uniqs, [[precedes|Sexprs]|Alist]) :-
 	edges(Sexprs, Precedes),
-	origs(Nons, Pens, Uniqs, Alist).
+	origs(Nons, Uniqs, Alist).
 
 strands_to_sexprs([], Alist, Alist).
 strands_to_sexprs([Strand|Strands], Alist, [Sexpr|Sexprs]) :-
@@ -328,11 +322,11 @@
 	role_to_sexpr(Role, Sexpr),
 	roles_to_sexprs(Roles, Sexprs).
 
-role_to_sexpr(r(Name, Decls, Trace, Nons, Pens, Uniqs),
+role_to_sexpr(r(Name, Decls, Trace, Nons, Uniqs),
 	[defrole, Name, [vars|Vars], [trace|Strace]|Alist]) :-
 	decls(Vars, Decls),
 	traces_to_sexprs(Trace, Strace),
-	origs(Nons, Pens, Uniqs, Alist).
+	origs(Nons, Uniqs, Alist).
 
 traces_to_sexprs([], []).
 traces_to_sexprs([send(Term)|Trace], [[send, Sterm]|Straces]) :-
@@ -342,18 +336,11 @@
 	term_to_sexpr(Term, Sterm),
 	traces_to_sexprs(Trace, Straces).
 
-origs([], Pens, Uniqs, Alist) :-
-	!,
-	pen_uniq_origs(Pens, Uniqs, Alist).
-origs(Nons, Pens, Uniqs, [['non-orig'|Snons]|Alist]) :-
-	terms_to_sexprs(Nons, Snons),
-	pen_uniq_origs(Pens, Uniqs, Alist).
-
-pen_uniq_origs([], Uniqs, Alist) :-
+origs([], Uniqs, Alist) :-
 	!,
 	uniq_origs(Uniqs, Alist).
-pen_uniq_origs(Pens, Uniqs, [['pen-non-orig'|Spens]|Alist]) :-
-	terms_to_sexprs(Pens, Spens),
+origs(Nons, Uniqs, [['non-orig'|Snons]|Alist]) :-
+	terms_to_sexprs(Nons, Snons),
 	uniq_origs(Uniqs, Alist).
 
 uniq_origs([], []) :- !.
diff --git a/src/cpsa2svg b/src/cpsa2svg
deleted file mode 100644
--- a/src/cpsa2svg
+++ /dev/null
@@ -1,296 +0,0 @@
-#! /bin/sh
-
-# Generates an SVG diagram from CPSA skeletons
-
-# This program converts the skeletons in the input into an SVG
-# diagram using Scheme and the GraphVis program dot.  Terms are
-# displayed as tooltips in the diagram.
-
-PROG=`basename "$0"`
-
-usage()
-{
-  echo "Usage: $PROG [OPTIONS] [FILE]"
-  echo
-  echo "Options:"
-  echo "  -o FILE, --output=FILE"
-  echo "         write output to FILE (default is standard output)"
-  echo "  -h, --help"
-  echo "         display this help and exit"
-  echo "  -v, --version"
-  echo "         output version information and exit"
-}
-
-OPTS=`getopt -o hvo: --long help,version,output: -n "$PROG" -- "$@"`
-
-if [ $? -ne 0 ]
-then
-  echo
-  usage
-  exit 1
-fi
-
-eval set -- "$OPTS"
-
-for o
-do
-  case "$o" in
-    -h|--help)
-      usage
-      exit 0;;
-    -v|--version)
-      echo $PROG 1.0
-      exit 0;;
-    -o|--output)
-      output="$2"
-      shift 2;;
-    --)
-      shift
-      break;;
-  esac
-done
-
-SCRIPT='
-;;; Converts the skeletons in the input into GraphViz dot format.
-;;; Terms are displayed as tooltips, so this output is usually
-;;; converted to SVG.
-
-;;; This program expects its input to be generated by another program,
-;;; and therefore does not adequately check its input.
-
-;;; The program reads from the standard input and writes to the
-;;; standard output.
-
-;;; The main routine
-(define (main)
-  (let ((input (get)))			 ; Read input
-    (show-all (car input) (cdr input)))) ; Process in
-
-;;; Get the list of skeletons and the protocols as an alist
-(define (get)
-  (let loop ((prots '\''()) (skels '\''()))
-    (let ((x (read)))
-      (cond ((eof-object? x)
-	     (cons (reverse prots) (reverse skels)))
-	    ((or (not (pair? x))
-		 (not (symbol? (car x)))
-		 (not (pair? (cdr x)))
-		 (not (symbol? (cadr x))))
-	     (loop prots skels))
-	    ((equal? '\''defprotocol (car x))
-	     (loop (cons (cons (cadr x) x) prots) skels))
-	    ((equal? '\''defskeleton (car x))
-	     (loop prots (cons x skels)))
-	    (else (loop prots skels))))))
-
-(define (show-all prots skels)
-  (display "digraph cpsa {")
-  (newline)				; t is a tag number
-  (let loop ((t 0) (skels skels))	; used for labeling
-    (cond ((pair? skels)
-	   (let ((prot (assoc (cadar skels) prots)))
-	     (if prot (show-skel t (cdr prot) (car skels)))
-	     (loop (+ t 1) (cdr skels))))
-	  (else
-	   (display "}")
-	   (newline)))))
-
-;;; Print graph header
-(define (show-skel tag prot skel)
-  (let* ((x (assoc '\''label (cddr skel)))	; Use value of the
-	 (label (if x (cadr x) tag))	; label attribute
-	 (y (assoc '\''parent (cddr skel))) ; when it appears
-	 (parent (and y (cadr y)))
-	 (name (cadr prot)))
-    (newline)
-    (display-outline label parent)
-    (display "subgraph cluster")
-    (display label)
-    (display " {")
-    (newline)
-    (display "  label = \"")
-    (display name)
-    (display " ")
-    (display label)
-    (display "\";")
-    (newline)
-    (show-strands label 0 (map extract-trace (cdddr prot)) (cdddr skel))))
-
-(define (display-outline label parent)
-  (display "c")
-  (display label)
-  (display " [label = \"")
-  (display label)
-  (display "\"]; ")
-  (newline)
-  (cond (parent
-	 (display "c")
-	 (display parent)
-	 (display " -> c")
-	 (display label)
-	 (display ";")
-	 (newline))))
-
-;;; Used to make an alist of role name and their trace
-(define (extract-trace role)
-  (cons (cadr role) (cdar (cdddr role))))
-
-;;; Print the strands
-(define (show-strands label s traces strands )
-  (cond ((equal? '\''defstrand (caar strands))
-	 (show-strand label s (cdar strands) traces (cdr strands)))
-	((equal? '\''deflistener (caar strands))
-	 (show-listener label s (cadar strands) traces (cdr strands)))
-        (else
-	 (let ((result (assoc '\''precedes strands)))
-	   (show-order label (if (pair? result) (cdr result) '\''()))))))
-
-;;; Show a non-listener strand
-(define (show-strand label s strand traces strands)
-  (let ((role (car strand))
-	(height (cadr strand))
-	(env (cddr strand)))
-    (show-cluster label s)
-    (display "    label = \"")		; Use role as
-    (display role)			; cluster label
-    (display "\";")
-    (newline)
-    (show-strand-nodes label s (assoc role traces) height env)
-    (show-strand-edges label s height)
-    (display "  }")
-    (newline))
-  (show-strands label (+ s 1) traces strands))
-
-(define (show-cluster label s)
-  (newline)
-  (display "  subgraph cluster")
-  (display label)
-  (display "_")
-  (display s)
-  (display " {")
-  (newline)				; Use strand for all
-  (display "    node [label = \"")	; node labels in this
-  (display s)				; cluster
-  (display "\"];")
-  (newline))
-
-(define (show-strand-nodes label s trace height env)
-  (if (not trace)
-      (error "Bad role name")
-      (let loop ((n 0) (trace (cdr trace)))
-	(cond ((< n height)
-	       (show-node label s n (subst (car trace) env))
-	       (loop (+ n 1) (cdr trace)))))))
-
-;;; Show a node with the term as a tooltip
-(define (show-node label s n term)
-  (display "    ")
-  (display-node label s n)
-  (display " [tooltip = \"")
-  (show-term term)
-  (display "\"];")
-  (newline))
-
-;;; Writes a term while quoting strings properly
-(define (show-term term)
-  (define (show-term-list terms)
-    (cond ((pair? terms)
-	   (display " ")
-	   (show-term (car terms))
-	   (show-term-list (cdr terms)))
-	  (else
-	   (display ")"))))
-  (cond ((string? term)
-	 (display "\"")
-	 (display term)
-	 (display "\""))
-	((pair? term)
-	 (display "(")
-	 (show-term (car term))
-	 (show-term-list (cdr term)))
-	(else
-	 (display term))))
-
-(define (display-node label s n)
-  (display "l")
-  (display label)
-  (display "s")
-  (display s)
-  (display "n")
-  (display n))
-
-;;; Substitute symbols for values in the given environment
-(define (subst exp env)
-  (define (substitute exp)
-    (cond ((symbol? exp)
-	   (let ((alist (assoc exp env)))
-	     (if alist
-		 (cadr alist)
-		 exp)))
-	  ((pair? exp)
-	   (cons (car exp) (map substitute (cdr exp))))
-	  (else exp)))
-  (substitute exp))
-
-(define (show-strand-edges label s height)
-  (display "    ")
-  (display-node label s 0)
-  (let loop ((n 1))
-    (cond ((>= n height)
-	   (display ";")
-	   (newline))
-	  (else
-	   (display " -> ")
-	   (display-node label s n)
-	   (loop (+ n 1))))))
-
-(define (show-listener label s term traces strands)
-  (show-cluster label s)
-  (display "    label = \"\";")
-  (newline)
-  (show-node label s 0 (list '\''recv term))
-  (display "  }")
-  (newline)
-  (show-strands label (+ s 1) traces strands))
-
-(define (show-order label orderings)
-  (cond ((pair? orderings)
-	 (let ((hd (caar orderings))
-	       (tl (cadar orderings)))
-	   (display "  ")
-	   (display-node label (car hd) (cadr hd))
-	   (display " -> ")
-	   (display-node label (car tl) (cadr tl))
-	   (display ";")
-	   (newline)
-	   (show-order label (cdr orderings))))
-	(else
-	 (display "}")
-	 (newline))))
-
-(main)
-'
-
-case $# in
-  0)
-    if [ -z "$output" ]
-    then
-      guile -c "$SCRIPT" | dot -Tsvg
-    else
-      guile -c "$SCRIPT" | dot -Tsvg -o "$output"
-    fi
-    break;;
-  1)
-    if [ -z "$output" ]
-    then
-      guile -c "$SCRIPT" < "$1" | dot -Tsvg
-    else
-      guile -c "$SCRIPT" < "$1" | dot -Tsvg -o "$output"
-    fi
-    break;;
-  *)
-    echo Too many input files
-    echo
-    usage
-    exit 1;;
-esac
diff --git a/src/cpsacgi b/src/cpsacgi
deleted file mode 100644
--- a/src/cpsacgi
+++ /dev/null
@@ -1,17 +0,0 @@
-#! /bin/sh
-if test -e /tmp/cpsacgi
-then
-  echo Content-type: text/plain
-  echo
-  echo Server busy
-  exit 0
-fi
-
-trap '/bin/rm -f /tmp/cpsacgi; exit 1' 1 2 3 4 6 8 9 11 13 14 15
-echo $! > /tmp/cpsacgi
-
-# Run unlimited version of the script
-/usr/bin/python cpsacgi.py
-STATUS=$?
-/bin/rm -f /tmp/cpsacgi
-exit ${STATUS}
diff --git a/src/cpsacgi.py b/src/cpsacgi.py
deleted file mode 100644
--- a/src/cpsacgi.py
+++ /dev/null
@@ -1,222 +0,0 @@
-#! /usr/bin/python
-
-"""Warning: this CGI script is for deployment in friendly
-environments only!"""
-
-import cgi
-import sys
-import subprocess
-import cgitb; cgitb.enable()
-
-# The command used to start cpsa limits memory usage
-cpsa_command = ['./cpsa', '+RTS', '-M512m', '-RTS']
-# Flag for using ps to determine if a copy of cpsa is already running
-use_in_use_check = False
-
-def main():
-    shapes_cmd = './cpsashapes'
-    graph_cmd = './cpsagraph -c'
-    annotations_cmd = './cpsaannotations'
-    xml_cmd = './cpsagraph -x'
-    shapes_graph_cmd = shapes_cmd + ' | ' + graph_cmd
-    shapes_xml_cmd = shapes_cmd + ' | ' + xml_cmd
-    shapes_annotations_cmd = shapes_cmd + ' | ' + annotations_cmd
-    shapes_annotations_xml_cmd = shapes_annotations_cmd + ' | ' + xml_cmd
-    form = cgi.FieldStorage()
-    if form.has_key('xml'):
-        resp = xml(xml_cmd, form['xml'], None)
-    elif form.has_key('shapes xml'):
-        resp = xml(shapes_xml_cmd, form['shapes xml'], None)
-    elif form.has_key('shapes annotations xml'):
-        resp = xml(shapes_annotations_xml_cmd,
-                   form['shapes annotations xml'], None)
-    elif form.has_key('graph'):
-        resp = graph(graph_cmd, form['graph'], None)
-    elif form.has_key('shapes graph'):
-        resp = graph(shapes_graph_cmd, form['shapes graph'], None)
-    elif form.has_key('cpsa'):
-        resp = cpsa(None, form['cpsa'])
-    elif form.has_key('cpsa shapes'):
-        resp = cpsa(shapes_cmd, form['cpsa shapes'])
-    elif form.has_key('cpsa shapes annotations'):
-        resp = cpsa(shapes_annotations_cmd,
-                    form['cpsa shapes annotations'])
-    elif form.has_key('cpsa xml'):
-        resp = cpsa_xml(xml_cmd, form['cpsa xml'])
-    elif form.has_key('cpsa shapes xml'):
-        resp = cpsa_xml(shapes_xml_cmd, form['cpsa shapes xml'])
-    elif form.has_key('cpsa shapes annotations xml'):
-        resp = cpsa_xml(shapes_annotations_xml_cmd,
-                        form['cpsa shapes annotations xml'])
-    elif form.has_key('cpsa graph'):
-        resp = cpsa_graph(graph_cmd, form['cpsa graph'])
-    elif form.has_key('cpsa shapes graph'):
-        resp = cpsa_graph(shapes_graph_cmd, form['cpsa shapes graph'])
-    else:
-        resp = 'Content-Type: text/plain\n\nBad form input\n'
-    sys.stdout.write(resp)
-
-def graph(command, data, source):
-    if not source and not data.file:
-        return 'Content-Type: text/plain\n\nBad form input--no file\n'
-    p = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE,
-                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    if source:
-        p.stdin.write(source)
-    else:
-        p.stdin.write(data.value)
-    p.stdin.close()
-    out = bounded_read(p.stdout)
-    err = p.stderr.read()
-    if p.wait():
-        resp = 'Content-Type: text/plain\n\n' + err
-    elif not out:
-        resp = 'Content-Type: text/plain\n\nSize limit exceeded'
-    else:
-        resp = 'Content-Type: image/svg+xml; charset=UTF-8\n'
-        if source and data.filename: # Add content disposition
-            name = data.filename
-            i = name.rfind('.')
-            if i > 0:
-                name = name[0:i]
-            fmt = 'Content-Disposition: attachment; filename=%s.svg\n\n'
-            resp += fmt % name
-        else:
-            resp += '\n'
-        resp += out
-    return resp
-
-def xml(command, data, source):
-    if not source and not data.file:
-        return 'Content-Type: text/plain\n\nBad form input--no file\n'
-    p = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE,
-                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    if source:
-        p.stdin.write(source)
-    else:
-        p.stdin.write(data.value)
-    p.stdin.close()
-    out = bounded_read(p.stdout)
-    err = p.stderr.read()
-    if p.wait():
-        resp = 'Content-Type: text/plain\n\n' + err
-    elif not out:
-        resp = 'Content-Type: text/plain\n\nSize limit exceeded'
-    else:
-        resp = 'Content-Type: text/xml; charset=UTF-8\n\n' + out
-    return resp
-
-def cpsa(command, data):
-    global cpsa_command
-    resp = 'Content-Type: text/plain; charset=US-ASCII\n\n'
-    if not data.file:
-        resp += 'Bad form input--no file\n'
-        return resp
-    busy = in_use()
-    if busy:
-        return busy
-    p = subprocess.Popen(cpsa_command, stdin=subprocess.PIPE,
-                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    p.stdin.write(data.value)
-    p.stdin.close()
-    out = bounded_read(p.stdout)
-    err = p.stderr.read()
-    if p.wait():
-        return resp + err
-    elif not out:
-        return resp + 'Size limit exceeded'
-    elif not command:
-        return resp + out
-    p = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE,
-                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    p.stdin.write(out)
-    p.stdin.close()
-    out = bounded_read(p.stdout)
-    err = p.stderr.read()
-    if p.wait():
-        return resp + err
-    elif not out:
-        return resp + 'Size limit exceeded'
-    else:
-        return resp + out
-
-def cpsa_graph(command, data):
-    global cpsa_command
-    if not data.file:
-        resp = 'Content-Type: text/plain; charset=US-ASCII\n\n'
-        resp += 'Bad form input--no file\n'
-        return resp
-    busy = in_use()
-    if busy:
-        return busy
-    p = subprocess.Popen(cpsa_command, stdin=subprocess.PIPE,
-                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    p.stdin.write(data.value)
-    p.stdin.close()
-    out = bounded_read(p.stdout)
-    err = p.stderr.read()
-    if p.wait():
-        resp = 'Content-Type: text/plain; charset=US-ASCII\n\n' + err
-        return resp
-    if not out:
-        resp = 'Content-Type: text/plain\n\nSize limit exceeded'
-        return resp
-    resp = 'Content-Type: multipart/mixed; boundary="boundary"'
-    resp += '\n\n--boundary\n'
-    resp += graph(command, data, out)
-    resp += '\n--boundary\n'
-    resp += 'Content-Type: text/plain; charset=US-ASCII\n\n'
-    resp += out
-    resp += '\n--boundary--\n'
-    return resp
-
-def cpsa_xml(command, data):
-    global cpsa_command
-    if not data.file:
-        resp = 'Content-Type: text/plain; charset=US-ASCII\n\n'
-        resp += 'Bad form input--no file\n'
-        return resp
-    busy = in_use()
-    if busy:
-        return busy
-    p = subprocess.Popen(cpsa_command, stdin=subprocess.PIPE,
-                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    p.stdin.write(data.value)
-    p.stdin.close()
-    out = bounded_read(p.stdout)
-    err = p.stderr.read()
-    if p.wait():
-        resp = 'Content-Type: text/plain; charset=US-ASCII\n\n' + err
-        return resp
-    if not out:
-        resp = 'Content-Type: text/plain\n\nSize limit exceeded'
-        return resp
-    return xml(command, data, out)
-
-# Use ps to ensure at most one copy of cpsa is running.
-def in_use():
-    global use_in_use_check
-    if not use_in_use_check:
-        return False
-    p = subprocess.Popen(['ps', '-ux'], stdin=subprocess.PIPE,
-                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    p.stdin.close()
-    out = p.stdout.read()
-    err = p.stderr.read()
-    if p.wait():
-        resp = 'Content-Type: text/plain; charset=US-ASCII\n\n' + err
-        return resp
-    if out.find("cpsa") >= 0:
-        return 'Content-Type: text/plain\n\nServer busy'
-    return False
-
-READ_BOUND = 2 << 20
-
-# Return the empty string when the input is too big.
-def bounded_read(f):
-    buf = f.read(READ_BOUND)
-    if f.read(1):
-        return ""
-    return buf
-
-main()
diff --git a/src/cpsaops.scm b/src/cpsaops.scm
--- a/src/cpsaops.scm
+++ b/src/cpsaops.scm
@@ -3,7 +3,7 @@
 !#
 ;;; For an R6RS script, add an import statement.
 
-;; This program simply extracts the operation form in a skeleton
+;; This program simply extracts the operation form in a preskeleton
 ;; and prints it.
 (define (consume form)
   (let ((op (skel-assq 'operation form)))
diff --git a/src/cpsaperm.scm b/src/cpsaperm.scm
deleted file mode 100644
--- a/src/cpsaperm.scm
+++ /dev/null
@@ -1,193 +0,0 @@
-#!/usr/bin/guile \
--e main -s
-!#
-(use-modules (ice-9 pretty-print))
-;;; For an R6RS script, add an import statement.
-
-;;; Synopsis: renumber strands in skeletons
-
-;;; A permutation of length n is represented as a list of natural
-;;; numbers that contains all the numbers less than n.
-
-;;; This program renumbers all the skeletons in a file that have the
-;;; same number of strands as is the length of the permutation.
-;;; Everything else is passed through unchanged.
-
-;;; Usage: cpsaperm [-h] [-o FILE] FILE INT...
-;;; where INT... specifies a permutation.
-;;; Use - in place of FILE for the standard port
-
-;;; Example: cpsaperm -o out.txt in.txt 1 0
-;;; Swaps the strands in skeletons with two strands.
-
-;;; This program does not check that the given permutation is in fact
-;;; a valid permutation, so be sure to check your output carefully.
-;;; Make sure your permutation has no repeats.
-
-;;; John D. Ramsdell -- October 2012
-
-;;; Create a function that applies a permutation to a form
-(define (apply-perm perm)
-  (let ((n (length perm)))
-    (lambda (form)
-      (let ((skel (parse-skel form)))
-	(cond ((not skel) form)		; Ignore non-skeletons
-	      ;; Ignore skeletons with the wrong number of strands
-	      ((not (= n (length (skel-strands skel)))) form)
-	      (else
-	       (let ((skel (apply-perm-to-skel perm skel)))
-		  `(defskeleton
-		    ,(skel-protocol skel)
-		    ,(skel-vars skel)
-		    ,@(append (skel-strands skel) (skel-alist skel))))))))))
-
-;;; A skeleton is represented as list with the following fields.
-
-(define (skel-protocol skel) (car skel))
-(define (skel-vars skel) (cadr skel))
-(define (skel-strands skel) (caddr skel))
-(define (skel-alist skel) (cdddr skel))
-(define (make-skel protocol vars strands alist)
-  (cons protocol (cons vars (cons strands alist))))
-
-;;; Creates a skeleton structure or returns #f on error.
-(define (parse-skel form)
-  (and (skel? form)
-       (let loop ((body (cdddr form)) (strands '()))
-	 (cond ((null? body)
-		(make-skel (cadr form) (caddr form)
-			   (reverse strands) body))
-	       ((or (eq? 'defstrand (caar body))
-		    (eq? 'deflistener (caar body)))
-		(loop (cdr body) (cons (car body) strands)))
-	       (else
-		(make-skel (cadr form) (caddr form)
-			   (reverse strands) body))))))
-
-;;; Is form a defskeleton
-
-(define (skel? form)
-  (and (list? form)
-       (<= 4 (length form))
-       (eq? 'defskeleton (car form))
-       (alist? (cddr form))))
-
-(define (alist? form)			; Is form a list of pairs?
-  (or (null? form)
-      (and (pair? form)
-	   (pair? (car form))
-	   (alist? (cdr form)))))
-
-;;; To apply a permutation to a skeleton, permute the strands and the
-;;; node orderings.
-(define (apply-perm-to-skel perm skel)
-  (let ((strands (skel-strands skel)))
-    (make-skel
-     (skel-protocol skel)
-     (skel-vars skel)
-     (map (lambda (index)
-	    (list-ref strands index))
-	  perm)
-     (map (apply-perm-to-alist perm) (skel-alist skel)))))
-
-;;; Apply a permutation to the node orderings
-(define (apply-perm-to-alist perm)
-  (lambda (entry)
-    (if (eq? (car entry) 'precedes)
-	(cons (car entry)
-	      (map (apply-perm-to-pair perm) (cdr entry)))
-	entry)))
-
-(define (apply-perm-to-pair perm)
-  (lambda (ordered-pair)
-    (if (and (list? ordered-pair) (= 2 (length ordered-pair)))
-	(list (apply-perm-to-node perm (car ordered-pair))
-	      (apply-perm-to-node perm (cadr ordered-pair)))
-	ordered-pair)))
-
-(define (apply-perm-to-node perm node)
-    (if (and (list? node) (= 2 (length node)))
-	(list (list-ref perm (car node)) (cadr node))
-	node))
-
-;;; The main driver loop and command-line processing
-
-;;; The main loop calls the transformer on each S-expression read from
-;;; the current input.
-
-(define (filter perm)
-  (let ((transformer (apply-perm perm)))
-    (lambda ()
-      (do ((form (read) (read)))
-	  ((eof-object? form))
-	(pretty-print (transformer form))))))
-
-;;; A file description is #f for the standard port, or a file name
-;;; that is a non-empty string that does not start with hyphen.
-
-(define (file-description? file)
-   (or (not file)
-       (and (> (string-length file) 0)
-	    (not (char=? #\- (string-ref file 0))))))
-
-;;; After command-line processing, this routine opens files as needed.
-
-(define (go input output perm)
-  (let ((thunk (filter perm)))
-    (cond ((not (file-description? input))
-	   (display-error "bad input file name"))
-	  ((not (file-description? output))
-	   (display-error "bad output file name"))
-	  (input
-	   (with-input-from-file input
-	     (lambda ()
-	       (if output
-		   (with-output-to-file output thunk)
-		   (thunk)))))
-	  (output
-	   (with-output-to-file output thunk))
-	  (else
-	   (thunk)))))
-
-;;; Parse command-line arguments and pass the result to the go function.
-
-(define (main args)
-  (let loop ((args (cdr args)) (output #f))
-    (cond ((null? args) 		; No input file specified
-	   (display-error "bad args"))
-	  ((string=? (car args) "-h")
-	   (display-help))		; Print help message
-	  ((string=? (car args) "-o")
-	   (if (null? (cdr args))
-	       (display-error "bad args")
-	       (loop (cddr args) (cadr args)))) ; Found an output file
-	  ((string=? (car args) "-")
-	   (check-perm #f output (cdr args)))
-	  (else					; Found input file
-	   (check-perm (car args) output (cdr args))))))
-
-;;; Make sure a permutation is a list of non-negative integers less
-;;; that the length of the permutation.
-(define (check-perm input output args)
-  (let ((n (length args)))
-    (let loop ((args args) (perm '()))
-      (if (null? args)
-	  (go input output (reverse perm))
-	  (let ((index (string->number (car args))))
-	    (if (and (integer? index)
-		     (not (negative? index))
-		     (< index n))
-		(loop (cdr args) (cons index perm))
-		(display-error "bad permutation")))))))
-
-(define (display-help)
-  (display-error "cpsaperm [-h] [-o FILE] FILE INT...")
-  (display-error "where INT... specifies a permutation.")
-  (display-error "Use - as FILE for the standard input."))
-
-(define (display-error obj)
-  (display obj (current-error-port))
-  (newline (current-error-port)))
-
-;;; For an R6RS script, add the following:
-;;; (main (command-line))
diff --git a/src/httpd_allow_execmem.te b/src/httpd_allow_execmem.te
deleted file mode 100644
--- a/src/httpd_allow_execmem.te
+++ /dev/null
@@ -1,23 +0,0 @@
-policy_module(httpd_allow_execmem, 1.0)
-
-########################################
-#
-# Declarations
-#
-
-gen_tunable(httpd_allow_execmem,true)
-
-########################################
-#
-# Local policy
-#
-
-gen_require(`
-	type httpd_sys_script_t;
-')
-
-tunable_policy(`httpd_allow_execmem',`
-	# Allow making anonymous memory executable, e.g.
-	# for runtime-code generation or executable stack.
-	allow httpd_sys_script_t self:process execmem;
-')
diff --git a/src/index.html b/src/index.html
deleted file mode 100644
--- a/src/index.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
-  <title>CPSA</title>
-  <meta name="generator" content="Amaya 9.54, see http://www.w3.org/Amaya/" />
-</head>
-
-<body>
-<h1>CPSA</h1>
-<ul>
-  <li><a href="cpsauser.html">CPSA User Guide</a></li>
-  <li><a href="cpsaprimer.pdf">CPSA Primer</a></li>
-  <li><a href="examples/">Examples</a></li>
-</ul>
-
-<h2>CPSA Shapes as XML</h2>
-
-<form action="/cgi-bin/cpsacgi" method="post" enctype="multipart/form-data">
-  <input type="file" name="cpsa shapes xml" />
-  <input type="submit" value="Send" /> </form>
-
-<h2>CPSA as XML</h2>
-
-<form action="/cgi-bin/cpsacgi" method="post" enctype="multipart/form-data">
-  <input type="file" name="cpsa xml" />
-  <input type="submit" value="Send" /> </form>
-
-<h2>Annotated CPSA Shapes as XML</h2>
-
-<form action="/cgi-bin/cpsacgi" method="post" enctype="multipart/form-data">
-  <input type="file" name="cpsa shapes annotations xml" />
-  <input type="submit" value="Send" /> </form>
-
-<h2>CPSA Shapes and Graph</h2>
-
-<form action="/cgi-bin/cpsacgi" method="post" enctype="multipart/form-data">
-  <input type="file" name="cpsa shapes graph" />
-  <input type="submit" value="Send" /> </form>
-
-<h2>CPSA and Graph</h2>
-
-<form action="/cgi-bin/cpsacgi" method="post" enctype="multipart/form-data">
-  <input type="file" name="cpsa graph" />
-  <input type="submit" value="Send" /> </form>
-
-<h2>CPSA Shapes as Text</h2>
-
-<form action="/cgi-bin/cpsacgi" method="post" enctype="multipart/form-data">
-  <input type="file" name="cpsa shapes" />
-  <input type="submit" value="Send" /> </form>
-
-<h2>CPSA as Text</h2>
-
-<form action="/cgi-bin/cpsacgi" method="post" enctype="multipart/form-data">
-  <input type="file" name="cpsa" />
-  <input type="submit" value="Send" /> </form>
-
-<h2>Annotated CPSA Shapes as Text</h2>
-
-<form action="/cgi-bin/cpsacgi" method="post" enctype="multipart/form-data">
-  <input type="file" name="cpsa shapes annotations" />
-  <input type="submit" value="Send" /> </form>
-</body>
-</html>
diff --git a/src/js2hs b/src/js2hs
deleted file mode 100644
--- a/src/js2hs
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-expand "$@" | sed 's/"/\\"/g' | awk '
-  BEGIN { print "    [\"<![CDATA[\"," }
-  { printf("     \"%s\",\n", $0) }
-  END { print "     \"]]>\"]" }'
diff --git a/src/perm.pl b/src/perm.pl
deleted file mode 100644
--- a/src/perm.pl
+++ /dev/null
@@ -1,80 +0,0 @@
-% -*- mode: prolog -*-
-
-%% Renumber strands in skeletons
-
-%% Known to work in SWI-Prolog, but not with GNU Prolog.
-
-%% Copyright (c) 2012 The MITRE Corporation
-%%
-%% This program is free software: you can redistribute it and/or
-%% modify it under the terms of the BSD License as published by the
-%% University of California.
-
-:- module(perm, [cpsa_permute/3]).
-
-:- use_module(cpsa).
-
-%% PERMUTE STRANDS
-
-%% A permutation of length n is represented as a list of natural
-%% numbers that contains all the numbers less than n.
-
-%% This program renumbers all the skeletons in a file that have the
-%% same number of strands as is the length of the permutation.
-%% Everything else is passed through unchanged.
-
-%% For example, to swap the strands in skeletons with two strands in
-%% in.txt and put the output into out.txt, type:
-%%
-%% perm: cpsa_permute([1,0], 'in.txt', 'out.txt').
-
-%% This program does not check that the given permutation is in fact a
-%% valid permutation, so be sure to check your output carefully.
-
-cpsa_permute(Perm, InFile, OutFile) :-
-    cpsa:cpsa(InFile, Cpsas),
-    cpsa_permute_all(Perm, Cpsas, OutCpsas),
-    cpsa:cpsas_to_sexprs(OutCpsas, Sexpr),
-    open(OutFile, write, Stream),
-    cpsa:cpsa_sexprs_pp(Stream, Sexpr),
-    close(Stream).
-
-cpsa_permute_all(_, [], []).
-cpsa_permute_all(Perm, [Cpsa|Cpsas], [OutCpsa|OutCpsas]) :-
-    cpsa_permute_skel(Perm, Cpsa, OutCpsa),
-    cpsa_permute_all(Perm, Cpsas, OutCpsas).
-
-cpsa_permute_skel(Perm, k(Prot, Decls, Strands, Precedes, Nons, Pens, Uniqs),
-		  k(Prot, Decls, OutStrands, OutPrecedes, Nons, Pens, Uniqs)) :-
-    perm_list(Perm, Strands, OutStrands),
-    perm_precedes(Perm, Precedes, OutPrecedes),
-    !.
-% If above fails, simply copy the input to the output and don't fail.
-cpsa_permute_skel(_, Cpsa, Cpsa).
-
-%% Apply a permutation to a list.
-perm_list([], _, []).
-perm_list([Index|Indices], List, [Value|Rest]) :-
-    nth0(Index, List, Value),
-    perm_list(Indices, List, Rest).
-
-%% Apply a permutation to a list of pairs of nodes.
-perm_precedes(_, [], []).
-perm_precedes(Perm, [(N0, N1)|Precedes], [(OutN0, OutN1)|OutPrecedes]) :-
-    perm_node(Perm, N0, OutN0),
-    perm_node(Perm, N1, OutN1),
-    perm_precedes(Perm, Precedes, OutPrecedes).
-
-perm_node(Perm, (S, I), (OutS, I)) :-
-    index_of(Perm, S, OutS).
-
-% Returns the index of the first occurence of Element in List
-index_of(List, Element, Index) :-
-    index_of(List, Element, 0, Index).
-index_of([],_,_,_) :-
-    print_message(error,'Element not found in list'),
-    fail.
-index_of([Element|_], Element, Curr, Curr) :- !.
-index_of([_|List], Element, Curr, Index) :-
-    Next is Curr + 1,
-    index_of(List, Element, Next, Index).
diff --git a/src/preskel b/src/preskel
deleted file mode 100644
--- a/src/preskel
+++ /dev/null
@@ -1,11 +0,0 @@
-#! /bin/sh
-# replaces defpreskeleton with defskeleton
-
-for i
-do
-  if test -f "$i" -a -w "$i"
-  then
-    mv "$i" "$i".bak
-    sed 's/defpreskeleton/defskeleton/g' "$i".bak > "$i"
-  fi
-done
diff --git a/src/prover9.pl b/src/prover9.pl
deleted file mode 100644
--- a/src/prover9.pl
+++ /dev/null
@@ -1,326 +0,0 @@
-% -*- mode: prolog -*-
-
-%% CPSA tools in Prolog
-
-%% Translates the output of the cpsasas program into the syntax of
-%% Prover9.
-
-%% Known to work in SWI-Prolog, but not with GNU Prolog.
-
-%% To handle the subsort relations of the message algebra, add the
-%% following axioms.
-
-%%    all T (akey(T) -> mesg(T)).
-%%    all T (skey(T) -> mesg(T)).
-%%    all T (name(T) -> mesg(T)).
-%%    all T (text(T) -> mesg(T)).
-%%    all T (name(T) -> mesg(T)).
-
-%% Copyright (c) 2011 The MITRE Corporation
-%%
-%% This program is free software: you can redistribute it and/or
-%% modify it under the terms of the BSD License as published by the
-%% University of California.
-
-:- module(prover9, [prover9/2]).
-
-:- use_module(pp).
-:- use_module(sexpr).
-
-%% prover9(+In, +Out) Translates cpsasas program output in file In,
-%% into the syntax of Prover9 and places it in file Out.
-prover9(In, Out) :-
-	sexpr:read_sexpr_list(In, Forms),
-	open(Out, write, Stream),
-	top_forms_pp(Stream, Forms),
-	close(Stream).
-
-%% Ignore all forms except the ones that start with forall.
-top_forms_pp(_, []).
-top_forms_pp(Out, [[defsas, _, [forall|Rest]]|Forms]) :-
-	!,
-	form_to_pretty([forall|Rest], Pretty),
-	pp:pr(Out, 72, Pretty),
-	put_char(Out, '.'),
-	nl(Out),
-	nl(Out),
-	top_forms_pp(Out, Forms).
-top_forms_pp(Out, [_|Forms]) :-
-	top_forms_pp(Out, Forms).
-
-%% Formula classification
-
-form_to_pretty([equal|Terms], Pretty) :-
-	!,
-	equal(Terms, Pretty).
-form_to_pretty([implies|Forms], Pretty) :-
-	!,
-	implication(Forms, Pretty).
-form_to_pretty([and|Forms], Pretty) :-
-	!,
-	junction(and, Forms, Pretty).
-form_to_pretty([or| Forms], Pretty) :-
-	!,
-	junction(or, Forms, Pretty).
-form_to_pretty([forall|Rest], Pretty) :-
-	!,
-	quantifier(forall, Rest, Pretty).
-form_to_pretty([exists|Rest], Pretty) :-
-	!,
-	quantifier(exists, Rest, Pretty).
-form_to_pretty(Forms, Pretty) :-
-	atomic_form(Forms, Pretty).
-
-%% In general, breaks are before binary operators.
-
-%% Equality
-
-equal([L, R], Pretty) :-
-	term_to_pretty(L, Left),
-	pp:brk(1, Brk),
-	pp:atm('= ', Op),
-	term_to_pretty(R, Right),
-	pp:blo(0, [Left, Brk, Op, Right], Pretty).
-
-%% Implication
-
-implication([H, C], Pretty) :-
-	form_to_pretty(H, Hypoth),
-	pp:brk(1, Brk),
-	pp:atm('-> ', Op),
-	form_to_pretty(C, Concl),
-	pp:blo(0, [Hypoth, Brk, Op, Concl], Pretty).
-
-%% Conjunction and disjunction
-
-junction(and, [], Pretty) :-
-	pp:atm('$T', Pretty).
-junction(or, [], Pretty) :-
-	pp:atm('$F', Pretty).
-junction(_, [Form], Pretty) :-
-	!,
-	form_to_pretty(Form, Pretty).
-junction(Kind, [Form|Forms], Pretty) :-
-	form_to_pretty(Form, First),
-	junction_op(Kind, Op),
-	junction_rest(Op, Forms, Pretties),
-	pp:blo(0, [First|Pretties], Pretty).
-
-junction_op(and, Pretty) :-
-	pp:atm('&', Pretty).
-junction_op(or, Pretty) :-
-	pp:atm('|', Pretty).
-
-junction_rest(_, [], []).
-junction_rest(Op, [Form|Forms], [Brk, Op, Sp, Next|Pretties]) :-
-	pp:brk(1, Brk),
-	pp:atm(' ', Sp),
-	form_to_pretty(Form, Next),
-	junction_rest(Op, Forms, Pretties).
-
-%% Quantifiers forall and exists
-
-quantifier(_, [[], Body], Pretty) :-
-	!,
-	form_to_pretty(Body, Pretty).
-quantifier(Kind, [Decls, Body], Pretty) :-
-	quantifier_op(Kind, Op),
-	decls(Decls, SVars),
-	quantifier_preds(SVars, Vars, Preds),
-	quantifier_body(Kind, Preds, Body, SBody),
-	quantifier_rest(Op, Vars, SBody, Pretties),
-	pp:blo(2, Pretties, Pretty).
-
-quantifier_op(forall, Pretty) :-
-	pp:atm(all, Pretty).
-quantifier_op(exists, Pretty) :-
-	pp:atm(exists, Pretty).
-
-%% Collect vars in declarations.
-
-decls(Decls, SortedVars) :-
-	decls(Decls, SortedVars, []).
-
-decls([], SVars, SVars).
-decls([Decl|Decls], SVars, End) :-
-	decl(Decl, _, SVars, Middle),
-	decls(Decls, Middle, End).
-
-decl([Sort], Sort, SVars, SVars) :-
-	atom(Sort).
-decl([Var|Decl], Sort, [(Var,Sort)|SVars], End) :-
-	atom(Var),
-	decl(Decl, Sort, SVars, End).
-
-quantifier_preds([], [], []).
-quantifier_preds([(Var,Sort)|SVars], [Var|Vars], [[Sort, Var]|Preds]) :-
-        quantifier_preds(SVars, Vars, Preds).
-
-quantifier_body(_, [], Body, Body) :-
-        !.
-quantifier_body(exists, Preds, [and|Forms], [and|Conj]) :-
-        !,
-        append(Preds, Forms, Conj).
-quantifier_body(exists, Preds, Body, [and|Conj]) :-
-        append(Preds, [Body], Conj).
-quantifier_body(forall, Preds, [implies, [and|Forms], Body],
-		[implies, [and|Conj], Body]) :-
-        !,
-        append(Preds, Forms, Conj).
-quantifier_body(forall, Preds, [implies, Form, Body],
-		[implies, [and|Conj], Body]) :-
-        !,
-        append(Preds, [Form], Conj).
-quantifier_body(forall, Preds, Body, [implies, [and|Preds], Body]).
-
-quantifier_rest(_, [], Body, [Left, Brk, Pretty, Right]) :-
-	pp:atm('(', Left),
-	pp:brk(0, Brk),
-	form_to_pretty(Body, Pretty),
-	pp:atm(')', Right).
-quantifier_rest(Op, [Var|Vars], Body, [Op, Sp, V, Brk|Pretties]) :-
-	pp:atm(' ', Sp),
-	term_to_pretty(Var, V),
-	pp:brk(1, Brk),
-	quantifier_rest(Op, Vars, Body, Pretties).
-
-% Atomic formulas
-
-atomic_form([Pred], Pretty) :-
-	atom(Pred),
-	pp:atm(Pred, Pretty).
-atomic_form([Pred, Term|Terms], Pretty) :-
-	atom(Pred),
-	pp:atm(Pred, P),
-	pp:atm('(', Left),
-	term_to_pretty(Term, T),
-	terms_to_pretty(Terms, Ts),
-	pp:blo(2, [P, Left, T|Ts], Pretty).
-
-terms_to_pretty([], [Right]) :-
-	pp:atm(')', Right).
-terms_to_pretty([Term|Terms], [Comma, Brk, T|Pretties]) :-
-	pp:atm(',', Comma),
-	pp:brk(1, Brk),
-	term_to_pretty(Term, T),
-	terms_to_pretty(Terms, Pretties).
-
-term_to_pretty(Term, Pretty) :-
-	load_term(Term, Internal),
-	term_pp(Internal, Pretty).
-
-%% Load a term using CPSA's parsing rules for terms.  Also, convert
-%% variables into uppercase atoms, and constants into lowercase atoms.
-
-load_term(Term, Internal) :-
-	atom(Term),
-	upcase_symbol(Term, Internal).
-load_term(Term, Internal) :-
-	string(Term),
-	string_to_atom(Term, Atom),
-	downcase_symbol(Atom, Internal).
-load_term(Term, Term) :-
-	integer(Term),
-	Term >= 0.
-load_term([privk|Terms], Internals) :-
-	!,
-	load_term([invk, [pubk|Terms]], Internals).
-load_term([cat,Term], Internals) :-
-	!,
-	load_term(Term, Internals).
-load_term([cat,Term|Terms], [cat, X, Y]) :-
-	!,
-	load_term(Term, X),
-	load_term([cat|Terms], Y).
-load_term([enc|Terms], Internal) :-
-	!,
-	load_enc(Terms, Internal).
-load_term([Term|Terms], [Term|Internals]) :-
-	atom(Term),
-	load_terms(Terms, Internals).
-
-upcase_symbol(Atom, Symbol) :-
-	atom_chars(Atom, Chars),
-	upcase_parts(Chars, Parts),
-	atom_chars(Symbol, Parts).
-
-upcase_parts([First|Rest], [Lead|Tail]) :-
-	upcase_atom(First, Lead),
-	symbol_parts(Rest, Tail).
-
-downcase_symbol(Atom, Symbol) :-
-	atom_chars(Atom, Chars),
-	downcase_parts(Chars, Parts),
-	atom_chars(Symbol, Parts).
-
-%% The null constant is used for the name of the listener role.
-
-downcase_parts([], ['[', ']']).
-downcase_parts([First|Rest], [Lead|Tail]) :-
-	downcase_atom(First, Lead),
-	symbol_parts(Rest, Tail).
-
-symbol_parts([], []).
-symbol_parts(['-'|Rest], ['_'|Tail]) :-
-	!,
-	symbol_parts(Rest, Tail).
-symbol_parts([First|Rest], [First|Tail]) :-
-	symbol_parts(Rest, Tail).
-
-load_enc(Terms, [enc, X, Y]) :-
-	split(Terms, As, B),
-	load_term([cat|As], X),
-	load_term(B, Y).
-
-split([X], [], X).
-split([X, Y|Z], [X|A], B) :-
-	split([Y|Z], A, B).
-
-load_terms([], []).
-load_terms([T|Ts], [I|Is]) :-
-	load_term(T, I),
-	load_terms(Ts, Is).
-
-%% Pretty print a term.
-
-term_pp(Term, Pretty) :-
-	atom(Term),
-	pp:atm(Term, Pretty).
-term_pp([Term], Pretty) :-
-	atom(Term),
-	pp:atm(Term, Pretty).
-term_pp([Pred, Term|Terms], Pretty) :-
-	atom(Pred),
-	pp:atm(Pred, P),
-	pp:atm('(', Left),
-	term_pp(Term, Arg),
-	args_pp(Terms, Pretties),
-	blo(2, [P, Left, Arg|Pretties], Pretty).
-%% Natural numbers are turned into lists of nulls.
-%% The number is the length of the list.
-term_pp(0, Pretty) :-
-	pp:atm('[]', Pretty).
-term_pp(Term, Pretty) :-
-	integer(Term),
-	succ(Num, Term),
-	pp:atm('[[]', First),
-	nat_pp(Num, Pretties),
-	blo(1, [First|Pretties], Pretty).
-
-args_pp([], [Pretty]) :-
-	pp:atm(')', Pretty).
-args_pp([Term|Terms], [Comma, Brk, Pretty|Pretties]) :-
-	pp:atm(',', Comma),
-	pp:brk(1, Brk),
-	term_pp(Term, Pretty),
-	args_pp(Terms, Pretties).
-
-nat_pp(0, [Right]) :-
-	!,
-	pp:atm(']', Right).
-nat_pp(Num, [Comma, Brk, Nil|Pretties]) :-
-	succ(Num1, Num),
-	pp:atm(',', Comma),
-	pp:brk(1, Brk),
-	pp:atm('[]', Nil),
-	nat_pp(Num1, Pretties).
diff --git a/src/scala/Main.scala b/src/scala/Main.scala
deleted file mode 100644
--- a/src/scala/Main.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package cpsaextras
-
-import java.io._
-import java.util.ResourceBundle;
-
-object Main {
-
-  /**
-   * @param args the command line arguments
-   */
-  def main(args: Array[String]): Unit = {
-    if (args.length != 1) {
-      println("Usage: cpsaextras INPUT")
-      println(getVersion())
-    }
-    else {
-      val in = new BufferedReader(new FileReader(args(0)))
-      val sr = new SExprReader(args(0), in)
-      val out = new PrintWriter(System.out)
-      while (true) {
-	val x = sr.read()
-	if (x == null) {
-	  out.close()
-	  return
-	}
-	Printer.pp(out, 80, 2, x)
-	out.println()
-	out.println()
-      }
-    }
-  }
-
-  private var resources: ResourceBundle = null
-
-  private val VERSION_RESOURCES = "cpsaextras/version"
-
-  /**
-   * Get program name and a version number from a resource.
-   */
-  def getVersion() = {
-    if (resources == null)
-      resources = ResourceBundle.getBundle(VERSION_RESOURCES)
-    val program = resources.getString("program")
-    val version = resources.getString("version")
-    program + " " + version
-  }
-}
diff --git a/src/scala/Pretty.scala b/src/scala/Pretty.scala
deleted file mode 100644
--- a/src/scala/Pretty.scala
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * A simple pretty printer
- *
- * The alogithm is by Lawrence C. Paulson, who simplified an algorithm
- * by Derek C. Oppen.
- *
- * Derek C. Oppen, Prettyprinting, ACM Transactions on Programming
- * Languages and Systems, Vol 2, No. 4, October 1980, Pages 465-483.
- *
- * Copyright (c) 2010 The MITRE Corporation
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the BSD License as published by the University
- * of California.
- */
-
-/* A pretty printer based on ML programs with the following copyright
-
-(**** ML Programs from Chapter 8 of
-
-  ML for the Working Programmer, 2nd edition
-  by Lawrence C. Paulson, Computer Laboratory, University of Cambridge.
-  (Cambridge University Press, 1996)
-
-Copyright (C) 1996 by Cambridge University Press.
-Permission to copy without fee is granted provided that this copyright
-notice and the DISCLAIMER OF WARRANTY are included in any copy.
-
-DISCLAIMER OF WARRANTY.  These programs are provided `as is' without
-warranty of any kind.  We make no warranties, express or implied, that the
-programs are free of error, or are consistent with any particular standard
-of merchantability, or that they will meet your requirements for any
-particular application.  They should not be relied upon for solving a
-problem whose incorrect solution could result in injury to a person or loss
-of property.  If you do use the programs or functions in such a manner, it
-is at your own risk.  The author and publisher disclaim all liability for
-direct, incidental or consequential damages resulting from your use of
-these programs or functions.
-****)
-
-*/
-
-package cpsaextras
-
-import java.io.PrintWriter
-
-/** Abstract data type for pretty printing. */
-sealed abstract class Pretty
-private case class Str(s: String) extends Pretty
-private case class Brk(n: Int) extends Pretty
-private case class Blo(l: List[Pretty], indent: Int, n: Int) extends Pretty
-private case class Grp(l: List[Pretty], indent: Int, n: Int) extends Pretty
-
-object Pretty {
-  // Exported constructors
-
-  /** Create a string.
-   * @param s string to be printed
-   */
-  def str(s: String): Pretty = {
-    Str(s)
-  }
-
-  /** Create a break point.
-   * @param n number of spaces
-   */
-  def brk(n: Int): Pretty = {
-    Brk(n)
-  }
-
-  /** Create an indentation block.  When pretty printing, any of the
-   * break points in the list can be used.
-   * @param indent number of spaces to indent
-   * @param es a list that includes break points
-   */
-  def blo(indent: Int, es: List[Pretty]): Pretty = {
-    Blo(es, indent, len(es, 0))
-  }
-
-  /** Create an indentation group.  When pretty printing,
-   * either all or none of the break points are used.
-   * @param indent number of spaces to indent
-   * @param es a list that includes break points
-   */
-  def grp(indent: Int, es: List[Pretty]): Pretty = {
-    Grp(es, indent, len(es, 0))
-  }
-
-  private def len(es: List[Pretty], n: Int): Int = {
-    es match {
-      case Nil => n
-      case e :: es => len(es, size(e) + n)
-    }
-  }
-
-  private def size(e: Pretty): Int = {
-    e match {
-      case Str(s) => s.length
-      case Brk(n) => n
-      case Blo(_, _, n) => n
-      case Grp(_, _, n) => n
-    }
-  }
-
-  /** Print an object of type Pretty. */
-  def pr(w: PrintWriter, margin: Int, e: Pretty): Unit = {
-    printing(w, margin, List(e), margin, 0, false, margin)
-  }
-
-  private def printing(w: PrintWriter, margin: Int, es: List[Pretty],
-		       blockspace:Int, after: Int, force: Boolean,
-		       space: Int): Int = {
-    es match {
-      case Nil => space
-      case e :: es =>
-	val space1 = e match {
-	  case Str(s) =>		// Place a string
-	    w.print(s)
-	    space - s.length
-	  case Brk(n) =>		// Place breakable space
-	    if (!force && n + breakdist(es, after) <= space)
-	      blanks(w, n, space)	// Don't break
-	    else {
-	      w.println()		// Break
-	      blanks(w, margin - blockspace, margin)
-	    }
-	  case Blo(bes, indent, _) =>	// Place a block
-	    printing(w, margin, bes, space - indent,
-		     breakdist(es, after), false, space)
-	  case Grp(bes, indent, n) =>	// Place a group
-	    val dist = breakdist(es, after)
-	    printing(w, margin, bes, space - indent,
-		     dist, n + dist > space, space)
-	}
-	printing(w, margin, es, blockspace, after, force, space1)
-    }
-  }
-
-  // Find the distance to the nearest breakable space
-  private def breakdist(es: List[Pretty], after: Int): Int = {
-    es match {
-      case Nil => after
-      case Str(s) :: es => s.length + breakdist(es, after)
-      case Brk(_) :: es => 0
-      case Blo(_, _, n) :: es => n + breakdist(es, after)
-      case Grp(_, _, n) :: es => n + breakdist(es, after)
-    }
-  }
-
-  // Place spaces
-  private def blanks(w: PrintWriter, n: Int, space: Int): Int = {
-    if (n <= 0)
-      space
-    else {
-      w.print(' ')
-      blanks(w, n - 1, space - 1)
-    }
-  }
-}
diff --git a/src/scala/Printer.scala b/src/scala/Printer.scala
deleted file mode 100644
--- a/src/scala/Printer.scala
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * A CPSA specific pretty printer
- *
- * Copyright (c) 2009 The MITRE Corporation
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the BSD License as published by the
- * University of California.
- */
-
-package cpsaextras
-
-import java.io.PrintWriter
-
-object Printer {
-
-  /** CPSA specific pretty printer.
-   * The pretty printer that indents a constant amount for each list.  The
-   * top-level lists are laid out specially.  Whenever some breaks
-   * occur, all breaks are forced.  Also, breaks are only placed before
-   * strings and lists.  CPSA protocols are handled specially.  Each
-   * defrole is handled as are top-level lists.
-   *
-   * @param w the output writer
-   * @param margin the width to be filled
-   * @param indent the number of spaces in an indent
-   * @param x the S-expression to be pretty printed
-   */
-  def pp[A](w: PrintWriter, margin: Int, indent: Int, x: SExpr[A]): Unit = {
-    Pretty.pr(w, margin, pretty(indent, x))
-  }
-
-  private def pretty[A](indent: Int, x: SExpr[A]): Pretty = {
-    x match {
-      case L(_, (x@S(_, "defprotocol")) :: xs) =>
-	roles(indent, xs, List(block(indent, x), Pretty.str("(")))
-      case x@L(_, S(_, "defmacro") :: _) =>
-	block(indent, x)
-      case x@L(_, S(_, "herald") :: _) =>
-	block(indent, x)
-      case _ =>
-	group(indent, x)
-    }
-  }
-
-  // Role specific pretty printer
-  private def roles[A](indent: Int, xs: List[SExpr[A]],
-		       acc: List[Pretty]): Pretty = {
-    xs match {
-      case Nil =>
-	Pretty.grp(indent, (Pretty.str(")") :: acc).reverse)
-      case (x@S(_, _)) :: xs =>
-	roles(indent, xs, block(indent, x) :: Pretty.str(" ") :: acc)
-      case (x@Q(_, _)) :: xs =>
-	roles(indent, xs, block(indent, x) :: Pretty.brk(1) :: acc)
-      case (x@N(_, _)) :: xs =>
-	roles(indent, xs, block(indent, x) :: Pretty.str(" ") :: acc)
-      case (x@L(_, S(_, "defrole") :: _)) :: xs =>
-	roles(indent, xs, group(indent, x) :: Pretty.brk(1) :: acc)
-      case (x@L(_, _)) :: xs =>
-	roles(indent, xs, block(indent, x) :: Pretty.brk(1) :: acc)
-    }
-  }
-
-  // A pretty printer for top-level S-expressions
-  private def group[A](indent: Int, x: SExpr[A]): Pretty = {
-    x match {
-      case L(a, l) => grouplist(indent, l)
-      case _ => block(indent, x)
-    }
-  }
-
-  private def grouplist[A](indent: Int, xs: List[SExpr[A]]): Pretty = {
-    xs match {
-      case Nil => Pretty.str("()")
-      case x :: xs =>
-	grouprest(indent, xs, List(block(indent, x), Pretty.str("(")))
-    }
-  }
-
-  private def grouprest[A](indent: Int, xs: List[SExpr[A]],
-			acc: List[Pretty]): Pretty = {
-    xs match {
-      case Nil =>
-	Pretty.grp(indent, (Pretty.str(")") :: acc).reverse)
-      case (x@S(_, _)) :: xs =>
-	grouprest(indent, xs, block(indent, x) :: Pretty.str(" ") :: acc)
-      case (x@Q(_, _)) :: xs =>
-	grouprest(indent, xs, block(indent, x) :: Pretty.brk(1) :: acc)
-      case (x@N(_, _)) :: xs =>
-	grouprest(indent, xs, block(indent, x) :: Pretty.str(" ") :: acc)
-      case (x@L(_, _)) :: xs =>
-	grouprest(indent, xs, block(indent, x) :: Pretty.brk(1) :: acc)
-    }
-  }
-
-  // A pretty printer for interior lists using block style breaking.
-  private def block[A](indent: Int, x: SExpr[A]): Pretty = {
-    x match {
-      case L(a, l) => blocklist(indent, l)
-      case _ => Pretty.str(x.toString())
-    }
-  }
-
-  private def blocklist[A](indent: Int, xs: List[SExpr[A]]): Pretty = {
-    xs match {
-      case Nil => Pretty.str("()")
-      case x :: xs =>
-	blockrest(indent, xs, List(block(indent, x), Pretty.str("(")))
-    }
-  }
-
-  private def blockrest[A](indent: Int, xs: List[SExpr[A]],
-			acc: List[Pretty]): Pretty = {
-    xs match {
-      case Nil =>
-	Pretty.blo(indent, (Pretty.str(")") :: acc).reverse)
-      case x :: xs =>
-	blockrest(indent, xs, block(indent, x) :: Pretty.brk(1) :: acc)
-    }
-  }
-}
diff --git a/src/scala/SExpr.scala b/src/scala/SExpr.scala
deleted file mode 100644
--- a/src/scala/SExpr.scala
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * S-expressions
- *
-'* Copyright (c) 2010 The MITRE Corporation
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the BSD License as published by the University
- * of California.
- */
-
-package cpsaextras
-
-import java.io._
-
-/**
- * Annotated S-expressions.  Each S-expression can be annotated with
- * something of type A.
- */
-sealed abstract class SExpr[A] {
-  /** The annotation. */
-  val a: A
-}
-/** Case of a symbol. */
-case class S[A](a: A, s: String) extends SExpr[A] {
-  override def toString(): String = {
-    s.toString()
-  }
-}
-/** Case of a string. */
-case class Q[A](a: A, q: String) extends SExpr[A] {
-  override def toString(): String = {
-    "\"" + q.toString() + "\""
-  }
-}
-/** Case of a number. */
-case class N[A](a: A, n: Int) extends SExpr[A] {
-  override def toString(): String = {
-    n.toString()
-  }
-}
-/** Case of a list of S-expressions. */
-case class L[A](a: A, l: List[SExpr[A]]) extends SExpr[A] {
-  override def toString(): String = {
-    l.toString()
-  }
-}
-
-/** The file position annotation. */
-final case class Pos(file: String, line: Int, column: Int) {
-  override def toString (): String = {
-    file + ":" + line + ":" + column + ": "
-  }
-}
-
-/** An S-expression reader.
- *
- * @param file name of the input file
- * @param in stream associated with the input file
- */
-class SExprReader(file: String, in: Reader) {
-  private var line = 1			// Stream line number
-  private var column = 1		// Stream column
-
-  // A scanner token
-  private sealed abstract class Token
-  // A token for a non-list S-expression
-  private case class Atom(a: SExpr[Pos]) extends Token
-  // A token for the left parenthesis
-  private case class LParen(p: Pos) extends Token
-  // A token for the right parenthesis
-  private case class RParen(p: Pos) extends Token
-  // A token for end-of-file
-  private case object Eof extends Token
-
-  /**
-   * Reads an S-expression annotated with file positions.
-   * @return an S-expression or null on end-of-file
-   */
-  def read(): SExpr[Pos] = {
-    scan() match {
-      case Atom(a) => a
-      case LParen(p) => list(p, Nil)
-      case RParen(p) =>
-	in.close()
-	throw new IOException(p + "Close of unopened list")
-      case Eof =>
-	in.close()
-	null
-    }
-  }
-
-  // Parse a non top-level list
-  private def list(pos: Pos, acc: List[SExpr[Pos]]): SExpr[Pos] = {
-    scan() match {
-      case Atom(a) => list(pos, a :: acc)
-      case LParen(p) => list(pos, list(p, Nil) :: acc)
-      case RParen(_) => L(pos, acc.reverse)
-      case Eof =>
-	in.close()
-	throw new IOException(pos + "Unexpected end of input in list")
-    }
-  }
-
-  // Scanner
-
-  // Consume white space and then dispatch on the first character
-  private def scan(): Token = {
-    val ch = get()
-    if (Character.isWhitespace(ch))
-      scan()
-    else ch match {
-      case -1 => Eof
-      case '(' => LParen(Pos(file, line, column))
-      case ')' => RParen(Pos(file, line, column))
-      case ';' => comment()
-      case _ => atom(ch)
-    }
-  }
-
-  // Consume a comment and then resume scanning
-  private def comment(): Token = {
-    get() match {
-      case -1 => Eof
-      case '\n' => scan()
-      case _ => comment()
-    }
-  }
-
-  // Scan an atom
-  private def atom(ch: Int): Token = {
-    val p = Pos(file, line, column)	// Position of atom
-    ch match {
-      case '"' => string(p, new StringBuilder())
-      case '+' => numOrSym(p, singleton(ch))
-      case '-' => numOrSym(p, singleton(ch))
-      case _ =>
-	if (Character.isDigit(ch))
-	  number(p, singleton(ch))
-	else if (isSym(ch))
-	  symbol(p, singleton(ch))
-	else {
-	  in.close()
-	  throw new IOException(p + "Bad char in atom")
-	}
-    }
-  }
-
-  // Create a string buffer with one character
-  private def singleton(ch: Int): StringBuilder = {
-    val sb = new StringBuilder()
-    sb.append(ch.toChar)
-    sb
-  }
-
-  // Scan a string atom
-  private def string(p: Pos, sb: StringBuilder): Token = {
-    val ch = get()
-    if (ch == -1) {
-      in.close()
-      throw new IOException(p + "End of input in string")
-    }
-    else if (ch == '"')
-      Atom(Q(p, sb.toString().intern()))
-    else if (isStr(ch)) {
-      sb.append(ch.toChar)
-      string(p, sb)
-    }
-    else {
-      in.close()
-      throw new IOException(p + "Bad char for string")
-    }
-  }
-
-  // Scan a number atom
-  private def number(p: Pos, sb: StringBuilder): Token = {
-    val ch = peek()
-    if (ch == -1)
-      Atom(N(p, Integer.parseInt(sb.toString())))
-    else if (Character.isDigit(ch)) {
-      get()
-      sb.append(ch.toChar)
-      number(p, sb)
-    }
-    else if (isSym(ch)) {
-      in.close()
-      throw new IOException(p + "Bad char after number")
-    }
-    else
-      Atom(N(p, Integer.parseInt(sb.toString())))
-  }
-
-  // See if an atom is an number or a symbol
-  private def numOrSym(p: Pos, sb: StringBuilder): Token = {
-    val ch = peek()
-    if (ch == -1)
-      symbol(p, sb)
-    else if (Character.isDigit(ch))
-      number(p, sb)
-    else
-      symbol(p, sb)
-  }
-
-  // Scan a symbol
-  private def symbol(p: Pos, sb: StringBuilder): Token = {
-    val ch = peek()
-    if (ch == -1)
-      Atom(S(p, sb.toString().intern()))
-    else if (isSym(ch)) {
-      get()
-      sb.append(ch.toChar)
-      symbol(p, sb)
-    }
-    else
-      Atom(S(p, sb.toString().intern()))
-  }
-
-  // Is character a constituent of a symbol?
-  private def isSym(ch: Int) = {
-    ch match {
-      case '+' => true
-      case '-' => true
-      case '*' => true
-      case '/' => true
-      case '<' => true
-      case '=' => true
-      case '>' => true
-      case '!' => true
-      case '?' => true
-      case ':' => true
-      case '$' => true
-      case '%' => true
-      case '_' => true
-      case '&' => true
-      case '~' => true
-      case '^' => true
-      case _ => Character.isLetterOrDigit(ch)
-    }
-  }
-
-  // Is character a constituent of a string?
-  private def isStr(ch: Int) = {
-    ch match {
-      case '"' => false
-      case '\\' => false
-      case _ => !Character.isISOControl(ch)
-    }
-  }
-
-  // Character reader with look ahead
-
-  private var peeked = false		// Is look ahead active?
-  private var seen = 0			// peeked character
-
-  // Get next character and set the current file position.
-  private def get(): Int = {
-    val next =
-      if (peeked) {
-	peeked = false
-	seen
-      }
-      else
-	in.read()
-    if (next == '\n') {
-      line += 1
-      column = 1
-    }
-    else
-      column += 1
-    next
-  }
-
-  // Read ahead if need be
-  private def peek(): Int = {
-    if (peeked)
-      seen
-    else {
-      peeked = true
-      seen = in.read()
-      seen
-    }
-  }
-}
diff --git a/src/unsorted.pl b/src/unsorted.pl
deleted file mode 100644
--- a/src/unsorted.pl
+++ /dev/null
@@ -1,293 +0,0 @@
-% -*- mode: prolog -*-
-
-%% Unsorted CPSA terms
-
-%% Copyright (c) 2013 The MITRE Corporation
-%%
-%% This program is free software: you can redistribute it and/or
-%% modify it under the terms of the BSD License as published by the
-%% University of California.
-
-:- module(unsorted, [to_unsorted/3, from_unsorted/3,
-                     unify/3, unify/4, subst/3]).
-
-:- use_module(cpsa).
-
-%% An unsorted term has inclusion operations inserted to preserve sort
-%% constraints within an unsorted algebra.  It also replaces the privk
-%% operation in favor of invk o pubk.
-
-%% Term ::= Tag | Var | name(Var) | text(Var) | data(Var) | akey(Akey)
-%%       |  skey(Skey) | cat(Term, Term) | enc(Term, Term) | hash(Term).
-%% Akey ::= Var | invk(Akey) | pubk(Var) | pubk(Tag, Var).
-%% Skey ::= Var | ltk(Var, Var).
-
-%% to_unsorted(+Decls, +Term, -Uterm)
-to_unsorted(Decls, Term, Uterm) :-
-    % Add inclusion operation to each variable that needs one
-    decls_as_pairs(Decls, VarMap),
-    to_unsorted_term(VarMap, Term, Uterm).
-
-% Note that the operation privk is eliminated in favor of invk o pubk.
-to_unsorted_term(_, Term, Term) :-
-    string(Term),		% Case of tags
-    !.
-to_unsorted_term(VarMap, Term, Uterm) :-
-    atom(Term),			% Case of variables
-    lookup(Term, VarMap, Uterm).
-to_unsorted_term(VarMap, invk(Term), akey(invk(Uterm))) :-
-    to_unsorted_term(VarMap, Term, akey(Uterm)).
-to_unsorted_term(VarMap, pubk(Term), akey(pubk(Uterm))) :-
-    to_unsorted_term(VarMap, Term, name(Uterm)).
-to_unsorted_term(VarMap, pubk(Term0, Term1), akey(pubk(Uterm0, Uterm1))) :-
-    string(Uterm0),		% Case of pubk(tag, name var)
-    to_unsorted_term(VarMap, Term0, Uterm0),
-    to_unsorted_term(VarMap, Term1, name(Uterm1)).
-to_unsorted_term(VarMap, privk(Term), Uterm) :-
-    to_unsorted_term(VarMap, invk(pubk(Term)), Uterm).
-to_unsorted_term(VarMap, privk(Term0, Term1), Uterm) :-
-    to_unsorted_term(VarMap, invk(pubk(Term0, Term1)), Uterm).
-to_unsorted_term(VarMap, ltk(Term0, Term1), skey(ltk(Uterm0, Uterm1))) :-
-    to_unsorted_term(VarMap, Term0, name(Uterm0)),
-    to_unsorted_term(VarMap, Term1, name(Uterm1)).
-to_unsorted_term(VarMap, cat(Term0, Term1), cat(Uterm0, Uterm1)) :-
-    to_unsorted_term(VarMap, Term0, Uterm0),
-    to_unsorted_term(VarMap, Term1, Uterm1).
-to_unsorted_term(VarMap, enc(Term0, Term1), enc(Uterm0, Uterm1)) :-
-    to_unsorted_term(VarMap, Term0, Uterm0),
-    to_unsorted_term(VarMap, Term1, Uterm1).
-to_unsorted_term(VarMap, hash(Term), hash(Uterm)) :-
-    to_unsorted_term(VarMap, Term, Uterm).
-
-% Adds inclusion operations to variables other than those of sort mesg.
-decls_as_pairs([], []).
-decls_as_pairs([d(Sort, Vars)|Decls], VarMap) :-
-    decl_as_pairs(Vars, Sort, Decls, VarMap).
-
-decl_as_pairs([], _, Decls, VarMap) :-
-    decls_as_pairs(Decls, VarMap).
-decl_as_pairs([Var|Vars], mesg, Decls, [(Var, Var)|VarMap]) :-
-    !,
-    decl_as_pairs(Vars, mesg, Decls, VarMap).
-decl_as_pairs([Var|Vars], Sort, Decls, [(Var, Term)|VarMap]) :-
-    Term =.. [Sort, Var],
-    decl_as_pairs(Vars, Sort, Decls, VarMap).
-
-% Lookup value in an association list
-lookup(Key, [(Key, Value)|_], Value) :-
-    !.
-lookup(Key, [_|Map], Value) :-
-    lookup(Key, Map, Value).
-
-% From unsorted translates back to the order-sorted algebra
-% representation and also produces the appropriate variable
-% declaration.
-
-%% from_unsorted(+Uterm, -Term, -Decls).
-from_unsorted(InTerm, OutTerm, Decls) :-
-    from_unsorted_term(InTerm, [], OutTerm, Map),
-    pairs_as_decls(Map, [], Decls).
-
-% Convert an association list representation to a list of declarations.
-pairs_as_decls([], Decls, Decls).
-% Case when sort decls has already been constructed
-pairs_as_decls([(_, Value)|Map], Decls, Decls) :-
-    member(d(Value, _), Decls),
-    !,
-    pairs_as_decls(Map, Decls, Decls).
-% Construct one sort decl
-pairs_as_decls([(Var, Value)|Map], Decls, [d(Value, [Var|Vars])|Decls]) :-
-    select(Value, Map, Vars).
-
-% Collect vars of a given sort.
-select(_, [], []).
-select(Value, [(Var, Value)|Map], [Var|Vars]) :-
-    !,
-    select(Value, Map, Vars).
-select(Value, [_|Map], Vars) :-
-    select(Value, Map, Vars).
-
-%% The core of the translation is here.
-
-%% from_unsorted_term(+InTerm, +InMap, -OutTerm, -OutMap).
-from_unsorted_term(Term, Map, Term, Map) :-
-    string(Term),		% Tags
-    !.
-from_unsorted_term(Term, InMap, Term, OutMap) :-
-    atom(Term),			% Variables of sort mesg
-    extend_map(Term, mesg, InMap, OutMap).
-from_unsorted_term(name(Term), InMap, Term, OutMap) :-
-    atom(Term),			% Variables of sort name
-    extend_map(Term, name, InMap, OutMap).
-from_unsorted_term(text(Term), InMap, Term, OutMap) :-
-    atom(Term),			% Variables of sort text
-    extend_map(Term, text, InMap, OutMap).
-from_unsorted_term(data(Term), InMap, Term, OutMap) :-
-    atom(Term),			% Variables of sort data
-    extend_map(Term, data, InMap, OutMap).
-from_unsorted_term(skey(InTerm), InMap, OutTerm, OutMap) :-
-    from_unsorted_skey_term(InTerm, InMap, OutTerm, OutMap).
-from_unsorted_term(akey(InTerm), InMap, OutTerm, OutMap) :-
-    from_unsorted_akey_term(InTerm, InMap, OutTerm, OutMap).
-from_unsorted_term(cat(InTerm0, InTerm1), InMap, % Pairs
-		   cat(OutTerm0, OutTerm1), OutMap) :-
-    from_unsorted_term(InTerm0, InMap, OutTerm0, Map),
-    from_unsorted_term(InTerm1, Map, OutTerm1, OutMap).
-from_unsorted_term(enc(InTerm0, InTerm1), InMap, % Encryption
-		   enc(OutTerm0, OutTerm1), OutMap) :-
-    from_unsorted_term(InTerm0, InMap, OutTerm0, Map),
-    from_unsorted_term(InTerm1, Map, OutTerm1, OutMap).
-
-% Terms of sort skey
-from_unsorted_skey_term(Term, InMap, Term, OutMap) :-
-    atom(Term), 		% Variables of sort skey
-    extend_map(Term, skey, InMap, OutMap).
-% ltk: long term keys
-from_unsorted_skey_term(ltk(InTerm0, InTerm1), InMap,
-			ltk(OutTerm0, OutTerm1), OutMap) :-
-    from_unsorted_term(name(InTerm0), InMap, OutTerm0, Map),
-    from_unsorted_term(name(InTerm1), Map, OutTerm1, OutMap).
-
-% Terms of sort akey
-from_unsorted_akey_term(Term, InMap, Term, OutMap) :-
-    atom(Term), 		% Variables of sort akey
-    extend_map(Term, akey, InMap, OutMap).
-from_unsorted_akey_term(invk(pubk(InTerm)), InMap, privk(OutTerm), OutMap) :-
-    !,				% privk
-    from_unsorted_term(name(InTerm), InMap, OutTerm, OutMap).
-from_unsorted_akey_term(pubk(InTerm), InMap, pubk(OutTerm), OutMap) :-
-    from_unsorted_term(name(InTerm), InMap, OutTerm, OutMap). % pubk
-from_unsorted_akey_term(invk(InTerm), InMap, invk(OutTerm), OutMap) :-
-    from_unsorted_akey_term(InTerm, InMap, OutTerm, OutMap). % invk
-
-% Extend a mapping or fail with an inconsistent mapping.
-%% extend_map(+Key, +Value, +Map, -NewMap).
-extend_map(Key, Value, Map, Map) :-
-    lookup(Key, Map, Result),
-    !,
-    Result = Value.	   % Fails when key is mapped to another value
-% Extend Map when Key is not mapped as long as var does occur in term
-extend_map(Key, Value, Map, [(Key, Value)|Map]) :-
-    \+occurs(Key, Value).
-
-occurs(Var, Var).
-occurs(Var, Term) :-
-    Term =.. [_|Terms],
-    occurs_list(Var, Terms).
-
-occurs_list(Var, [Term|_]) :-
-    occurs(Var, Term),
-    !.
-occurs_list(Var, [_|Terms]) :-
-    occurs_list(Var, Terms).
-
-%% Unification of unsorted terms given the equation invk(invk(k)) = k.
-
-%% unify(+Term0, +Term1, -Subst).
-unify(Term0, Term1, Subst) :-
-    unify(Term0, Term1, [], Subst).
-
-%% This version extends a substition.
-%% unify(+Term0, +Term1, +InSubst, -OutSubst).
-unify(Term0, Term1, InSubst, OutSubst) :-
-    chase(Term0, InSubst, Term2),
-    chase(Term1, InSubst, Term3),
-    unify_aux(Term2, Term3, InSubst, OutSubst).
-
-%% Find the canonical variable within an equivalence class.
-%% This version of the chase handles the equation invk(invk(k)) = k.
-chase(Term, _, Term) :-
-    string(Term),		% Tag
-    !.
-chase(InTerm, Subst, OutTerm) :-
-    atom(InTerm),		% Variable
-    !,
-    chase_var(InTerm, Subst, OutTerm).
-chase(invk(InTerm), Subst, OutTerm) :-
-    !,
-    chase_invk(InTerm, Subst, OutTerm).
-chase(Term, _, Term).
-
-chase_var(InTerm, Subst, OutTerm) :-
-    lookup(InTerm, Subst, Term),
-    !,
-    chase(Term, Subst, OutTerm).
-chase_var(Term, _, Term).
-
-chase_invk(Term, _, Term) :-
-    string(Term),		% This should never happen
-    !.
-chase_invk(InTerm, Subst, OutTerm) :-
-    atom(InTerm),
-    !,
-    chase_invk_var(InTerm, Subst, OutTerm).
-chase_invk(invk(InTerm), Subst, OutTerm) :-
-    !,
-    chase(InTerm, Subst, OutTerm).
-chase_invk(Term, _, invk(Term)).
-
-chase_invk_var(InTerm, Subst, OutTerm) :-
-    lookup(InTerm, Subst, Term),
-    !,
-    chase_invk(Term, Subst, OutTerm).
-chase_invk_var(Term, _, invk(Term)).
-
-%% The remainder of unification assumes that the chase has been
-%% applied to the two terms.
-
-unify_aux(Term, Term, Subst, Subst).
-unify_aux(Term0, _, Subst, Subst) :-
-    string(Term0),
-    !,
-    fail.
-unify_aux(Term0, Term1, InSubst, OutSubst) :-
-    atom(Term0),
-    !,
-    extend_map(Term0, Term1, InSubst, OutSubst).
-unify_aux(Term0, Term1, InSubst, OutSubst) :-
-    atom(Term1),
-    !,
-    unify_aux(Term1, Term0, InSubst, OutSubst).
-%% Clauses that handle the equation
-unify_aux(invk(Term0), pubk(Term1), InSubst, OutSubst) :-
-    unify_aux(Term0, invk(pubk(Term1)), InSubst, OutSubst).
-unify_aux(pubk(Term0), invk(Term1), InSubst, OutSubst) :-
-    unify_aux(Term1, invk(pubk(Term0)), InSubst, OutSubst).
-%% Clause that handles other function symbols
-unify_aux(Term0, Term1, InSubst, OutSubst) :-
-    Term0 =.. [Fun|Terms0],
-    Term1 =.. [Fun|Terms1],
-    unify_list(Terms0, Terms1, InSubst, OutSubst).
-
-unify_list([], [], Subst, Subst).
-unify_list([Term0|Terms0], [Term1|Terms1], InSubst, OutSubst) :-
-    unify(Term0, Term1, InSubst, Subst),
-    unify_list(Terms0, Terms1, Subst, OutSubst).
-
-%% Substition
-
-%% subst(+InTerm, +Subst, -OutTerm).
-
-subst(InTerm, Subst, OutTerm) :-
-    chase(InTerm, Subst, Term),
-    subst_aux(Term, Subst, OutTerm).
-
-subst_aux(Term, _, Term) :-
-    atom(Term),
-    !.
-subst_aux(Term, _, Term) :-
-    string(Term),
-    !.
-% Apply equation
-subst_aux(invk(InTerm), Subst, OutTerm) :-
-    subst(InTerm, Subst, invk(OutTerm)),
-    !.
-subst_aux(InTerm, Subst, OutTerm) :-
-    InTerm =.. [Fun|InTerms],
-    subst_list(InTerms, Subst, OutTerms),
-    OutTerm =.. [Fun|OutTerms].
-
-subst_list([], _, []).
-subst_list([InTerm|InTerms], Subst, [OutTerm|OutTerms]) :-
-    subst(InTerm, Subst, OutTerm),
-    subst_list(InTerms, Subst, OutTerms).
diff --git a/src/zoom.js b/src/zoom.js
deleted file mode 100644
--- a/src/zoom.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// Zoom support for use with cpsagraph and option --zoom
-
-// Find the g element within a near by svg element and apply a transform
-function zoom(evt) {
-    var g = evt.target.parentNode.lastElementChild.firstElementChild;
-    g.setAttribute("transform", "scale("+evt.target.value+")");
-}
diff --git a/tst/DH_hack.scm b/tst/DH_hack.scm
deleted file mode 100644
--- a/tst/DH_hack.scm
+++ /dev/null
@@ -1,72 +0,0 @@
-;; This file demonstrates a way to model DH keys in a limited way
-;; within the Basic Crypto Algebra.  The idea is the following:
-;; the pair (x, g^x) is represented as ((invk x), x), and similarly
-;; for (y, g^y).  The owner of (invk x) computes (hash (invk x) y) and
-;; the owner of (invk y) computes (hash x (invk y)).  We add an auxiliary
-;; role (other protocols may need more auxiliary roles) that serves
-;; to transform encryptions using (hash (invk x) y) into encryptions
-;; using (hash x (invk y)).
-
-;; This has the advantage that the adversary cannot decrypt these
-;; messages if he does not have either (invk x) or (invk y).  However,
-;; the presence of the auxiliary role makes it possible for the
-;; adversary to decrypt the message by knowing either (invk x) or
-;; (invk y).
-
-;; It is currently unclear how well this solution will scale to larger
-;; protocols which may need more auxiliary roles.  This also completely
-;; ignores algebraic properties of DH and hence it excludes algebraic
-;; attacks from consideration.
-
-(herald "DH Hack" (bound 15))
-
-(defprotocol DH_hack basic
-  (defrole init1
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-     (send (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    (uniq-orig cek d x))
-  (defrole resp
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-     (recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs)))
-  (defrole commute
-    (vars (gcs name) (cek skey) (x y akey) (d data) )
-    (trace
-     (recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-     (send (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs))))
-
- (defskeleton DH_hack
-  (vars (x y akey))
-  (defstrand resp 1 (x x) (y y))
-  (non-orig (invk x) (invk y)))
-
- (defskeleton DH_hack
-  (vars (cek skey) (x y akey))
-  (defstrand resp 1 (cek cek) (x x))
-  (non-orig (invk x)))
-
-(defskeleton DH_hack
-  (vars (cek skey) (x y akey))
-  (defstrand resp 1 (cek cek) (y y))
-  (non-orig (invk y)))
-
-(defskeleton DH_hack
-  (vars (cek skey) (x y akey))
-  (defstrand resp 1 (cek cek) (x x) (y y))
-  (deflistener cek)
-  (non-orig (invk x) (invk y)))
-
- (defskeleton DH_hack
-  (vars (cek skey) (x y akey))
-  (defstrand resp 1 (cek cek) (x x))
-  (deflistener cek)
-  (non-orig (invk x)))
-
-(defskeleton DH_hack
-  (vars (cek skey) (x y akey))
-  (defstrand resp 1 (cek cek) (y y))
-  (deflistener cek)
-  (non-orig (invk y)))
diff --git a/tst/DH_hack.tst b/tst/DH_hack.tst
deleted file mode 100644
--- a/tst/DH_hack.tst
+++ /dev/null
@@ -1,804 +0,0 @@
-(herald "DH Hack" (bound 15))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from DH_hack.scm")
-(comment "Strand count bounded at 15")
-
-(defprotocol DH_hack basic
-  (defrole init1
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (send
-        (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    (uniq-orig d cek x))
-  (defrole resp
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs)))
-  (defrole commute
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs))))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (traces
-    ((recv
-       (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)))))
-  (label 0)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((1 1) (0 0)))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (operation encryption-test (added-strand commute 2)
-    (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)) (0 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)))))
-  (label 1)
-  (parent 0)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (uniq-orig d cek x)
-  (operation encryption-test (added-strand init1 1)
-    (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)) (1 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send
-       (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))))
-  (label 2)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((x x) (y y) (gcs gcs) (cek cek) (d d))))
-  (origs (cek (2 0)) (d (2 0)) (x (2 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol DH_hack basic
-  (defrole init1
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (send
-        (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    (uniq-orig d cek x))
-  (defrole resp
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs)))
-  (defrole commute
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs))))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (non-orig (invk x) (privk gcs))
-  (traces
-    ((recv
-       (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)))))
-  (label 3)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((1 1) (0 0)))
-  (non-orig (invk x) (privk gcs))
-  (operation encryption-test (added-strand commute 2)
-    (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)) (0 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)))))
-  (label 4)
-  (parent 3)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)))
-  (non-orig (invk x) (privk gcs))
-  (uniq-orig d cek x)
-  (operation encryption-test (added-strand init1 1)
-    (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)) (1 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send
-       (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))))
-  (label 5)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((cek cek) (x x) (gcs gcs) (y y) (d d))))
-  (origs (cek (2 0)) (d (2 0)) (x (2 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol DH_hack basic
-  (defrole init1
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (send
-        (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    (uniq-orig d cek x))
-  (defrole resp
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs)))
-  (defrole commute
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs))))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (y x akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (non-orig (invk y) (privk gcs))
-  (traces
-    ((recv
-       (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)))))
-  (label 6)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (y x akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((1 1) (0 0)))
-  (non-orig (invk y) (privk gcs))
-  (operation encryption-test (added-strand commute 2)
-    (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)) (0 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)))))
-  (label 7)
-  (parent 6)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (y x akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)))
-  (non-orig (invk y) (privk gcs))
-  (uniq-orig d cek x)
-  (operation encryption-test (added-strand init1 1)
-    (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)) (1 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send
-       (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))))
-  (label 8)
-  (parent 7)
-  (unrealized)
-  (shape)
-  (maps ((0) ((cek cek) (y y) (gcs gcs) (x x) (d d))))
-  (origs (cek (2 0)) (d (2 0)) (x (2 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol DH_hack basic
-  (defrole init1
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (send
-        (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    (uniq-orig d cek x))
-  (defrole resp
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs)))
-  (defrole commute
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs))))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (non-orig (invk x) (invk y) (privk gcs))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek)))
-  (label 9)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (operation encryption-test (added-strand commute 2)
-    (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)) (0 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)))))
-  (label 10)
-  (parent 9)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)) ((3 0) (1 0)) ((3 0) (2 0)))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (uniq-orig d cek x)
-  (operation encryption-test (added-strand init1 1)
-    (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)) (2 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send
-       (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))))
-  (label 11)
-  (parent 10)
-  (unrealized (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)) ((2 1) (1 0)) ((3 0) (2 0)))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (uniq-orig d cek x)
-  (operation nonce-test (displaced 4 2 commute 2) cek (1 0)
-    (enc cek (hash (invk x) y)))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send
-       (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))))
-  (label 12)
-  (parent 11)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d d-0 data) (gcs gcs-0 name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d-0) (gcs gcs-0) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)) ((3 0) (2 0)) ((3 0) (4 0)) ((4 1) (1 0)))
-  (non-orig (invk x) (invk y) (privk gcs) (privk gcs-0))
-  (uniq-orig d cek x)
-  (operation nonce-test (added-strand commute 2) cek (1 0)
-    (enc cek (hash (invk x) y)))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    ((recv
-       (enc x (enc cek (hash (invk x) y)) (enc d-0 cek) (privk gcs-0)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d-0 cek)
-          (privk gcs-0)))))
-  (label 13)
-  (parent 11)
-  (unrealized (1 0) (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener (hash (invk x) y))
-  (precedes ((2 1) (0 0)) ((3 0) (1 0)) ((3 0) (2 0)) ((4 1) (1 0)))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (uniq-orig d cek x)
-  (operation nonce-test (added-listener (hash (invk x) y)) cek (1 0)
-    (enc cek (hash (invk x) y)))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    ((recv (hash (invk x) y)) (send (hash (invk x) y))))
-  (label 14)
-  (parent 11)
-  (unrealized (4 0))
-  (comment "empty cohort"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener (hash x (invk y)))
-  (precedes ((2 1) (0 0)) ((2 1) (1 0)) ((3 0) (2 0)) ((4 1) (1 0)))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (uniq-orig d cek x)
-  (operation nonce-test (added-listener (hash x (invk y))) cek (1 0)
-    (enc cek (hash x (invk y))) (enc cek (hash (invk x) y)))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    ((recv (hash x (invk y))) (send (hash x (invk y)))))
-  (label 15)
-  (parent 12)
-  (unrealized (4 0))
-  (comment "empty cohort"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener (hash (invk x) y))
-  (precedes ((2 1) (0 0)) ((2 1) (1 0)) ((3 0) (2 0)) ((4 1) (1 0)))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (uniq-orig d cek x)
-  (operation nonce-test (added-listener (hash (invk x) y)) cek (1 0)
-    (enc cek (hash x (invk y))) (enc cek (hash (invk x) y)))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    ((recv (hash (invk x) y)) (send (hash (invk x) y))))
-  (label 16)
-  (parent 12)
-  (unrealized (4 0))
-  (comment "empty cohort"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)) ((3 0) (2 0)) ((3 0) (4 0)) ((4 1) (1 0)))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (uniq-orig d cek x)
-  (operation encryption-test (displaced 5 3 init1 1)
-    (enc x (enc cek (hash (invk x) y)) (enc d-0 cek) (privk gcs-0))
-    (4 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)))))
-  (label 17)
-  (parent 13)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener (hash x (invk y)))
-  (precedes ((2 1) (0 0)) ((3 0) (2 0)) ((3 0) (4 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (uniq-orig d cek x)
-  (operation nonce-test (added-listener (hash x (invk y))) cek (1 0)
-    (enc cek (hash x (invk y))) (enc cek (hash (invk x) y)))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv (hash x (invk y))) (send (hash x (invk y)))))
-  (label 18)
-  (parent 17)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener (hash (invk x) y))
-  (precedes ((2 1) (0 0)) ((3 0) (2 0)) ((3 0) (4 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (invk x) (invk y) (privk gcs))
-  (uniq-orig d cek x)
-  (operation nonce-test (added-listener (hash (invk x) y)) cek (1 0)
-    (enc cek (hash x (invk y))) (enc cek (hash (invk x) y)))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv (hash (invk x) y)) (send (hash (invk x) y))))
-  (label 19)
-  (parent 17)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
-
-(defprotocol DH_hack basic
-  (defrole init1
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (send
-        (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    (uniq-orig d cek x))
-  (defrole resp
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs)))
-  (defrole commute
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs))))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (non-orig (invk x) (privk gcs))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek)))
-  (label 20)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)))
-  (non-orig (invk x) (privk gcs))
-  (operation encryption-test (added-strand commute 2)
-    (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)) (0 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)))))
-  (label 21)
-  (parent 20)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)) ((3 0) (1 0)) ((3 0) (2 0)))
-  (non-orig (invk x) (privk gcs))
-  (uniq-orig d cek x)
-  (operation encryption-test (added-strand init1 1)
-    (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)) (2 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send
-       (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))))
-  (label 22)
-  (parent 21)
-  (unrealized (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)) ((2 1) (1 0)) ((3 0) (2 0)))
-  (non-orig (invk x) (privk gcs))
-  (uniq-orig d cek x)
-  (operation nonce-test (displaced 4 2 commute 2) cek (1 0)
-    (enc cek (hash (invk x) y)))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send
-       (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))))
-  (label 23)
-  (parent 22)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((cek cek) (x x) (gcs gcs) (y y) (d d))))
-  (origs (cek (3 0)) (d (3 0)) (x (3 0))))
-
-(defskeleton DH_hack
-  (vars (d d-0 data) (gcs gcs-0 name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d-0) (gcs gcs-0) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)) ((3 0) (2 0)) ((3 0) (4 0)) ((4 1) (1 0)))
-  (non-orig (invk x) (privk gcs) (privk gcs-0))
-  (uniq-orig d cek x)
-  (operation nonce-test (added-strand commute 2) cek (1 0)
-    (enc cek (hash (invk x) y)))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    ((recv
-       (enc x (enc cek (hash (invk x) y)) (enc d-0 cek) (privk gcs-0)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d-0 cek)
-          (privk gcs-0)))))
-  (label 24)
-  (parent 22)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener (hash (invk x) y))
-  (precedes ((2 1) (0 0)) ((3 0) (1 0)) ((3 0) (2 0)) ((4 1) (1 0)))
-  (non-orig (invk x) (privk gcs))
-  (uniq-orig d cek x)
-  (operation nonce-test (added-listener (hash (invk x) y)) cek (1 0)
-    (enc cek (hash (invk x) y)))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    ((recv (hash (invk x) y)) (send (hash (invk x) y))))
-  (label 25)
-  (parent 22)
-  (unrealized (4 0))
-  (comment "empty cohort"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (x y akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)) ((3 0) (2 0)) ((3 0) (4 0)) ((4 1) (1 0)))
-  (non-orig (invk x) (privk gcs))
-  (uniq-orig d cek x)
-  (operation encryption-test (displaced 5 3 init1 1)
-    (enc x (enc cek (hash (invk x) y)) (enc d-0 cek) (privk gcs-0))
-    (4 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)))))
-  (label 26)
-  (parent 24)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((cek cek) (x x) (gcs gcs) (y y) (d d))))
-  (origs (cek (3 0)) (d (3 0)) (x (3 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol DH_hack basic
-  (defrole init1
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (send
-        (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs))))
-    (uniq-orig d cek x))
-  (defrole resp
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs)))
-  (defrole commute
-    (vars (gcs name) (cek skey) (x y akey) (d data))
-    (trace
-      (recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    (non-orig (privk gcs))))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (y x akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (non-orig (invk y) (privk gcs))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek)))
-  (label 27)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (y x akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)))
-  (non-orig (invk y) (privk gcs))
-  (operation encryption-test (added-strand commute 2)
-    (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)) (0 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs)))))
-  (label 28)
-  (parent 27)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton DH_hack
-  (vars (d data) (gcs name) (cek skey) (y x akey))
-  (defstrand resp 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (deflistener cek)
-  (defstrand commute 2 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (defstrand init1 1 (d d) (gcs gcs) (cek cek) (x x) (y y))
-  (precedes ((2 1) (0 0)) ((3 0) (1 0)) ((3 0) (2 0)))
-  (non-orig (invk y) (privk gcs))
-  (uniq-orig d cek x)
-  (operation encryption-test (added-strand init1 1)
-    (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)) (2 0))
-  (traces
-    ((recv (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((recv cek) (send cek))
-    ((recv (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))
-      (send
-        (enc x (enc cek (hash x (invk y))) (enc d cek) (privk gcs))))
-    ((send
-       (enc x (enc cek (hash (invk x) y)) (enc d cek) (privk gcs)))))
-  (label 29)
-  (parent 28)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((cek cek) (y y) (gcs gcs) (x x) (d d))))
-  (origs (cek (3 0)) (d (3 0)) (x (3 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/Make.hs b/tst/Make.hs
--- a/tst/Make.hs
+++ b/tst/Make.hs
@@ -1,7 +1,7 @@
 -- A simple, CPSA specific make system
 
 module Make (cpsa, shapes, sas, annos, params, cleanse, get, set,
-             build, clean, roots) where
+              build, clean, roots) where
 
 {- Place a copy of this source file in the directory used to store
 CPSA problem statements, edit it to suit your needs, and load it into
@@ -152,7 +152,7 @@
            inputExt = cpsaExt,
            outputExt = shapesRoot ++ cpsaExt }
 
--- SAS Rule
+-- Sas Rule
 
 sas :: FilePath -> IO ()
 sas root =
diff --git a/tst/README b/tst/README
--- a/tst/README
+++ b/tst/README
@@ -7,7 +7,7 @@
 
 After running the test suite, you will note files with the extension
 .xhtml.  These are XHTML/SVG compound documents that can be viewed by
-standards compliant browsers such as Firefox and Safari.
+standards compliant browsers.
 
 New users should study CPSA's analysis of the following protocols in
 order, Needham-Schroeder (ns.xhtml), Woo-Lam (woolan.xhtml), Yahalom
diff --git a/tst/axiom2.scm b/tst/axiom2.scm
new file mode 100644
--- /dev/null
+++ b/tst/axiom2.scm
@@ -0,0 +1,73 @@
+;;; Test file to determine if we have implemented
+;;; "axiom 2" of the Stateful Protocols paper correctly.
+
+;;; This axiom states that when E1, E2, and E3 are all 
+;;; state events, and E1 produces a state that E3 consumes,
+;;; and E2 observes the state E1 produces, then E2 occurs before E3.
+
+(herald "Axiom 2 Protocol" (bound 20))
+
+
+;;; This version places E1 and E3 in distinct strands
+(defprotocol ax2 basic
+  (defrole state-maker
+    (vars (n text))
+    (trace
+     (init n)
+    )
+  (uniq-gen n)
+  )
+  (defrole state-changer
+    (vars (n text))
+    (trace
+     (tran n (cat n n)))
+  )
+  (defrole state-observer
+    (vars (m1 m2 mesg))
+    (trace
+       (obsv m1)
+       (obsv m2))
+  )
+)
+
+;;; Can we observe the events in the proper order?
+(defskeleton ax2
+  (vars (n text))
+  (defstrand state-observer 2 (m1 n) (m2 (cat n n)))
+)
+
+;;; Can we observe the events in the improper order?
+(defskeleton ax2
+  (vars (n text))
+  (defstrand state-observer 2 (m2 n) (m1 (cat n n)))
+)
+
+;;; This version places E1 and E3 in the same strand
+(defprotocol ax2a basic
+  (defrole state-maker-changer
+    (vars (n text))
+    (trace
+     (init n)
+     (tran n (cat n n))
+    )
+  (uniq-gen n)
+  )
+  (defrole state-observer
+    (vars (m1 m2 mesg))
+    (trace
+       (obsv m1)
+       (obsv m2))
+  )
+)
+
+;;; Can we observe the events in the proper order?
+(defskeleton ax2a
+  (vars (n text))
+  (defstrand state-observer 2 (m1 n) (m2 (cat n n)))
+)
+
+;;; Can we observe the events in the improper order?
+(defskeleton ax2a
+  (vars (n text))
+  (defstrand state-observer 2 (m2 n) (m1 (cat n n)))
+)
diff --git a/tst/axiom2.tst b/tst/axiom2.tst
new file mode 100644
--- /dev/null
+++ b/tst/axiom2.tst
@@ -0,0 +1,234 @@
+(herald "Axiom 2 Protocol" (bound 20))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from axiom2.scm")
+(comment "Strand count bounded at 20")
+
+(defprotocol ax2 basic
+  (defrole state-maker (vars (n text)) (trace (init n)) (uniq-gen n))
+  (defrole state-changer (vars (n text)) (trace (tran n (cat n n))))
+  (defrole state-observer
+    (vars (m1 m2 mesg))
+    (trace (obsv m1) (obsv m2))))
+
+(defskeleton ax2
+  (vars (n text))
+  (defstrand state-observer 2 (m1 n) (m2 (cat n n)))
+  (traces ((obsv n) (obsv (cat n n))))
+  (label 0)
+  (unrealized (0 0) (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ax2
+  (vars (n text))
+  (defstrand state-observer 2 (m1 n) (m2 (cat n n)))
+  (defstrand state-maker 1 (n n))
+  (precedes ((1 0) (0 0)))
+  (leadsto ((1 0) (0 0)))
+  (uniq-gen n)
+  (operation state-passing-test (added-strand state-maker 1) n (0 0))
+  (traces ((obsv n) (obsv (cat n n))) ((init n)))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ax2
+  (vars (n text))
+  (defstrand state-observer 2 (m1 n) (m2 (cat n n)))
+  (defstrand state-maker 1 (n n))
+  (defstrand state-changer 1 (n n))
+  (precedes ((1 0) (0 0)) ((1 0) (2 0)) ((2 0) (0 1)))
+  (leadsto ((1 0) (0 0)) ((2 0) (0 1)))
+  (uniq-gen n)
+  (operation state-passing-test (added-strand state-changer 1) (cat n n)
+    (0 1))
+  (traces ((obsv n) (obsv (cat n n))) ((init n)) ((tran n (cat n n))))
+  (label 2)
+  (parent 1)
+  (unrealized (2 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ax2
+  (vars (n text))
+  (defstrand state-observer 2 (m1 n) (m2 (cat n n)))
+  (defstrand state-maker 1 (n n))
+  (defstrand state-changer 1 (n n))
+  (precedes ((0 0) (2 0)) ((1 0) (0 0)) ((1 0) (2 0)) ((2 0) (0 1)))
+  (leadsto ((1 0) (0 0)) ((1 0) (2 0)) ((2 0) (0 1)))
+  (uniq-gen n)
+  (operation state-passing-test (displaced 3 1 state-maker 1) n (2 0))
+  (traces ((obsv n) (obsv (cat n n))) ((init n)) ((tran n (cat n n))))
+  (label 3)
+  (parent 2)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n n))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol ax2 basic
+  (defrole state-maker (vars (n text)) (trace (init n)) (uniq-gen n))
+  (defrole state-changer (vars (n text)) (trace (tran n (cat n n))))
+  (defrole state-observer
+    (vars (m1 m2 mesg))
+    (trace (obsv m1) (obsv m2))))
+
+(defskeleton ax2
+  (vars (n text))
+  (defstrand state-observer 2 (m1 (cat n n)) (m2 n))
+  (traces ((obsv (cat n n)) (obsv n)))
+  (label 4)
+  (unrealized (0 0) (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ax2
+  (vars (n text))
+  (defstrand state-observer 2 (m1 (cat n n)) (m2 n))
+  (defstrand state-changer 1 (n n))
+  (precedes ((1 0) (0 0)))
+  (leadsto ((1 0) (0 0)))
+  (operation state-passing-test (added-strand state-changer 1) (cat n n)
+    (0 0))
+  (traces ((obsv (cat n n)) (obsv n)) ((tran n (cat n n))))
+  (label 5)
+  (parent 4)
+  (unrealized (0 1) (1 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ax2
+  (vars (n text))
+  (defstrand state-observer 2 (m1 (cat n n)) (m2 n))
+  (defstrand state-changer 1 (n n))
+  (defstrand state-maker 1 (n n))
+  (precedes ((1 0) (0 0)) ((2 0) (1 0)))
+  (leadsto ((1 0) (0 0)) ((2 0) (1 0)))
+  (uniq-gen n)
+  (operation state-passing-test (added-strand state-maker 1) n (1 0))
+  (traces ((obsv (cat n n)) (obsv n)) ((tran n (cat n n))) ((init n)))
+  (label 6)
+  (parent 5)
+  (unrealized (0 1))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol ax2a basic
+  (defrole state-maker-changer
+    (vars (n text))
+    (trace (init n) (tran n (cat n n)))
+    (uniq-gen n))
+  (defrole state-observer
+    (vars (m1 m2 mesg))
+    (trace (obsv m1) (obsv m2))))
+
+(defskeleton ax2a
+  (vars (n text))
+  (defstrand state-observer 2 (m1 n) (m2 (cat n n)))
+  (traces ((obsv n) (obsv (cat n n))))
+  (label 7)
+  (unrealized (0 0) (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ax2a
+  (vars (n text))
+  (defstrand state-observer 2 (m1 n) (m2 (cat n n)))
+  (defstrand state-maker-changer 1 (n n))
+  (precedes ((1 0) (0 0)))
+  (leadsto ((1 0) (0 0)))
+  (uniq-gen n)
+  (operation state-passing-test (added-strand state-maker-changer 1) n
+    (0 0))
+  (traces ((obsv n) (obsv (cat n n))) ((init n)))
+  (label 8)
+  (parent 7)
+  (unrealized (0 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ax2a
+  (vars (n text))
+  (defstrand state-observer 2 (m1 n) (m2 (cat n n)))
+  (defstrand state-maker-changer 2 (n n))
+  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
+  (leadsto ((1 0) (0 0)) ((1 1) (0 1)))
+  (uniq-gen n)
+  (operation state-passing-test (displaced 1 2 state-maker-changer 2)
+    (cat n n) (0 1))
+  (traces ((obsv n) (obsv (cat n n))) ((init n) (tran n (cat n n))))
+  (label 9)
+  (parent 8)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ax2a
+  (vars (n text))
+  (defstrand state-observer 2 (m1 n) (m2 (cat n n)))
+  (defstrand state-maker-changer 2 (n n))
+  (precedes ((0 0) (1 1)) ((1 0) (0 0)) ((1 1) (0 1)))
+  (leadsto ((1 0) (0 0)) ((1 0) (1 1)) ((1 1) (0 1)))
+  (uniq-gen n)
+  (operation state-passing-test (displaced 2 1 state-maker-changer 1) n
+    (1 1))
+  (traces ((obsv n) (obsv (cat n n))) ((init n) (tran n (cat n n))))
+  (label 10)
+  (parent 9)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n n))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol ax2a basic
+  (defrole state-maker-changer
+    (vars (n text))
+    (trace (init n) (tran n (cat n n)))
+    (uniq-gen n))
+  (defrole state-observer
+    (vars (m1 m2 mesg))
+    (trace (obsv m1) (obsv m2))))
+
+(defskeleton ax2a
+  (vars (n text))
+  (defstrand state-observer 2 (m1 (cat n n)) (m2 n))
+  (traces ((obsv (cat n n)) (obsv n)))
+  (label 11)
+  (unrealized (0 0) (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ax2a
+  (vars (n text))
+  (defstrand state-observer 2 (m1 (cat n n)) (m2 n))
+  (defstrand state-maker-changer 2 (n n))
+  (precedes ((1 1) (0 0)))
+  (leadsto ((1 1) (0 0)))
+  (uniq-gen n)
+  (operation state-passing-test (added-strand state-maker-changer 2)
+    (cat n n) (0 0))
+  (traces ((obsv (cat n n)) (obsv n)) ((init n) (tran n (cat n n))))
+  (label 12)
+  (parent 11)
+  (unrealized (0 1) (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ax2a
+  (vars (n text))
+  (defstrand state-observer 2 (m1 (cat n n)) (m2 n))
+  (defstrand state-maker-changer 2 (n n))
+  (precedes ((1 1) (0 0)))
+  (leadsto ((1 0) (1 1)) ((1 1) (0 0)))
+  (uniq-gen n)
+  (operation state-passing-test (displaced 2 1 state-maker-changer 1) n
+    (1 1))
+  (traces ((obsv (cat n n)) (obsv n)) ((init n) (tran n (cat n n))))
+  (label 13)
+  (parent 12)
+  (unrealized (0 1))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
diff --git a/tst/blanchet.scm b/tst/blanchet.scm
--- a/tst/blanchet.scm
+++ b/tst/blanchet.scm
@@ -3,129 +3,82 @@
 
 (defprotocol blanchet basic
   (defrole init
-    (vars (a b name) (s skey) (d data))
+    (vars (a b akey) (s skey) (d data))
     (trace
-     (send (enc (enc s (privk a)) (pubk b)))
-     (recv (enc d s))))
+     (send (enc (enc s (invk a)) b))
+     (recv (enc d s)))
+    (uniq-orig s))
   (defrole resp
-    (vars (a b name) (s skey) (d data))
+    (vars (a b akey) (s skey) (d data))
     (trace
-     (recv (enc (enc s (privk a)) (pubk b)))
-     (send (enc d s))))
-  (comment "Blanchet's protocol using named asymmetric keys"))
+     (recv (enc (enc s (invk a)) b))
+     (send (enc d s)))
+    (uniq-orig d))
+  (comment "Blanchet's protocol"))
 
 (defskeleton blanchet
-  (vars (a b name) (s skey) (d data))
+  (vars (a b akey) (s skey) (d data))
   (defstrand init 2 (a a) (b b) (s s) (d d))
-  (non-orig (privk b))
-  (uniq-orig s)
+  (non-orig (invk b))
   (comment "Analyze from the initiator's perspective"))
 
 (defskeleton blanchet
-  (vars (a b name) (s skey) (d data))
+  (vars (a b akey) (s skey) (d data))
+  (defstrand resp 2 (a a) (b b) (s s) (d d))
+  (non-orig (invk a) (invk b))
+  (comment "Analyze from the responder's perspective"))
+
+(defskeleton blanchet
+  (vars (a b akey) (s skey) (d data))
   (defstrand init 2 (a a) (b b) (s s) (d d))
   (deflistener d)
-  (non-orig (privk b))
-  (uniq-orig s d)
+  (non-orig (invk b))
   (comment "From the initiator's perspective, is the secret leaked?"))
 
 (defskeleton blanchet
-  (vars (a b name) (s skey) (d data))
-  (defstrand resp 2 (a a) (b b) (s s) (d d))
-  (non-orig (privk a) (privk b))
-  (uniq-orig s)
-  (comment "Analyze from the responder's perspective"))
-
-(defskeleton blanchet
-  (vars (a b name) (s skey) (d data))
+  (vars (a b akey) (s skey) (d data))
   (defstrand resp 2 (a a) (b b) (s s) (d d))
   (deflistener d)
-  (non-orig (privk a) (privk b))
-  (uniq-orig s d)
+  (non-orig (invk a) (invk b))
   (comment "From the responders's perspective, is the secret leaked?"))
 
-(defprotocol blanchet-akey basic
+(defprotocol blanchet-corrected basic
   (defrole init
     (vars (a b akey) (s skey) (d data))
     (trace
-     (send (enc (enc s (invk a)) b))
-     (recv (enc d s))))
+     (send (enc (enc s b (invk a)) b))
+     (recv (enc d s)))
+    (uniq-orig s))
   (defrole resp
     (vars (a b akey) (s skey) (d data))
     (trace
-     (recv (enc (enc s (invk a)) b))
-     (send (enc d s))))
-  (comment "Blanchet's protocol using unnamed asymmetric keys"))
+     (recv (enc (enc s b (invk a)) b))
+     (send (enc d s)))
+    (uniq-orig d))
+  (comment "Corrected Blanchet's protocol"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (a b akey) (s skey) (d data))
   (defstrand init 2 (a a) (b b) (s s) (d d))
   (non-orig (invk b))
-  (uniq-orig s)
   (comment "Analyze from the initiator's perspective"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (a b akey) (s skey) (d data))
   (defstrand init 2 (a a) (b b) (s s) (d d))
   (deflistener d)
   (non-orig (invk b))
-  (uniq-orig s d)
   (comment "From the initiator's perspective, is the secret leaked?"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (a b akey) (s skey) (d data))
   (defstrand resp 2 (a a) (b b) (s s) (d d))
   (non-orig (invk a) (invk b))
-  (uniq-orig s)
   (comment "Analyze from the responder's perspective"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (a b akey) (s skey) (d data))
   (defstrand resp 2 (a a) (b b) (s s) (d d))
   (deflistener d)
   (non-orig (invk a) (invk b))
-  (uniq-orig s d)
-  (comment "From the responders's perspective, is the secret leaked?"))
-
-(defprotocol blanchet-fixed basic
-  (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace
-     (send (enc (enc s b (privk a)) (pubk b)))
-     (recv (enc d s))))
-  (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace
-     (recv (enc (enc s b (privk a)) (pubk b)))
-     (send (enc d s))))
-  (comment "Fixed Blanchet's protocol using named asymmetric keys"))
-
-(defskeleton blanchet-fixed
-  (vars (a b name) (s skey) (d data))
-  (defstrand init 2 (a a) (b b) (s s) (d d))
-  (non-orig (privk b))
-  (uniq-orig s)
-  (comment "Analyze from the initiator's perspective"))
-
-(defskeleton blanchet-fixed
-  (vars (a b name) (s skey) (d data))
-  (defstrand init 2 (a a) (b b) (s s) (d d))
-  (deflistener d)
-  (non-orig (privk b))
-  (uniq-orig s d)
-  (comment "From the initiator's perspective, is the secret leaked?"))
-
-(defskeleton blanchet-fixed
-  (vars (a b name) (s skey) (d data))
-  (defstrand resp 2 (a a) (b b) (s s) (d d))
-  (non-orig (privk a) (privk b))
-  (uniq-orig s)
-  (comment "Analyze from the responder's perspective"))
-
-(defskeleton blanchet-fixed
-  (vars (a b name) (s skey) (d data))
-  (defstrand resp 2 (a a) (b b) (s s) (d d))
-  (deflistener d)
-  (non-orig (privk a) (privk b))
-  (uniq-orig s d)
   (comment "From the responders's perspective, is the secret leaked?"))
diff --git a/tst/blanchet.tst b/tst/blanchet.tst
--- a/tst/blanchet.tst
+++ b/tst/blanchet.tst
@@ -1,54 +1,56 @@
 (herald "Blanchet's Simple Example Protocol"
   (comment "There is a flaw in this protocol by design"))
 
-(comment "CPSA 2.5.4")
+(comment "CPSA 3.2.2")
 (comment "All input read from blanchet.scm")
 
 (defprotocol blanchet basic
   (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace (send (enc (enc s (privk a)) (pubk b))) (recv (enc d s))))
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
   (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace (recv (enc (enc s (privk a)) (pubk b))) (send (enc d s))))
-  (comment "Blanchet's protocol using named asymmetric keys"))
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment "Blanchet's protocol"))
 
 (defskeleton blanchet
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (non-orig (privk b))
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (non-orig (invk b))
   (uniq-orig s)
   (comment "Analyze from the initiator's perspective")
-  (traces ((send (enc (enc s (privk a)) (pubk b))) (recv (enc d s))))
+  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s))))
   (label 0)
   (unrealized (0 1))
   (origs (s (0 0)))
   (comment "2 in cohort - 2 not yet seen"))
 
 (defskeleton blanchet
-  (vars (d data) (a b a-0 b-0 name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (defstrand resp 2 (d d) (a a-0) (b b-0) (s s))
+  (vars (d data) (s skey) (a b a-0 b-0 akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (defstrand resp 2 (d d) (s s) (a a-0) (b b-0))
   (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig s)
+  (non-orig (invk b))
+  (uniq-orig d s)
   (operation encryption-test (added-strand resp 2) (enc d s) (0 1))
-  (traces ((send (enc (enc s (privk a)) (pubk b))) (recv (enc d s)))
-    ((recv (enc (enc s (privk a-0)) (pubk b-0))) (send (enc d s))))
+  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
+    ((recv (enc (enc s (invk a-0)) b-0)) (send (enc d s))))
   (label 1)
   (parent 0)
   (unrealized (1 0))
   (comment "1 in cohort - 1 not yet seen"))
 
 (defskeleton blanchet
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
   (deflistener s)
   (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
+  (non-orig (invk b))
   (uniq-orig s)
   (operation encryption-test (added-listener s) (enc d s) (0 1))
-  (traces ((send (enc (enc s (privk a)) (pubk b))) (recv (enc d s)))
+  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
     ((recv s) (send s)))
   (label 2)
   (parent 0)
@@ -56,179 +58,185 @@
   (comment "empty cohort"))
 
 (defskeleton blanchet
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
   (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig s)
+  (non-orig (invk b))
+  (uniq-orig d s)
   (operation nonce-test (contracted (a-0 a) (b-0 b)) s (1 0)
-    (enc (enc s (privk a)) (pubk b)))
-  (traces ((send (enc (enc s (privk a)) (pubk b))) (recv (enc d s)))
-    ((recv (enc (enc s (privk a)) (pubk b))) (send (enc d s))))
+    (enc (enc s (invk a)) b))
+  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
+    ((recv (enc (enc s (invk a)) b)) (send (enc d s))))
   (label 3)
   (parent 1)
   (unrealized)
   (shape)
   (maps ((0) ((a a) (b b) (s s) (d d))))
-  (origs (s (0 0))))
+  (origs (d (1 1)) (s (0 0))))
 
 (comment "Nothing left to do")
 
 (defprotocol blanchet basic
   (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace (send (enc (enc s (privk a)) (pubk b))) (recv (enc d s))))
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
   (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace (recv (enc (enc s (privk a)) (pubk b))) (send (enc d s))))
-  (comment "Blanchet's protocol using named asymmetric keys"))
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment "Blanchet's protocol"))
 
 (defskeleton blanchet
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (deflistener d)
-  (non-orig (privk b))
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (non-orig (invk a) (invk b))
+  (uniq-orig d)
+  (comment "Analyze from the responder's perspective")
+  (traces ((recv (enc (enc s (invk a)) b)) (send (enc d s))))
+  (label 4)
+  (unrealized (0 0))
+  (origs (d (0 1)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton blanchet
+  (vars (d data) (s skey) (a b b-0 akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
+  (defstrand init 1 (s s) (a a) (b b-0))
+  (precedes ((1 0) (0 0)))
+  (non-orig (invk a) (invk b))
   (uniq-orig d s)
+  (operation encryption-test (added-strand init 1) (enc s (invk a))
+    (0 0))
+  (traces ((recv (enc (enc s (invk a)) b)) (send (enc d s)))
+    ((send (enc (enc s (invk a)) b-0))))
+  (label 5)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (s s) (d d))))
+  (origs (s (1 0)) (d (0 1))))
+
+(comment "Nothing left to do")
+
+(defprotocol blanchet basic
+  (defrole init
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
+  (defrole resp
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment "Blanchet's protocol"))
+
+(defskeleton blanchet
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
+  (deflistener d)
+  (non-orig (invk b))
+  (uniq-orig s)
   (comment "From the initiator's perspective, is the secret leaked?")
-  (traces ((send (enc (enc s (privk a)) (pubk b))) (recv (enc d s)))
+  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
     ((recv d) (send d)))
-  (label 4)
+  (label 6)
   (unrealized (0 1))
   (origs (s (0 0)))
   (comment "2 in cohort - 2 not yet seen"))
 
 (defskeleton blanchet
-  (vars (d data) (a b a-0 b-0 name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
+  (vars (d data) (s skey) (a b a-0 b-0 akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
   (deflistener d)
-  (defstrand resp 2 (d d) (a a-0) (b b-0) (s s))
+  (defstrand resp 2 (d d) (s s) (a a-0) (b b-0))
   (precedes ((0 0) (2 0)) ((2 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk b))
+  (non-orig (invk b))
   (uniq-orig d s)
   (operation encryption-test (added-strand resp 2) (enc d s) (0 1))
-  (traces ((send (enc (enc s (privk a)) (pubk b))) (recv (enc d s)))
+  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
     ((recv d) (send d))
-    ((recv (enc (enc s (privk a-0)) (pubk b-0))) (send (enc d s))))
-  (label 5)
-  (parent 4)
+    ((recv (enc (enc s (invk a-0)) b-0)) (send (enc d s))))
+  (label 7)
+  (parent 6)
   (unrealized (1 0) (2 0))
   (comment "1 in cohort - 1 not yet seen"))
 
 (defskeleton blanchet
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
   (deflistener d)
   (deflistener s)
   (precedes ((0 0) (2 0)) ((2 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig d s)
+  (non-orig (invk b))
+  (uniq-orig s)
   (operation encryption-test (added-listener s) (enc d s) (0 1))
-  (traces ((send (enc (enc s (privk a)) (pubk b))) (recv (enc d s)))
+  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
     ((recv d) (send d)) ((recv s) (send s)))
-  (label 6)
-  (parent 4)
+  (label 8)
+  (parent 6)
   (unrealized (2 0))
   (comment "empty cohort"))
 
 (defskeleton blanchet
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
   (deflistener d)
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
   (precedes ((0 0) (2 0)) ((2 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk b))
+  (non-orig (invk b))
   (uniq-orig d s)
   (operation nonce-test (contracted (a-0 a) (b-0 b)) s (2 0)
-    (enc (enc s (privk a)) (pubk b)))
-  (traces ((send (enc (enc s (privk a)) (pubk b))) (recv (enc d s)))
+    (enc (enc s (invk a)) b))
+  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
     ((recv d) (send d))
-    ((recv (enc (enc s (privk a)) (pubk b))) (send (enc d s))))
-  (label 7)
-  (parent 5)
+    ((recv (enc (enc s (invk a)) b)) (send (enc d s))))
+  (label 9)
+  (parent 7)
   (unrealized (1 0))
   (comment "1 in cohort - 1 not yet seen"))
 
 (defskeleton blanchet
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
+  (vars (d data) (s skey) (a b akey))
+  (defstrand init 2 (d d) (s s) (a a) (b b))
   (deflistener d)
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
   (deflistener s)
   (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((2 1) (0 1)) ((2 1) (1 0))
     ((3 1) (1 0)))
-  (non-orig (privk b))
+  (non-orig (invk b))
   (uniq-orig d s)
   (operation nonce-test (added-listener s) d (1 0) (enc d s))
-  (traces ((send (enc (enc s (privk a)) (pubk b))) (recv (enc d s)))
+  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
     ((recv d) (send d))
-    ((recv (enc (enc s (privk a)) (pubk b))) (send (enc d s)))
+    ((recv (enc (enc s (invk a)) b)) (send (enc d s)))
     ((recv s) (send s)))
-  (label 8)
-  (parent 7)
-  (unrealized (3 0))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
-
-(defprotocol blanchet basic
-  (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace (send (enc (enc s (privk a)) (pubk b))) (recv (enc d s))))
-  (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace (recv (enc (enc s (privk a)) (pubk b))) (send (enc d s))))
-  (comment "Blanchet's protocol using named asymmetric keys"))
-
-(defskeleton blanchet
-  (vars (d data) (a b name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (non-orig (privk a) (privk b))
-  (uniq-orig s)
-  (comment "Analyze from the responder's perspective")
-  (traces ((recv (enc (enc s (privk a)) (pubk b))) (send (enc d s))))
-  (label 9)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton blanchet
-  (vars (d data) (a b b-0 name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (defstrand init 1 (a a) (b b-0) (s s))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig s)
-  (operation encryption-test (added-strand init 1) (enc s (privk a))
-    (0 0))
-  (traces ((recv (enc (enc s (privk a)) (pubk b))) (send (enc d s)))
-    ((send (enc (enc s (privk a)) (pubk b-0)))))
   (label 10)
   (parent 9)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (s s) (d d))))
-  (origs (s (1 0))))
+  (unrealized (3 0))
+  (comment "empty cohort"))
 
 (comment "Nothing left to do")
 
 (defprotocol blanchet basic
   (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace (send (enc (enc s (privk a)) (pubk b))) (recv (enc d s))))
+    (vars (a b akey) (s skey) (d data))
+    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
   (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace (recv (enc (enc s (privk a)) (pubk b))) (send (enc d s))))
-  (comment "Blanchet's protocol using named asymmetric keys"))
+    (vars (a b akey) (s skey) (d data))
+    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment "Blanchet's protocol"))
 
 (defskeleton blanchet
-  (vars (d data) (a b name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
   (deflistener d)
-  (non-orig (privk a) (privk b))
-  (uniq-orig d s)
+  (non-orig (invk a) (invk b))
+  (uniq-orig d)
   (comment "From the responders's perspective, is the secret leaked?")
-  (traces ((recv (enc (enc s (privk a)) (pubk b))) (send (enc d s)))
+  (traces ((recv (enc (enc s (invk a)) b)) (send (enc d s)))
     ((recv d) (send d)))
   (label 11)
   (unrealized (0 0) (1 0))
@@ -236,13 +244,13 @@
   (comment "Not a skeleton"))
 
 (defskeleton blanchet
-  (vars (d data) (a b name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
   (deflistener d)
   (precedes ((0 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig d s)
-  (traces ((recv (enc (enc s (privk a)) (pubk b))) (send (enc d s)))
+  (non-orig (invk a) (invk b))
+  (uniq-orig d)
+  (traces ((recv (enc (enc s (invk a)) b)) (send (enc d s)))
     ((recv d) (send d)))
   (label 12)
   (parent 11)
@@ -251,17 +259,17 @@
   (comment "1 in cohort - 1 not yet seen"))
 
 (defskeleton blanchet
-  (vars (d data) (a b b-0 name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
+  (vars (d data) (s skey) (a b b-0 akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
   (deflistener d)
-  (defstrand init 1 (a a) (b b-0) (s s))
+  (defstrand init 1 (s s) (a a) (b b-0))
   (precedes ((0 1) (1 0)) ((2 0) (0 0)))
-  (non-orig (privk a) (privk b))
+  (non-orig (invk a) (invk b))
   (uniq-orig d s)
-  (operation encryption-test (added-strand init 1) (enc s (privk a))
+  (operation encryption-test (added-strand init 1) (enc s (invk a))
     (0 0))
-  (traces ((recv (enc (enc s (privk a)) (pubk b))) (send (enc d s)))
-    ((recv d) (send d)) ((send (enc (enc s (privk a)) (pubk b-0)))))
+  (traces ((recv (enc (enc s (invk a)) b)) (send (enc d s)))
+    ((recv d) (send d)) ((send (enc (enc s (invk a)) b-0))))
   (label 13)
   (parent 12)
   (unrealized)
@@ -271,43 +279,45 @@
 
 (comment "Nothing left to do")
 
-(defprotocol blanchet-akey basic
+(defprotocol blanchet-corrected basic
   (defrole init
     (vars (a b akey) (s skey) (d data))
-    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s))))
+    (trace (send (enc (enc s b (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
   (defrole resp
     (vars (a b akey) (s skey) (d data))
-    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s))))
-  (comment "Blanchet's protocol using unnamed asymmetric keys"))
+    (trace (recv (enc (enc s b (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment "Corrected Blanchet's protocol"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b akey))
   (defstrand init 2 (d d) (s s) (a a) (b b))
   (non-orig (invk b))
   (uniq-orig s)
   (comment "Analyze from the initiator's perspective")
-  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s))))
+  (traces ((send (enc (enc s b (invk a)) b)) (recv (enc d s))))
   (label 14)
   (unrealized (0 1))
   (origs (s (0 0)))
   (comment "2 in cohort - 2 not yet seen"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b a-0 b-0 akey))
   (defstrand init 2 (d d) (s s) (a a) (b b))
   (defstrand resp 2 (d d) (s s) (a a-0) (b b-0))
   (precedes ((0 0) (1 0)) ((1 1) (0 1)))
   (non-orig (invk b))
-  (uniq-orig s)
+  (uniq-orig d s)
   (operation encryption-test (added-strand resp 2) (enc d s) (0 1))
-  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
-    ((recv (enc (enc s (invk a-0)) b-0)) (send (enc d s))))
+  (traces ((send (enc (enc s b (invk a)) b)) (recv (enc d s)))
+    ((recv (enc (enc s b-0 (invk a-0)) b-0)) (send (enc d s))))
   (label 15)
   (parent 14)
   (unrealized (1 0))
   (comment "1 in cohort - 1 not yet seen"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b akey))
   (defstrand init 2 (d d) (s s) (a a) (b b))
   (deflistener s)
@@ -315,57 +325,59 @@
   (non-orig (invk b))
   (uniq-orig s)
   (operation encryption-test (added-listener s) (enc d s) (0 1))
-  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
+  (traces ((send (enc (enc s b (invk a)) b)) (recv (enc d s)))
     ((recv s) (send s)))
   (label 16)
   (parent 14)
   (unrealized (1 0))
   (comment "empty cohort"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b akey))
   (defstrand init 2 (d d) (s s) (a a) (b b))
   (defstrand resp 2 (d d) (s s) (a a) (b b))
   (precedes ((0 0) (1 0)) ((1 1) (0 1)))
   (non-orig (invk b))
-  (uniq-orig s)
+  (uniq-orig d s)
   (operation nonce-test (contracted (a-0 a) (b-0 b)) s (1 0)
-    (enc (enc s (invk a)) b))
-  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
-    ((recv (enc (enc s (invk a)) b)) (send (enc d s))))
+    (enc (enc s b (invk a)) b))
+  (traces ((send (enc (enc s b (invk a)) b)) (recv (enc d s)))
+    ((recv (enc (enc s b (invk a)) b)) (send (enc d s))))
   (label 17)
   (parent 15)
   (unrealized)
   (shape)
   (maps ((0) ((a a) (b b) (s s) (d d))))
-  (origs (s (0 0))))
+  (origs (d (1 1)) (s (0 0))))
 
 (comment "Nothing left to do")
 
-(defprotocol blanchet-akey basic
+(defprotocol blanchet-corrected basic
   (defrole init
     (vars (a b akey) (s skey) (d data))
-    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s))))
+    (trace (send (enc (enc s b (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
   (defrole resp
     (vars (a b akey) (s skey) (d data))
-    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s))))
-  (comment "Blanchet's protocol using unnamed asymmetric keys"))
+    (trace (recv (enc (enc s b (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment "Corrected Blanchet's protocol"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b akey))
   (defstrand init 2 (d d) (s s) (a a) (b b))
   (deflistener d)
   (non-orig (invk b))
-  (uniq-orig d s)
+  (uniq-orig s)
   (comment "From the initiator's perspective, is the secret leaked?")
-  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
+  (traces ((send (enc (enc s b (invk a)) b)) (recv (enc d s)))
     ((recv d) (send d)))
   (label 18)
   (unrealized (0 1))
   (origs (s (0 0)))
   (comment "2 in cohort - 2 not yet seen"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b a-0 b-0 akey))
   (defstrand init 2 (d d) (s s) (a a) (b b))
   (deflistener d)
@@ -374,31 +386,31 @@
   (non-orig (invk b))
   (uniq-orig d s)
   (operation encryption-test (added-strand resp 2) (enc d s) (0 1))
-  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
+  (traces ((send (enc (enc s b (invk a)) b)) (recv (enc d s)))
     ((recv d) (send d))
-    ((recv (enc (enc s (invk a-0)) b-0)) (send (enc d s))))
+    ((recv (enc (enc s b-0 (invk a-0)) b-0)) (send (enc d s))))
   (label 19)
   (parent 18)
   (unrealized (1 0) (2 0))
   (comment "1 in cohort - 1 not yet seen"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b akey))
   (defstrand init 2 (d d) (s s) (a a) (b b))
   (deflistener d)
   (deflistener s)
   (precedes ((0 0) (2 0)) ((2 1) (0 1)))
   (non-orig (invk b))
-  (uniq-orig d s)
+  (uniq-orig s)
   (operation encryption-test (added-listener s) (enc d s) (0 1))
-  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
+  (traces ((send (enc (enc s b (invk a)) b)) (recv (enc d s)))
     ((recv d) (send d)) ((recv s) (send s)))
   (label 20)
   (parent 18)
   (unrealized (2 0))
   (comment "empty cohort"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b akey))
   (defstrand init 2 (d d) (s s) (a a) (b b))
   (deflistener d)
@@ -407,16 +419,16 @@
   (non-orig (invk b))
   (uniq-orig d s)
   (operation nonce-test (contracted (a-0 a) (b-0 b)) s (2 0)
-    (enc (enc s (invk a)) b))
-  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
+    (enc (enc s b (invk a)) b))
+  (traces ((send (enc (enc s b (invk a)) b)) (recv (enc d s)))
     ((recv d) (send d))
-    ((recv (enc (enc s (invk a)) b)) (send (enc d s))))
+    ((recv (enc (enc s b (invk a)) b)) (send (enc d s))))
   (label 21)
   (parent 19)
   (unrealized (1 0))
   (comment "1 in cohort - 1 not yet seen"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b akey))
   (defstrand init 2 (d d) (s s) (a a) (b b))
   (deflistener d)
@@ -427,9 +439,9 @@
   (non-orig (invk b))
   (uniq-orig d s)
   (operation nonce-test (added-listener s) d (1 0) (enc d s))
-  (traces ((send (enc (enc s (invk a)) b)) (recv (enc d s)))
+  (traces ((send (enc (enc s b (invk a)) b)) (recv (enc d s)))
     ((recv d) (send d))
-    ((recv (enc (enc s (invk a)) b)) (send (enc d s)))
+    ((recv (enc (enc s b (invk a)) b)) (send (enc d s)))
     ((recv s) (send s)))
   (label 22)
   (parent 21)
@@ -438,78 +450,82 @@
 
 (comment "Nothing left to do")
 
-(defprotocol blanchet-akey basic
+(defprotocol blanchet-corrected basic
   (defrole init
     (vars (a b akey) (s skey) (d data))
-    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s))))
+    (trace (send (enc (enc s b (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
   (defrole resp
     (vars (a b akey) (s skey) (d data))
-    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s))))
-  (comment "Blanchet's protocol using unnamed asymmetric keys"))
+    (trace (recv (enc (enc s b (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment "Corrected Blanchet's protocol"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b akey))
   (defstrand resp 2 (d d) (s s) (a a) (b b))
   (non-orig (invk a) (invk b))
-  (uniq-orig s)
+  (uniq-orig d)
   (comment "Analyze from the responder's perspective")
-  (traces ((recv (enc (enc s (invk a)) b)) (send (enc d s))))
+  (traces ((recv (enc (enc s b (invk a)) b)) (send (enc d s))))
   (label 23)
   (unrealized (0 0))
-  (origs)
+  (origs (d (0 1)))
   (comment "1 in cohort - 1 not yet seen"))
 
-(defskeleton blanchet-akey
-  (vars (d data) (s skey) (a b b-0 akey))
+(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
   (defstrand resp 2 (d d) (s s) (a a) (b b))
-  (defstrand init 1 (s s) (a a) (b b-0))
+  (defstrand init 1 (s s) (a a) (b b))
   (precedes ((1 0) (0 0)))
   (non-orig (invk a) (invk b))
-  (uniq-orig s)
-  (operation encryption-test (added-strand init 1) (enc s (invk a))
+  (uniq-orig d s)
+  (operation encryption-test (added-strand init 1) (enc s b (invk a))
     (0 0))
-  (traces ((recv (enc (enc s (invk a)) b)) (send (enc d s)))
-    ((send (enc (enc s (invk a)) b-0))))
+  (traces ((recv (enc (enc s b (invk a)) b)) (send (enc d s)))
+    ((send (enc (enc s b (invk a)) b))))
   (label 24)
   (parent 23)
   (unrealized)
   (shape)
   (maps ((0) ((a a) (b b) (s s) (d d))))
-  (origs (s (1 0))))
+  (origs (s (1 0)) (d (0 1))))
 
 (comment "Nothing left to do")
 
-(defprotocol blanchet-akey basic
+(defprotocol blanchet-corrected basic
   (defrole init
     (vars (a b akey) (s skey) (d data))
-    (trace (send (enc (enc s (invk a)) b)) (recv (enc d s))))
+    (trace (send (enc (enc s b (invk a)) b)) (recv (enc d s)))
+    (uniq-orig s))
   (defrole resp
     (vars (a b akey) (s skey) (d data))
-    (trace (recv (enc (enc s (invk a)) b)) (send (enc d s))))
-  (comment "Blanchet's protocol using unnamed asymmetric keys"))
+    (trace (recv (enc (enc s b (invk a)) b)) (send (enc d s)))
+    (uniq-orig d))
+  (comment "Corrected Blanchet's protocol"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b akey))
   (defstrand resp 2 (d d) (s s) (a a) (b b))
   (deflistener d)
   (non-orig (invk a) (invk b))
-  (uniq-orig d s)
+  (uniq-orig d)
   (comment "From the responders's perspective, is the secret leaked?")
-  (traces ((recv (enc (enc s (invk a)) b)) (send (enc d s)))
+  (traces ((recv (enc (enc s b (invk a)) b)) (send (enc d s)))
     ((recv d) (send d)))
   (label 25)
   (unrealized (0 0) (1 0))
   (preskeleton)
   (comment "Not a skeleton"))
 
-(defskeleton blanchet-akey
+(defskeleton blanchet-corrected
   (vars (d data) (s skey) (a b akey))
   (defstrand resp 2 (d d) (s s) (a a) (b b))
   (deflistener d)
   (precedes ((0 1) (1 0)))
   (non-orig (invk a) (invk b))
-  (uniq-orig d s)
-  (traces ((recv (enc (enc s (invk a)) b)) (send (enc d s)))
+  (uniq-orig d)
+  (traces ((recv (enc (enc s b (invk a)) b)) (send (enc d s)))
     ((recv d) (send d)))
   (label 26)
   (parent 25)
@@ -517,305 +533,38 @@
   (origs (d (0 1)))
   (comment "1 in cohort - 1 not yet seen"))
 
-(defskeleton blanchet-akey
-  (vars (d data) (s skey) (a b b-0 akey))
+(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
   (defstrand resp 2 (d d) (s s) (a a) (b b))
   (deflistener d)
-  (defstrand init 1 (s s) (a a) (b b-0))
+  (defstrand init 1 (s s) (a a) (b b))
   (precedes ((0 1) (1 0)) ((2 0) (0 0)))
   (non-orig (invk a) (invk b))
   (uniq-orig d s)
-  (operation encryption-test (added-strand init 1) (enc s (invk a))
+  (operation encryption-test (added-strand init 1) (enc s b (invk a))
     (0 0))
-  (traces ((recv (enc (enc s (invk a)) b)) (send (enc d s)))
-    ((recv d) (send d)) ((send (enc (enc s (invk a)) b-0))))
+  (traces ((recv (enc (enc s b (invk a)) b)) (send (enc d s)))
+    ((recv d) (send d)) ((send (enc (enc s b (invk a)) b))))
   (label 27)
   (parent 26)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((a a) (b b) (s s) (d d))))
-  (origs (s (2 0)) (d (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol blanchet-fixed basic
-  (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace (send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s))))
-  (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace (recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s))))
-  (comment "Fixed Blanchet's protocol using named asymmetric keys"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (non-orig (privk b))
-  (uniq-orig s)
-  (comment "Analyze from the initiator's perspective")
-  (traces ((send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s))))
-  (label 28)
-  (unrealized (0 1))
-  (origs (s (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b a-0 b-0 name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (defstrand resp 2 (d d) (a a-0) (b b-0) (s s))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig s)
-  (operation encryption-test (added-strand resp 2) (enc d s) (0 1))
-  (traces ((send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s)))
-    ((recv (enc (enc s b-0 (privk a-0)) (pubk b-0))) (send (enc d s))))
-  (label 29)
-  (parent 28)
   (unrealized (1 0))
   (comment "1 in cohort - 1 not yet seen"))
 
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (deflistener s)
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig s)
-  (operation encryption-test (added-listener s) (enc d s) (0 1))
-  (traces ((send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s)))
-    ((recv s) (send s)))
-  (label 30)
-  (parent 28)
-  (unrealized (1 0))
-  (comment "empty cohort"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig s)
-  (operation nonce-test (contracted (a-0 a) (b-0 b)) s (1 0)
-    (enc (enc s b (privk a)) (pubk b)))
-  (traces ((send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s)))
-    ((recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s))))
-  (label 31)
-  (parent 29)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (s s) (d d))))
-  (origs (s (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol blanchet-fixed basic
-  (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace (send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s))))
-  (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace (recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s))))
-  (comment "Fixed Blanchet's protocol using named asymmetric keys"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (deflistener d)
-  (non-orig (privk b))
-  (uniq-orig d s)
-  (comment "From the initiator's perspective, is the secret leaked?")
-  (traces ((send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s)))
-    ((recv d) (send d)))
-  (label 32)
-  (unrealized (0 1))
-  (origs (s (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b a-0 b-0 name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (deflistener d)
-  (defstrand resp 2 (d d) (a a-0) (b b-0) (s s))
-  (precedes ((0 0) (2 0)) ((2 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk b))
-  (uniq-orig d s)
-  (operation encryption-test (added-strand resp 2) (enc d s) (0 1))
-  (traces ((send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s)))
-    ((recv d) (send d))
-    ((recv (enc (enc s b-0 (privk a-0)) (pubk b-0))) (send (enc d s))))
-  (label 33)
-  (parent 32)
-  (unrealized (1 0) (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (deflistener d)
-  (deflistener s)
-  (precedes ((0 0) (2 0)) ((2 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig d s)
-  (operation encryption-test (added-listener s) (enc d s) (0 1))
-  (traces ((send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s)))
-    ((recv d) (send d)) ((recv s) (send s)))
-  (label 34)
-  (parent 32)
-  (unrealized (2 0))
-  (comment "empty cohort"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (deflistener d)
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (precedes ((0 0) (2 0)) ((2 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk b))
-  (uniq-orig d s)
-  (operation nonce-test (contracted (a-0 a) (b-0 b)) s (2 0)
-    (enc (enc s b (privk a)) (pubk b)))
-  (traces ((send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s)))
-    ((recv d) (send d))
-    ((recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s))))
-  (label 35)
-  (parent 33)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand init 2 (d d) (a a) (b b) (s s))
-  (deflistener d)
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (deflistener s)
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((2 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk b))
-  (uniq-orig d s)
-  (operation nonce-test (added-listener s) d (1 0) (enc d s))
-  (traces ((send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s)))
-    ((recv d) (send d))
-    ((recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s)))
-    ((recv s) (send s)))
-  (label 36)
-  (parent 35)
-  (unrealized (3 0))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
-
-(defprotocol blanchet-fixed basic
-  (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace (send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s))))
-  (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace (recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s))))
-  (comment "Fixed Blanchet's protocol using named asymmetric keys"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (non-orig (privk a) (privk b))
-  (uniq-orig s)
-  (comment "Analyze from the responder's perspective")
-  (traces ((recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s))))
-  (label 37)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (defstrand init 1 (a a) (b b) (s s))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig s)
-  (operation encryption-test (added-strand init 1) (enc s b (privk a))
-    (0 0))
-  (traces ((recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s)))
-    ((send (enc (enc s b (privk a)) (pubk b)))))
-  (label 38)
-  (parent 37)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (s s) (d d))))
-  (origs (s (1 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol blanchet-fixed basic
-  (defrole init
-    (vars (a b name) (s skey) (d data))
-    (trace (send (enc (enc s b (privk a)) (pubk b))) (recv (enc d s))))
-  (defrole resp
-    (vars (a b name) (s skey) (d data))
-    (trace (recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s))))
-  (comment "Fixed Blanchet's protocol using named asymmetric keys"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (deflistener d)
-  (non-orig (privk a) (privk b))
-  (uniq-orig d s)
-  (comment "From the responders's perspective, is the secret leaked?")
-  (traces ((recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s)))
-    ((recv d) (send d)))
-  (label 39)
-  (unrealized (0 0) (1 0))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (deflistener d)
-  (precedes ((0 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig d s)
-  (traces ((recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s)))
-    ((recv d) (send d)))
-  (label 40)
-  (parent 39)
-  (unrealized (0 0))
-  (origs (d (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
-  (deflistener d)
-  (defstrand init 1 (a a) (b b) (s s))
-  (precedes ((0 1) (1 0)) ((2 0) (0 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig d s)
-  (operation encryption-test (added-strand init 1) (enc s b (privk a))
-    (0 0))
-  (traces ((recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s)))
-    ((recv d) (send d)) ((send (enc (enc s b (privk a)) (pubk b)))))
-  (label 41)
-  (parent 40)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton blanchet-fixed
-  (vars (d data) (a b name) (s skey))
-  (defstrand resp 2 (d d) (a a) (b b) (s s))
+(defskeleton blanchet-corrected
+  (vars (d data) (s skey) (a b akey))
+  (defstrand resp 2 (d d) (s s) (a a) (b b))
   (deflistener d)
-  (defstrand init 1 (a a) (b b) (s s))
+  (defstrand init 1 (s s) (a a) (b b))
   (deflistener s)
   (precedes ((0 1) (1 0)) ((2 0) (0 0)) ((2 0) (3 0)) ((3 1) (1 0)))
-  (non-orig (privk a) (privk b))
+  (non-orig (invk a) (invk b))
   (uniq-orig d s)
   (operation nonce-test (added-listener s) d (1 0) (enc d s))
-  (traces ((recv (enc (enc s b (privk a)) (pubk b))) (send (enc d s)))
-    ((recv d) (send d)) ((send (enc (enc s b (privk a)) (pubk b))))
+  (traces ((recv (enc (enc s b (invk a)) b)) (send (enc d s)))
+    ((recv d) (send d)) ((send (enc (enc s b (invk a)) b)))
     ((recv s) (send s)))
-  (label 42)
-  (parent 41)
+  (label 28)
+  (parent 27)
   (unrealized (3 0))
   (comment "empty cohort"))
 
diff --git a/tst/bltk_example.lsp b/tst/bltk_example.lsp
new file mode 100644
--- /dev/null
+++ b/tst/bltk_example.lsp
@@ -0,0 +1,24 @@
+(herald "bltk example" (algebra diffie-hellman) 
+  ;(noisochk)
+(limit 100))
+
+(defprotocol bltks diffie-hellman
+	     (defrole init
+		      (vars (I R name) (n m data))
+		      (trace
+			(send (enc I R n (bltk I R)))
+			(recv (enc R I m (bltk I R))))
+		      (uniq-orig n))
+             (defrole resp
+	              (vars (I R name) (n m data))
+	              (trace
+	        	(recv (enc I R n (bltk I R)))
+	        	(send (enc R I m (bltk I R))))
+	              (uniq-orig m))
+             )
+
+(defskeleton bltks
+  (vars (I R name))
+  (defstrand init 2 (I I) (R R))
+  (non-orig (bltk I R)))
+
diff --git a/tst/bltk_example.tst b/tst/bltk_example.tst
new file mode 100644
--- /dev/null
+++ b/tst/bltk_example.tst
@@ -0,0 +1,950 @@
+(herald "bltk example" (algebra diffie-hellman) (limit 100))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from bltk_example.lsp")
+(comment "Step count limited to 100")
+
+(defprotocol bltks diffie-hellman
+  (defrole init
+    (vars (I R name) (n m data))
+    (trace (send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    (uniq-orig n))
+  (defrole resp
+    (vars (I R name) (n m data))
+    (trace (recv (enc I R n (bltk I R))) (send (enc R I m (bltk I R))))
+    (uniq-orig m)))
+
+(defskeleton bltks
+  (vars (n m data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (non-orig (bltk I R))
+  (uniq-orig n)
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R)))))
+  (label 0)
+  (unrealized (0 1))
+  (origs (n (0 0)))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton bltks
+  (vars (n m data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand init 1 (n m) (I R) (R I))
+  (precedes ((1 0) (0 1)))
+  (non-orig (bltk I R))
+  (uniq-orig n m)
+  (operation encryption-test (added-strand init 1)
+    (enc R I m (bltk I R)) (0 1))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((send (enc R I m (bltk I R)))))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (m (1 0)) (n (0 0))))
+
+(defskeleton bltks
+  (vars (n data) (I name))
+  (defstrand init 2 (n n) (m n) (I I) (R I))
+  (non-orig (bltk I I))
+  (uniq-orig n)
+  (operation encryption-test (displaced 1 0 init 1)
+    (enc I I m (bltk I I)) (0 1))
+  (traces ((send (enc I I n (bltk I I))) (recv (enc I I n (bltk I I)))))
+  (label 2)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R I) (n n) (m n))))
+  (origs (n (0 0))))
+
+(defskeleton bltks
+  (vars (n m n-0 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (precedes ((1 1) (0 1)))
+  (non-orig (bltk I R))
+  (uniq-orig n m)
+  (operation encryption-test (added-strand resp 2)
+    (enc R I m (bltk I R)) (0 1))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R)))))
+  (label 3)
+  (parent 0)
+  (unrealized (1 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton bltks
+  (vars (n m data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n) (m m) (I I) (R R))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (bltk I R))
+  (uniq-orig n m)
+  (operation encryption-test (displaced 2 0 init 1)
+    (enc I R n-0 (bltk I R)) (1 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n (bltk I R))) (send (enc R I m (bltk I R)))))
+  (label 4)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n (0 0)) (m (1 1))))
+
+(defskeleton bltks
+  (vars (n m n-0 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand init 1 (n n-0) (I I) (R R))
+  (precedes ((1 1) (0 1)) ((2 0) (1 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0)
+  (operation encryption-test (added-strand init 1)
+    (enc I R n-0 (bltk I R)) (1 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((send (enc I R n-0 (bltk I R)))))
+  (label 5)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n-0 (2 0)) (m (1 1)) (n (0 0))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0)
+  (operation encryption-test (added-strand resp 2)
+    (enc I R n-0 (bltk I R)) (1 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R)))))
+  (label 6)
+  (parent 3)
+  (unrealized (2 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton bltks
+  (vars (n m n-0 data) (I name))
+  (defstrand init 2 (n n) (m m) (I I) (R I))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R I))
+  (defstrand resp 2 (n n) (m n-0) (I I) (R I))
+  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
+  (non-orig (bltk I I))
+  (uniq-orig n m n-0)
+  (operation encryption-test (displaced 3 0 init 1)
+    (enc R I n-1 (bltk I R)) (2 0))
+  (traces ((send (enc I I n (bltk I I))) (recv (enc I I m (bltk I I))))
+    ((recv (enc I I n-0 (bltk I I))) (send (enc I I m (bltk I I))))
+    ((recv (enc I I n (bltk I I))) (send (enc I I n-0 (bltk I I)))))
+  (label 7)
+  (parent 6)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R I) (n n) (m m))))
+  (origs (n (0 0)) (n-0 (2 1)) (m (1 1))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand init 1 (n n-1) (I R) (R I))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 0) (2 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1)
+  (operation encryption-test (added-strand init 1)
+    (enc R I n-1 (bltk I R)) (2 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((send (enc R I n-1 (bltk I R)))))
+  (label 8)
+  (parent 6)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n-1 (3 0)) (n-0 (2 1)) (m (1 1)) (n (0 0))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1)
+  (operation encryption-test (added-strand resp 2)
+    (enc R I n-1 (bltk I R)) (2 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R)))))
+  (label 9)
+  (parent 6)
+  (unrealized (3 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n) (m n-1) (I I) (R R))
+  (precedes ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1)
+  (operation encryption-test (displaced 4 0 init 1)
+    (enc I R n-2 (bltk I R)) (3 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n (bltk I R))) (send (enc R I n-1 (bltk I R)))))
+  (label 10)
+  (parent 9)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n (0 0)) (n-1 (3 1)) (n-0 (2 1)) (m (1 1))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand init 1 (n n-2) (I I) (R R))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 0) (3 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2)
+  (operation encryption-test (added-strand init 1)
+    (enc I R n-2 (bltk I R)) (3 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((send (enc I R n-2 (bltk I R)))))
+  (label 11)
+  (parent 9)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n-2 (4 0)) (n-1 (3 1)) (n-0 (2 1)) (m (1 1)) (n (0 0))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2)
+  (operation encryption-test (added-strand resp 2)
+    (enc I R n-2 (bltk I R)) (3 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R)))))
+  (label 12)
+  (parent 9)
+  (unrealized (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 data) (I name))
+  (defstrand init 2 (n n) (m m) (I I) (R I))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R I))
+  (defstrand resp 2 (n n-1) (m n-0) (I I) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R I))
+  (defstrand resp 2 (n n) (m n-2) (I I) (R I))
+  (precedes ((0 0) (4 0)) ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0))
+    ((4 1) (3 0)))
+  (non-orig (bltk I I))
+  (uniq-orig n m n-0 n-1 n-2)
+  (operation encryption-test (displaced 5 0 init 1)
+    (enc R I n-3 (bltk I R)) (4 0))
+  (traces ((send (enc I I n (bltk I I))) (recv (enc I I m (bltk I I))))
+    ((recv (enc I I n-0 (bltk I I))) (send (enc I I m (bltk I I))))
+    ((recv (enc I I n-1 (bltk I I))) (send (enc I I n-0 (bltk I I))))
+    ((recv (enc I I n-2 (bltk I I))) (send (enc I I n-1 (bltk I I))))
+    ((recv (enc I I n (bltk I I))) (send (enc I I n-2 (bltk I I)))))
+  (label 13)
+  (parent 12)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R I) (n n) (m m))))
+  (origs (n (0 0)) (n-2 (4 1)) (n-1 (3 1)) (n-0 (2 1)) (m (1 1))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand init 1 (n n-3) (I R) (R I))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 0) (4 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3)
+  (operation encryption-test (added-strand init 1)
+    (enc R I n-3 (bltk I R)) (4 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((send (enc R I n-3 (bltk I R)))))
+  (label 14)
+  (parent 12)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n-3 (5 0)) (n-2 (4 1)) (n-1 (3 1)) (n-0 (2 1)) (m (1 1))
+    (n (0 0))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3)
+  (operation encryption-test (added-strand resp 2)
+    (enc R I n-3 (bltk I R)) (4 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R)))))
+  (label 15)
+  (parent 12)
+  (unrealized (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n) (m n-3) (I I) (R R))
+  (precedes ((0 0) (5 0)) ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0))
+    ((4 1) (3 0)) ((5 1) (4 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3)
+  (operation encryption-test (displaced 6 0 init 1)
+    (enc I R n-4 (bltk I R)) (5 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n (bltk I R))) (send (enc R I n-3 (bltk I R)))))
+  (label 16)
+  (parent 15)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n (0 0)) (n-3 (5 1)) (n-2 (4 1)) (n-1 (3 1)) (n-0 (2 1))
+    (m (1 1))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand init 1 (n n-4) (I I) (R R))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 0) (5 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4)
+  (operation encryption-test (added-strand init 1)
+    (enc I R n-4 (bltk I R)) (5 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((send (enc I R n-4 (bltk I R)))))
+  (label 17)
+  (parent 15)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n-4 (6 0)) (n-3 (5 1)) (n-2 (4 1)) (n-1 (3 1)) (n-0 (2 1))
+    (m (1 1)) (n (0 0))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 1) (5 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4)
+  (operation encryption-test (added-strand resp 2)
+    (enc I R n-4 (bltk I R)) (5 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R)))))
+  (label 18)
+  (parent 15)
+  (unrealized (6 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 data) (I name))
+  (defstrand init 2 (n n) (m m) (I I) (R I))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R I))
+  (defstrand resp 2 (n n-1) (m n-0) (I I) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R I))
+  (defstrand resp 2 (n n-3) (m n-2) (I I) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R I))
+  (defstrand resp 2 (n n) (m n-4) (I I) (R I))
+  (precedes ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0))
+    ((4 1) (3 0)) ((5 1) (4 0)) ((6 1) (5 0)))
+  (non-orig (bltk I I))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4)
+  (operation encryption-test (displaced 7 0 init 1)
+    (enc R I n-5 (bltk I R)) (6 0))
+  (traces ((send (enc I I n (bltk I I))) (recv (enc I I m (bltk I I))))
+    ((recv (enc I I n-0 (bltk I I))) (send (enc I I m (bltk I I))))
+    ((recv (enc I I n-1 (bltk I I))) (send (enc I I n-0 (bltk I I))))
+    ((recv (enc I I n-2 (bltk I I))) (send (enc I I n-1 (bltk I I))))
+    ((recv (enc I I n-3 (bltk I I))) (send (enc I I n-2 (bltk I I))))
+    ((recv (enc I I n-4 (bltk I I))) (send (enc I I n-3 (bltk I I))))
+    ((recv (enc I I n (bltk I I))) (send (enc I I n-4 (bltk I I)))))
+  (label 19)
+  (parent 18)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R I) (n n) (m m))))
+  (origs (n (0 0)) (n-4 (6 1)) (n-3 (5 1)) (n-2 (4 1)) (n-1 (3 1))
+    (n-0 (2 1)) (m (1 1))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand init 1 (n n-5) (I R) (R I))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 1) (5 0)) ((7 0) (6 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5)
+  (operation encryption-test (added-strand init 1)
+    (enc R I n-5 (bltk I R)) (6 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((send (enc R I n-5 (bltk I R)))))
+  (label 20)
+  (parent 18)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n-5 (7 0)) (n-4 (6 1)) (n-3 (5 1)) (n-2 (4 1)) (n-1 (3 1))
+    (n-0 (2 1)) (m (1 1)) (n (0 0))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R R))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5)
+  (operation encryption-test (added-strand resp 2)
+    (enc R I n-5 (bltk I R)) (6 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((recv (enc I R n-6 (bltk I R))) (send (enc R I n-5 (bltk I R)))))
+  (label 21)
+  (parent 18)
+  (unrealized (7 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand resp 2 (n n) (m n-5) (I I) (R R))
+  (precedes ((0 0) (7 0)) ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0))
+    ((4 1) (3 0)) ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5)
+  (operation encryption-test (displaced 8 0 init 1)
+    (enc I R n-6 (bltk I R)) (7 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((recv (enc I R n (bltk I R))) (send (enc R I n-5 (bltk I R)))))
+  (label 22)
+  (parent 21)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n (0 0)) (n-5 (7 1)) (n-4 (6 1)) (n-3 (5 1)) (n-2 (4 1))
+    (n-1 (3 1)) (n-0 (2 1)) (m (1 1))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R R))
+  (defstrand init 1 (n n-6) (I I) (R R))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)) ((8 0) (7 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5 n-6)
+  (operation encryption-test (added-strand init 1)
+    (enc I R n-6 (bltk I R)) (7 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((recv (enc I R n-6 (bltk I R))) (send (enc R I n-5 (bltk I R))))
+    ((send (enc I R n-6 (bltk I R)))))
+  (label 23)
+  (parent 21)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n-6 (8 0)) (n-5 (7 1)) (n-4 (6 1)) (n-3 (5 1)) (n-2 (4 1))
+    (n-1 (3 1)) (n-0 (2 1)) (m (1 1)) (n (0 0))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R R))
+  (defstrand resp 2 (n n-7) (m n-6) (I R) (R I))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)) ((8 1) (7 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5 n-6)
+  (operation encryption-test (added-strand resp 2)
+    (enc I R n-6 (bltk I R)) (7 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((recv (enc I R n-6 (bltk I R))) (send (enc R I n-5 (bltk I R))))
+    ((recv (enc R I n-7 (bltk I R))) (send (enc I R n-6 (bltk I R)))))
+  (label 24)
+  (parent 21)
+  (unrealized (8 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 data) (I name))
+  (defstrand init 2 (n n) (m m) (I I) (R I))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R I))
+  (defstrand resp 2 (n n-1) (m n-0) (I I) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R I))
+  (defstrand resp 2 (n n-3) (m n-2) (I I) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R I))
+  (defstrand resp 2 (n n-5) (m n-4) (I I) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R I))
+  (defstrand resp 2 (n n) (m n-6) (I I) (R I))
+  (precedes ((0 0) (8 0)) ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0))
+    ((4 1) (3 0)) ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0))
+    ((8 1) (7 0)))
+  (non-orig (bltk I I))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5 n-6)
+  (operation encryption-test (displaced 9 0 init 1)
+    (enc R I n-7 (bltk I R)) (8 0))
+  (traces ((send (enc I I n (bltk I I))) (recv (enc I I m (bltk I I))))
+    ((recv (enc I I n-0 (bltk I I))) (send (enc I I m (bltk I I))))
+    ((recv (enc I I n-1 (bltk I I))) (send (enc I I n-0 (bltk I I))))
+    ((recv (enc I I n-2 (bltk I I))) (send (enc I I n-1 (bltk I I))))
+    ((recv (enc I I n-3 (bltk I I))) (send (enc I I n-2 (bltk I I))))
+    ((recv (enc I I n-4 (bltk I I))) (send (enc I I n-3 (bltk I I))))
+    ((recv (enc I I n-5 (bltk I I))) (send (enc I I n-4 (bltk I I))))
+    ((recv (enc I I n-6 (bltk I I))) (send (enc I I n-5 (bltk I I))))
+    ((recv (enc I I n (bltk I I))) (send (enc I I n-6 (bltk I I)))))
+  (label 25)
+  (parent 24)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R I) (n n) (m m))))
+  (origs (n (0 0)) (n-6 (8 1)) (n-5 (7 1)) (n-4 (6 1)) (n-3 (5 1))
+    (n-2 (4 1)) (n-1 (3 1)) (n-0 (2 1)) (m (1 1))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R R))
+  (defstrand resp 2 (n n-7) (m n-6) (I R) (R I))
+  (defstrand init 1 (n n-7) (I R) (R I))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 0) (8 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7)
+  (operation encryption-test (added-strand init 1)
+    (enc R I n-7 (bltk I R)) (8 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((recv (enc I R n-6 (bltk I R))) (send (enc R I n-5 (bltk I R))))
+    ((recv (enc R I n-7 (bltk I R))) (send (enc I R n-6 (bltk I R))))
+    ((send (enc R I n-7 (bltk I R)))))
+  (label 26)
+  (parent 24)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n-7 (9 0)) (n-6 (8 1)) (n-5 (7 1)) (n-4 (6 1)) (n-3 (5 1))
+    (n-2 (4 1)) (n-1 (3 1)) (n-0 (2 1)) (m (1 1)) (n (0 0))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 n-8 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R R))
+  (defstrand resp 2 (n n-7) (m n-6) (I R) (R I))
+  (defstrand resp 2 (n n-8) (m n-7) (I I) (R R))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7)
+  (operation encryption-test (added-strand resp 2)
+    (enc R I n-7 (bltk I R)) (8 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((recv (enc I R n-6 (bltk I R))) (send (enc R I n-5 (bltk I R))))
+    ((recv (enc R I n-7 (bltk I R))) (send (enc I R n-6 (bltk I R))))
+    ((recv (enc I R n-8 (bltk I R))) (send (enc R I n-7 (bltk I R)))))
+  (label 27)
+  (parent 24)
+  (unrealized (9 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R R))
+  (defstrand resp 2 (n n-7) (m n-6) (I R) (R I))
+  (defstrand resp 2 (n n) (m n-7) (I I) (R R))
+  (precedes ((0 0) (9 0)) ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0))
+    ((4 1) (3 0)) ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0))
+    ((8 1) (7 0)) ((9 1) (8 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7)
+  (operation encryption-test (displaced 10 0 init 1)
+    (enc I R n-8 (bltk I R)) (9 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((recv (enc I R n-6 (bltk I R))) (send (enc R I n-5 (bltk I R))))
+    ((recv (enc R I n-7 (bltk I R))) (send (enc I R n-6 (bltk I R))))
+    ((recv (enc I R n (bltk I R))) (send (enc R I n-7 (bltk I R)))))
+  (label 28)
+  (parent 27)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n (0 0)) (n-7 (9 1)) (n-6 (8 1)) (n-5 (7 1)) (n-4 (6 1))
+    (n-3 (5 1)) (n-2 (4 1)) (n-1 (3 1)) (n-0 (2 1)) (m (1 1))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 n-8 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R R))
+  (defstrand resp 2 (n n-7) (m n-6) (I R) (R I))
+  (defstrand resp 2 (n n-8) (m n-7) (I I) (R R))
+  (defstrand init 1 (n n-8) (I I) (R R))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 0) (9 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 n-8)
+  (operation encryption-test (added-strand init 1)
+    (enc I R n-8 (bltk I R)) (9 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((recv (enc I R n-6 (bltk I R))) (send (enc R I n-5 (bltk I R))))
+    ((recv (enc R I n-7 (bltk I R))) (send (enc I R n-6 (bltk I R))))
+    ((recv (enc I R n-8 (bltk I R))) (send (enc R I n-7 (bltk I R))))
+    ((send (enc I R n-8 (bltk I R)))))
+  (label 29)
+  (parent 27)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R R) (n n) (m m))))
+  (origs (n-8 (10 0)) (n-7 (9 1)) (n-6 (8 1)) (n-5 (7 1)) (n-4 (6 1))
+    (n-3 (5 1)) (n-2 (4 1)) (n-1 (3 1)) (n-0 (2 1)) (m (1 1))
+    (n (0 0))))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 n-8 n-9 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R R))
+  (defstrand resp 2 (n n-7) (m n-6) (I R) (R I))
+  (defstrand resp 2 (n n-8) (m n-7) (I I) (R R))
+  (defstrand resp 2 (n n-9) (m n-8) (I R) (R I))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 1) (9 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 n-8)
+  (operation encryption-test (added-strand resp 2)
+    (enc I R n-8 (bltk I R)) (9 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((recv (enc I R n-6 (bltk I R))) (send (enc R I n-5 (bltk I R))))
+    ((recv (enc R I n-7 (bltk I R))) (send (enc I R n-6 (bltk I R))))
+    ((recv (enc I R n-8 (bltk I R))) (send (enc R I n-7 (bltk I R))))
+    ((recv (enc R I n-9 (bltk I R))) (send (enc I R n-8 (bltk I R)))))
+  (label 30)
+  (parent 27)
+  (unrealized (10 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 n-8 data) (I name))
+  (defstrand init 2 (n n) (m m) (I I) (R I))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R I))
+  (defstrand resp 2 (n n-1) (m n-0) (I I) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R I))
+  (defstrand resp 2 (n n-3) (m n-2) (I I) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R I))
+  (defstrand resp 2 (n n-5) (m n-4) (I I) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R I))
+  (defstrand resp 2 (n n-7) (m n-6) (I I) (R I))
+  (defstrand resp 2 (n n-8) (m n-7) (I I) (R I))
+  (defstrand resp 2 (n n) (m n-8) (I I) (R I))
+  (precedes ((0 0) (10 0)) ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0))
+    ((4 1) (3 0)) ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0))
+    ((8 1) (7 0)) ((9 1) (8 0)) ((10 1) (9 0)))
+  (non-orig (bltk I I))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 n-8)
+  (operation encryption-test (displaced 11 0 init 1)
+    (enc R I n-9 (bltk I R)) (10 0))
+  (traces ((send (enc I I n (bltk I I))) (recv (enc I I m (bltk I I))))
+    ((recv (enc I I n-0 (bltk I I))) (send (enc I I m (bltk I I))))
+    ((recv (enc I I n-1 (bltk I I))) (send (enc I I n-0 (bltk I I))))
+    ((recv (enc I I n-2 (bltk I I))) (send (enc I I n-1 (bltk I I))))
+    ((recv (enc I I n-3 (bltk I I))) (send (enc I I n-2 (bltk I I))))
+    ((recv (enc I I n-4 (bltk I I))) (send (enc I I n-3 (bltk I I))))
+    ((recv (enc I I n-5 (bltk I I))) (send (enc I I n-4 (bltk I I))))
+    ((recv (enc I I n-6 (bltk I I))) (send (enc I I n-5 (bltk I I))))
+    ((recv (enc I I n-7 (bltk I I))) (send (enc I I n-6 (bltk I I))))
+    ((recv (enc I I n-8 (bltk I I))) (send (enc I I n-7 (bltk I I))))
+    ((recv (enc I I n (bltk I I))) (send (enc I I n-8 (bltk I I)))))
+  (label 31)
+  (parent 30)
+  (unrealized)
+  (shape)
+  (maps ((0) ((I I) (R I) (n n) (m m))))
+  (origs (n (0 0)) (n-8 (10 1)) (n-7 (9 1)) (n-6 (8 1)) (n-5 (7 1))
+    (n-4 (6 1)) (n-3 (5 1)) (n-2 (4 1)) (n-1 (3 1)) (n-0 (2 1))
+    (m (1 1))))
+
+(comment "Strand bound exceeded--aborting run")
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 n-8 n-9 data) (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R R))
+  (defstrand resp 2 (n n-7) (m n-6) (I R) (R I))
+  (defstrand resp 2 (n n-8) (m n-7) (I I) (R R))
+  (defstrand resp 2 (n n-9) (m n-8) (I R) (R I))
+  (defstrand init 1 (n n-9) (I R) (R I))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 1) (9 0)) ((11 0) (10 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 n-8 n-9)
+  (operation encryption-test (added-strand init 1)
+    (enc R I n-9 (bltk I R)) (10 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((recv (enc I R n-6 (bltk I R))) (send (enc R I n-5 (bltk I R))))
+    ((recv (enc R I n-7 (bltk I R))) (send (enc I R n-6 (bltk I R))))
+    ((recv (enc I R n-8 (bltk I R))) (send (enc R I n-7 (bltk I R))))
+    ((recv (enc R I n-9 (bltk I R))) (send (enc I R n-8 (bltk I R))))
+    ((send (enc R I n-9 (bltk I R)))))
+  (label 32)
+  (parent 30)
+  (unrealized)
+  (comment "aborted"))
+
+(defskeleton bltks
+  (vars (n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 n-8 n-9 n-10 data)
+    (I R name))
+  (defstrand init 2 (n n) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-0) (m m) (I I) (R R))
+  (defstrand resp 2 (n n-1) (m n-0) (I R) (R I))
+  (defstrand resp 2 (n n-2) (m n-1) (I I) (R R))
+  (defstrand resp 2 (n n-3) (m n-2) (I R) (R I))
+  (defstrand resp 2 (n n-4) (m n-3) (I I) (R R))
+  (defstrand resp 2 (n n-5) (m n-4) (I R) (R I))
+  (defstrand resp 2 (n n-6) (m n-5) (I I) (R R))
+  (defstrand resp 2 (n n-7) (m n-6) (I R) (R I))
+  (defstrand resp 2 (n n-8) (m n-7) (I I) (R R))
+  (defstrand resp 2 (n n-9) (m n-8) (I R) (R I))
+  (defstrand resp 2 (n n-10) (m n-9) (I I) (R R))
+  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
+    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 1) (9 0)) ((11 1) (10 0)))
+  (non-orig (bltk I R))
+  (uniq-orig n m n-0 n-1 n-2 n-3 n-4 n-5 n-6 n-7 n-8 n-9)
+  (operation encryption-test (added-strand resp 2)
+    (enc R I n-9 (bltk I R)) (10 0))
+  (traces ((send (enc I R n (bltk I R))) (recv (enc R I m (bltk I R))))
+    ((recv (enc I R n-0 (bltk I R))) (send (enc R I m (bltk I R))))
+    ((recv (enc R I n-1 (bltk I R))) (send (enc I R n-0 (bltk I R))))
+    ((recv (enc I R n-2 (bltk I R))) (send (enc R I n-1 (bltk I R))))
+    ((recv (enc R I n-3 (bltk I R))) (send (enc I R n-2 (bltk I R))))
+    ((recv (enc I R n-4 (bltk I R))) (send (enc R I n-3 (bltk I R))))
+    ((recv (enc R I n-5 (bltk I R))) (send (enc I R n-4 (bltk I R))))
+    ((recv (enc I R n-6 (bltk I R))) (send (enc R I n-5 (bltk I R))))
+    ((recv (enc R I n-7 (bltk I R))) (send (enc I R n-6 (bltk I R))))
+    ((recv (enc I R n-8 (bltk I R))) (send (enc R I n-7 (bltk I R))))
+    ((recv (enc R I n-9 (bltk I R))) (send (enc I R n-8 (bltk I R))))
+    ((recv (enc I R n-10 (bltk I R))) (send (enc R I n-9 (bltk I R)))))
+  (label 33)
+  (parent 30)
+  (unrealized (11 0))
+  (comment "aborted"))
diff --git a/tst/bltk_test.scm b/tst/bltk_test.scm
new file mode 100644
--- /dev/null
+++ b/tst/bltk_test.scm
@@ -0,0 +1,74 @@
+(herald "bltk Test File"
+	(algebra diffie-hellman)
+   (bound 12))
+
+(defprotocol test diffie-hellman
+  (defrole r
+    (vars (a b name) (n text))
+    (trace 
+     (send (enc n (bltk a b)))
+     (recv (enc n (bltk b a))))
+    (uniq-orig n)))
+
+;; This POV is realized. That demonstrates that (bltk a b) = (bltk b a)
+(defskeleton test
+   (vars (a b name))
+   (defstrand r 2 (a a) (b b))
+   (non-orig (bltk a b) (bltk b a)))
+
+;; These next two skeletons show that it is sufficient to declare
+;; either (bltk a b) or (bltk b a) to be non.
+(defskeleton test
+   (vars (a b name) (n text))
+   (defstrand r 2 (a a) (b b) (n n))
+   (deflistener n)
+   (non-orig (bltk a b)))
+
+(defskeleton test
+   (vars (a b name) (n text))
+   (defstrand r 2 (a a) (b b) (n n))
+   (deflistener n)
+   (non-orig (bltk b a)))
+
+;; This is the same protocol as above with bltk replaced with ltk
+(defprotocol test2 diffie-hellman
+  (defrole r
+    (vars (a b name) (n text))
+    (trace 
+     (send (enc n (ltk a b)))
+     (recv (enc n (ltk b a))))
+    (uniq-orig n)))
+
+;; The only way to realize this skeleton is to learn that a = b. This
+;; is in contrast to the first skeleton above. 
+(defskeleton test2
+   (vars (a b name))
+   (defstrand r 2 (a a) (b b))
+   (non-orig (ltk a b)))
+
+
+;; This protocol demonstrates that the position of the names a and b
+;; in (bltk a b) are not enough to determine which principal is
+;; inhabiting the role. The first send of each role commits to the
+;; identity of itself and its peer. 
+(defprotocol test3 diffie-hellman
+  (defrole recvr
+    (vars (a b name) (n text))
+    (trace
+     (send (cat "i am" a "you are" b))
+     (recv (enc n (bltk a b)))))
+  (defrole sender
+    (vars (a b name) (n text))
+    (trace
+     (send (cat "i am" b "you are" a))
+     (send (enc n (bltk a b))))
+    (uniq-orig n)))
+
+;; Since (bltk a b) = (bltk b a) the recvr role may receive the
+;; encryption from its inteded peer or from itself. That is, both a
+;; and b use the same key when inhabiting the sender role.
+(defskeleton test3
+  (vars (a b name))
+  (defstrand recvr 2 (a a) (b b))
+  (non-orig (bltk a b)))
+
diff --git a/tst/bltk_test.tst b/tst/bltk_test.tst
new file mode 100644
--- /dev/null
+++ b/tst/bltk_test.tst
@@ -0,0 +1,186 @@
+(herald "bltk Test File" (algebra diffie-hellman) (bound 12))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from bltk_test.scm")
+
+(defprotocol test diffie-hellman
+  (defrole r
+    (vars (a b name) (n text))
+    (trace (send (enc n (bltk a b))) (recv (enc n (bltk a b))))
+    (uniq-orig n)))
+
+(defskeleton test
+  (vars (n text) (a b name))
+  (defstrand r 2 (n n) (a a) (b b))
+  (non-orig (bltk a b))
+  (uniq-orig n)
+  (traces ((send (enc n (bltk a b))) (recv (enc n (bltk a b)))))
+  (label 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (n n))) ((0) ((a b) (b a) (n n))))
+  (origs (n (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol test diffie-hellman
+  (defrole r
+    (vars (a b name) (n text))
+    (trace (send (enc n (bltk a b))) (recv (enc n (bltk a b))))
+    (uniq-orig n)))
+
+(defskeleton test
+  (vars (n text) (a b name))
+  (defstrand r 2 (n n) (a a) (b b))
+  (deflistener n)
+  (non-orig (bltk a b))
+  (uniq-orig n)
+  (traces ((send (enc n (bltk a b))) (recv (enc n (bltk a b))))
+    ((recv n) (send n)))
+  (label 1)
+  (unrealized (1 0))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton test
+  (vars (n text) (a b name))
+  (defstrand r 2 (n n) (a a) (b b))
+  (deflistener n)
+  (precedes ((0 0) (1 0)))
+  (non-orig (bltk a b))
+  (uniq-orig n)
+  (traces ((send (enc n (bltk a b))) (recv (enc n (bltk a b))))
+    ((recv n) (send n)))
+  (label 2)
+  (parent 1)
+  (unrealized (1 0))
+  (origs (n (0 0)))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol test diffie-hellman
+  (defrole r
+    (vars (a b name) (n text))
+    (trace (send (enc n (bltk a b))) (recv (enc n (bltk a b))))
+    (uniq-orig n)))
+
+(defskeleton test
+  (vars (n text) (a b name))
+  (defstrand r 2 (n n) (a a) (b b))
+  (deflistener n)
+  (non-orig (bltk a b))
+  (uniq-orig n)
+  (traces ((send (enc n (bltk a b))) (recv (enc n (bltk a b))))
+    ((recv n) (send n)))
+  (label 3)
+  (unrealized (1 0))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton test
+  (vars (n text) (a b name))
+  (defstrand r 2 (n n) (a a) (b b))
+  (deflistener n)
+  (precedes ((0 0) (1 0)))
+  (non-orig (bltk a b))
+  (uniq-orig n)
+  (traces ((send (enc n (bltk a b))) (recv (enc n (bltk a b))))
+    ((recv n) (send n)))
+  (label 4)
+  (parent 3)
+  (unrealized (1 0))
+  (origs (n (0 0)))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol test2 diffie-hellman
+  (defrole r
+    (vars (a b name) (n text))
+    (trace (send (enc n (ltk a b))) (recv (enc n (ltk b a))))
+    (uniq-orig n)))
+
+(defskeleton test2
+  (vars (n text) (a b name))
+  (defstrand r 2 (n n) (a a) (b b))
+  (non-orig (ltk a b))
+  (uniq-orig n)
+  (traces ((send (enc n (ltk a b))) (recv (enc n (ltk b a)))))
+  (label 5)
+  (unrealized (0 1))
+  (origs (n (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton test2
+  (vars (n text) (a name))
+  (defstrand r 2 (n n) (a a) (b a))
+  (non-orig (ltk a a))
+  (uniq-orig n)
+  (operation nonce-test (contracted (b a)) n (0 1) (enc n (ltk a a)))
+  (traces ((send (enc n (ltk a a))) (recv (enc n (ltk a a)))))
+  (label 6)
+  (parent 5)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b a) (n n))))
+  (origs (n (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol test3 diffie-hellman
+  (defrole recvr
+    (vars (a b name) (n text))
+    (trace (send (cat "i am" a "you are" b)) (recv (enc n (bltk a b)))))
+  (defrole sender
+    (vars (a b name) (n text))
+    (trace (send (cat "i am" b "you are" a)) (send (enc n (bltk a b))))
+    (uniq-orig n)))
+
+(defskeleton test3
+  (vars (n text) (a b name))
+  (defstrand recvr 2 (n n) (a a) (b b))
+  (non-orig (bltk a b))
+  (traces ((send (cat "i am" a "you are" b)) (recv (enc n (bltk a b)))))
+  (label 7)
+  (unrealized (0 1))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton test3
+  (vars (n text) (a b name))
+  (defstrand recvr 2 (n n) (a a) (b b))
+  (defstrand sender 2 (n n) (a b) (b a))
+  (precedes ((1 1) (0 1)))
+  (non-orig (bltk a b))
+  (uniq-orig n)
+  (operation encryption-test (added-strand sender 2) (enc n (bltk a b))
+    (0 1))
+  (traces ((send (cat "i am" a "you are" b)) (recv (enc n (bltk a b))))
+    ((send (cat "i am" a "you are" b)) (send (enc n (bltk a b)))))
+  (label 8)
+  (parent 7)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (n n))))
+  (origs (n (1 1))))
+
+(defskeleton test3
+  (vars (n text) (a b name))
+  (defstrand recvr 2 (n n) (a a) (b b))
+  (defstrand sender 2 (n n) (a a) (b b))
+  (precedes ((1 1) (0 1)))
+  (non-orig (bltk a b))
+  (uniq-orig n)
+  (operation encryption-test (added-strand sender 2) (enc n (bltk a b))
+    (0 1))
+  (traces ((send (cat "i am" a "you are" b)) (recv (enc n (bltk a b))))
+    ((send (cat "i am" b "you are" a)) (send (enc n (bltk a b)))))
+  (label 9)
+  (parent 7)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (n n))))
+  (origs (n (1 1))))
+
+(comment "Nothing left to do")
diff --git a/tst/completeness-test.scm b/tst/completeness-test.scm
deleted file mode 100644
--- a/tst/completeness-test.scm
+++ /dev/null
@@ -1,56 +0,0 @@
-;; In this protocol an initiator verifies the liveness
-;; of a responder via the first two messages of a
-;; Needham-Schroeder exchange.  The initiator then
-;; sends an ok message to a probe who is waiting
-;; to hear if the responder is live.
-
-(defprotocol completeness-test basic
- (defrole init
-   (vars (a b name) (n text) (s skey))
-   (trace
-    (send (enc a n (pubk b)))
-    (recv (enc n (pubk a)))
-    (send (enc "ok" s))))
- (defrole resp
-   (vars (a b name) (n text))
-   (trace
-    (recv (enc a n (pubk b)))
-    (send (enc n (pubk a)))))
- (defrole probe
-   (vars (s skey))
-   (trace
-    (recv (enc "ok" s)))))
-
-;; These first two skeletons should be compared to
-;; each other.  They only differ in the order in which
-;; the strands are listed.  CPSA should find the same
-;; shapes for both of them.  However, CPSA 1.5.3
-;; only finds one shape for the first one.
-
-(defskeleton completeness-test
-  (vars (b name) (n text) (s skey))
-  (defstrand init 3 (b b) (n n))
-  (defstrand probe 1 (s s))
-  (non-orig s (privk b))
-  (uniq-orig n))
-
-(defskeleton completeness-test
-  (vars (b name) (n text) (s skey))
-  (defstrand probe 1 (s s))
-  (defstrand init 3 (b b) (n n))
-  (non-orig s (privk b))
-  (uniq-orig n))
-
-(defskeleton completeness-test
-  (vars (b name) (n text) (s skey))
-  (defstrand init 2 (b b) (n n))
-  (defstrand probe 1 (s s))
-  (non-orig s (privk b))
-  (uniq-orig n))
-
-(defskeleton completeness-test
-  (vars (b name) (n text) (s skey))
-  (defstrand probe 1 (s s))
-  (defstrand init 2 (b b) (n n))
-  (non-orig s (privk b))
-  (uniq-orig n))
diff --git a/tst/completeness-test.tst b/tst/completeness-test.tst
deleted file mode 100644
--- a/tst/completeness-test.tst
+++ /dev/null
@@ -1,388 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from completeness-test.scm")
-
-(defprotocol completeness-test basic
-  (defrole init
-    (vars (a b name) (n text) (s skey))
-    (trace (send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s))))
-  (defrole resp
-    (vars (a b name) (n text))
-    (trace (recv (enc a n (pubk b))) (send (enc n (pubk a)))))
-  (defrole probe (vars (s skey)) (trace (recv (enc "ok" s)))))
-
-(defskeleton completeness-test
-  (vars (n text) (b a name) (s s-0 skey))
-  (defstrand init 3 (n n) (a a) (b b) (s s-0))
-  (defstrand probe 1 (s s))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (traces
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s-0))) ((recv (enc "ok" s))))
-  (label 0)
-  (unrealized (0 1) (1 0))
-  (origs (n (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton completeness-test
-  (vars (n text) (b a name) (s skey))
-  (defstrand init 3 (n n) (a a) (b b) (s s))
-  (defstrand probe 1 (s s))
-  (precedes ((0 2) (1 0)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation encryption-test (displaced 2 0 init 3) (enc "ok" s-0)
-    (1 0))
-  (traces
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s))) ((recv (enc "ok" s))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1))
-  (origs (n (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton completeness-test
-  (vars (n n-0 text) (b a a-0 b-0 name) (s s-0 skey))
-  (defstrand init 3 (n n) (a a) (b b) (s s-0))
-  (defstrand probe 1 (s s))
-  (defstrand init 3 (n n-0) (a a-0) (b b-0) (s s))
-  (precedes ((2 2) (1 0)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation encryption-test (added-strand init 3) (enc "ok" s) (1 0))
-  (traces
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s-0))) ((recv (enc "ok" s)))
-    ((send (enc a-0 n-0 (pubk b-0))) (recv (enc n-0 (pubk a-0)))
-      (send (enc "ok" s))))
-  (label 2)
-  (parent 0)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton completeness-test
-  (vars (n text) (b a name) (s skey))
-  (defstrand init 3 (n n) (a a) (b b) (s s))
-  (defstrand probe 1 (s s))
-  (defstrand resp 2 (n n) (a a) (b b))
-  (precedes ((0 0) (2 0)) ((0 2) (1 0)) ((2 1) (0 1)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation nonce-test (added-strand resp 2) n (0 1)
-    (enc a n (pubk b)))
-  (traces
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s))) ((recv (enc "ok" s)))
-    ((recv (enc a n (pubk b))) (send (enc n (pubk a)))))
-  (label 3)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((b b) (n n) (s s) (a a) (s-0 s))))
-  (origs (n (0 0))))
-
-(defskeleton completeness-test
-  (vars (n n-0 text) (b a a-0 b-0 name) (s s-0 skey))
-  (defstrand init 3 (n n) (a a) (b b) (s s-0))
-  (defstrand probe 1 (s s))
-  (defstrand init 3 (n n-0) (a a-0) (b b-0) (s s))
-  (defstrand resp 2 (n n) (a a) (b b))
-  (precedes ((0 0) (3 0)) ((2 2) (1 0)) ((3 1) (0 1)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation nonce-test (added-strand resp 2) n (0 1)
-    (enc a n (pubk b)))
-  (traces
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s-0))) ((recv (enc "ok" s)))
-    ((send (enc a-0 n-0 (pubk b-0))) (recv (enc n-0 (pubk a-0)))
-      (send (enc "ok" s)))
-    ((recv (enc a n (pubk b))) (send (enc n (pubk a)))))
-  (label 4)
-  (parent 2)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((b b) (n n) (s s) (a a) (s-0 s-0))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol completeness-test basic
-  (defrole init
-    (vars (a b name) (n text) (s skey))
-    (trace (send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s))))
-  (defrole resp
-    (vars (a b name) (n text))
-    (trace (recv (enc a n (pubk b))) (send (enc n (pubk a)))))
-  (defrole probe (vars (s skey)) (trace (recv (enc "ok" s)))))
-
-(defskeleton completeness-test
-  (vars (n text) (b a name) (s s-0 skey))
-  (defstrand probe 1 (s s))
-  (defstrand init 3 (n n) (a a) (b b) (s s-0))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (traces ((recv (enc "ok" s)))
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s-0))))
-  (label 5)
-  (unrealized (0 0) (1 1))
-  (origs (n (1 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton completeness-test
-  (vars (n text) (b a name) (s s-0 skey))
-  (defstrand probe 1 (s s))
-  (defstrand init 3 (n n) (a a) (b b) (s s-0))
-  (defstrand resp 2 (n n) (a a) (b b))
-  (precedes ((1 0) (2 0)) ((2 1) (1 1)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation nonce-test (added-strand resp 2) n (1 1)
-    (enc a n (pubk b)))
-  (traces ((recv (enc "ok" s)))
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s-0)))
-    ((recv (enc a n (pubk b))) (send (enc n (pubk a)))))
-  (label 6)
-  (parent 5)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton completeness-test
-  (vars (n text) (b a name) (s skey))
-  (defstrand probe 1 (s s))
-  (defstrand init 3 (n n) (a a) (b b) (s s))
-  (defstrand resp 2 (n n) (a a) (b b))
-  (precedes ((1 0) (2 0)) ((1 2) (0 0)) ((2 1) (1 1)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation encryption-test (displaced 3 1 init 3) (enc "ok" s-0)
-    (0 0))
-  (traces ((recv (enc "ok" s)))
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s)))
-    ((recv (enc a n (pubk b))) (send (enc n (pubk a)))))
-  (label 7)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((b b) (n n) (s s) (a a) (s-0 s))))
-  (origs (n (1 0))))
-
-(defskeleton completeness-test
-  (vars (n n-0 text) (b a a-0 b-0 name) (s s-0 skey))
-  (defstrand probe 1 (s s))
-  (defstrand init 3 (n n) (a a) (b b) (s s-0))
-  (defstrand resp 2 (n n) (a a) (b b))
-  (defstrand init 3 (n n-0) (a a-0) (b b-0) (s s))
-  (precedes ((1 0) (2 0)) ((2 1) (1 1)) ((3 2) (0 0)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation encryption-test (added-strand init 3) (enc "ok" s) (0 0))
-  (traces ((recv (enc "ok" s)))
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s-0)))
-    ((recv (enc a n (pubk b))) (send (enc n (pubk a))))
-    ((send (enc a-0 n-0 (pubk b-0))) (recv (enc n-0 (pubk a-0)))
-      (send (enc "ok" s))))
-  (label 8)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((b b) (n n) (s s) (a a) (s-0 s-0))))
-  (origs (n (1 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol completeness-test basic
-  (defrole init
-    (vars (a b name) (n text) (s skey))
-    (trace (send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s))))
-  (defrole resp
-    (vars (a b name) (n text))
-    (trace (recv (enc a n (pubk b))) (send (enc n (pubk a)))))
-  (defrole probe (vars (s skey)) (trace (recv (enc "ok" s)))))
-
-(defskeleton completeness-test
-  (vars (n text) (b a name) (s skey))
-  (defstrand init 2 (n n) (a a) (b b))
-  (defstrand probe 1 (s s))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (traces ((send (enc a n (pubk b))) (recv (enc n (pubk a))))
-    ((recv (enc "ok" s))))
-  (label 9)
-  (unrealized (0 1) (1 0))
-  (origs (n (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton completeness-test
-  (vars (n text) (a b name) (s skey))
-  (defstrand probe 1 (s s))
-  (defstrand init 3 (n n) (a a) (b b) (s s))
-  (precedes ((1 2) (0 0)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation encryption-test (displaced 0 2 init 3) (enc "ok" s) (1 0))
-  (traces ((recv (enc "ok" s)))
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s))))
-  (label 10)
-  (parent 9)
-  (unrealized (1 1))
-  (origs (n (1 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton completeness-test
-  (vars (n n-0 text) (b a a-0 b-0 name) (s skey))
-  (defstrand init 2 (n n) (a a) (b b))
-  (defstrand probe 1 (s s))
-  (defstrand init 3 (n n-0) (a a-0) (b b-0) (s s))
-  (precedes ((2 2) (1 0)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation encryption-test (added-strand init 3) (enc "ok" s) (1 0))
-  (traces ((send (enc a n (pubk b))) (recv (enc n (pubk a))))
-    ((recv (enc "ok" s)))
-    ((send (enc a-0 n-0 (pubk b-0))) (recv (enc n-0 (pubk a-0)))
-      (send (enc "ok" s))))
-  (label 11)
-  (parent 9)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton completeness-test
-  (vars (n text) (a b name) (s skey))
-  (defstrand probe 1 (s s))
-  (defstrand init 3 (n n) (a a) (b b) (s s))
-  (defstrand resp 2 (n n) (a a) (b b))
-  (precedes ((1 0) (2 0)) ((1 2) (0 0)) ((2 1) (1 1)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation nonce-test (added-strand resp 2) n (1 1)
-    (enc a n (pubk b)))
-  (traces ((recv (enc "ok" s)))
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s)))
-    ((recv (enc a n (pubk b))) (send (enc n (pubk a)))))
-  (label 12)
-  (parent 10)
-  (unrealized)
-  (shape)
-  (maps ((1 0) ((b b) (n n) (s s) (a a))))
-  (origs (n (1 0))))
-
-(defskeleton completeness-test
-  (vars (n n-0 text) (b a a-0 b-0 name) (s skey))
-  (defstrand init 2 (n n) (a a) (b b))
-  (defstrand probe 1 (s s))
-  (defstrand init 3 (n n-0) (a a-0) (b b-0) (s s))
-  (defstrand resp 2 (n n) (a a) (b b))
-  (precedes ((0 0) (3 0)) ((2 2) (1 0)) ((3 1) (0 1)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation nonce-test (added-strand resp 2) n (0 1)
-    (enc a n (pubk b)))
-  (traces ((send (enc a n (pubk b))) (recv (enc n (pubk a))))
-    ((recv (enc "ok" s)))
-    ((send (enc a-0 n-0 (pubk b-0))) (recv (enc n-0 (pubk a-0)))
-      (send (enc "ok" s)))
-    ((recv (enc a n (pubk b))) (send (enc n (pubk a)))))
-  (label 13)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((b b) (n n) (s s) (a a))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol completeness-test basic
-  (defrole init
-    (vars (a b name) (n text) (s skey))
-    (trace (send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s))))
-  (defrole resp
-    (vars (a b name) (n text))
-    (trace (recv (enc a n (pubk b))) (send (enc n (pubk a)))))
-  (defrole probe (vars (s skey)) (trace (recv (enc "ok" s)))))
-
-(defskeleton completeness-test
-  (vars (n text) (b a name) (s skey))
-  (defstrand probe 1 (s s))
-  (defstrand init 2 (n n) (a a) (b b))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (traces ((recv (enc "ok" s)))
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))))
-  (label 14)
-  (unrealized (0 0) (1 1))
-  (origs (n (1 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton completeness-test
-  (vars (n text) (b a name) (s skey))
-  (defstrand probe 1 (s s))
-  (defstrand init 2 (n n) (a a) (b b))
-  (defstrand resp 2 (n n) (a a) (b b))
-  (precedes ((1 0) (2 0)) ((2 1) (1 1)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation nonce-test (added-strand resp 2) n (1 1)
-    (enc a n (pubk b)))
-  (traces ((recv (enc "ok" s)))
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a))))
-    ((recv (enc a n (pubk b))) (send (enc n (pubk a)))))
-  (label 15)
-  (parent 14)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton completeness-test
-  (vars (n text) (a b name) (s skey))
-  (defstrand probe 1 (s s))
-  (defstrand resp 2 (n n) (a a) (b b))
-  (defstrand init 3 (n n) (a a) (b b) (s s))
-  (precedes ((1 1) (2 1)) ((2 0) (1 0)) ((2 2) (0 0)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation encryption-test (displaced 1 3 init 3) (enc "ok" s) (0 0))
-  (traces ((recv (enc "ok" s)))
-    ((recv (enc a n (pubk b))) (send (enc n (pubk a))))
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a)))
-      (send (enc "ok" s))))
-  (label 16)
-  (parent 15)
-  (unrealized)
-  (shape)
-  (maps ((0 2) ((b b) (n n) (s s) (a a))))
-  (origs (n (2 0))))
-
-(defskeleton completeness-test
-  (vars (n n-0 text) (b a a-0 b-0 name) (s skey))
-  (defstrand probe 1 (s s))
-  (defstrand init 2 (n n) (a a) (b b))
-  (defstrand resp 2 (n n) (a a) (b b))
-  (defstrand init 3 (n n-0) (a a-0) (b b-0) (s s))
-  (precedes ((1 0) (2 0)) ((2 1) (1 1)) ((3 2) (0 0)))
-  (non-orig s (privk b))
-  (uniq-orig n)
-  (operation encryption-test (added-strand init 3) (enc "ok" s) (0 0))
-  (traces ((recv (enc "ok" s)))
-    ((send (enc a n (pubk b))) (recv (enc n (pubk a))))
-    ((recv (enc a n (pubk b))) (send (enc n (pubk a))))
-    ((send (enc a-0 n-0 (pubk b-0))) (recv (enc n-0 (pubk a-0)))
-      (send (enc "ok" s))))
-  (label 17)
-  (parent 15)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((b b) (n n) (s s) (a a))))
-  (origs (n (1 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/cpsagraphall b/tst/cpsagraphall
deleted file mode 100644
--- a/tst/cpsagraphall
+++ /dev/null
@@ -1,12 +0,0 @@
-#! /bin/sh
-
-# Graph all test output.
-
-PROG=../dist/build/cpsagraph/cpsagraph
-
-for i in *.txt
-do
-  o=`basename $i .txt`.svg
-  echo $PROG -o $o $i
-  $PROG -o $o $i
-done
diff --git a/tst/cpsashapesall b/tst/cpsashapesall
deleted file mode 100644
--- a/tst/cpsashapesall
+++ /dev/null
@@ -1,15 +0,0 @@
-#! /bin/sh
-
-# Find the shapes associated with all test output.
-
-PROG=../dist/build/cpsashapes/cpsashapes
-
-for i in *.txt
-do
-  if echo $i | grep -v shapes > /dev/null
-  then
-    o=`basename $i .txt`_shapes.txt
-    echo $PROG -o $o $i
-    $PROG -o $o $i
-  fi
-done
diff --git a/tst/crushing.tst b/tst/crushing.tst
deleted file mode 100644
--- a/tst/crushing.tst
+++ /dev/null
@@ -1,365 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from crushing.scm")
-
-(defprotocol crushing basic
-  (defrole init
-    (vars (k akey) (n n1 n2 n3 text))
-    (trace (send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n2 (invk k))) (recv (enc n n3 (invk k)))
-      (send (enc n n1 n2 n3 (invk k)))
-      (recv (enc n n1 n2 n3 n (invk k))))
-    (non-orig (invk k))
-    (uniq-orig n))
-  (defrole adder
-    (vars (k akey) (n new text))
-    (trace (recv (enc n k)) (send (enc n new (invk k))))
-    (uniq-orig new))
-  (defrole twister
-    (vars (k akey) (n n1 n2 n3 text))
-    (trace (recv (enc n n1 n2 n3 (invk k)))
-      (send (enc n n2 n3 n1 n (invk k))))))
-
-(defskeleton crushing
-  (vars (n n1 n2 n3 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n2) (n3 n3) (k k))
-  (non-orig (invk k))
-  (uniq-orig n n1 n2 n3)
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n2 (invk k))) (recv (enc n n3 (invk k)))
-      (send (enc n n1 n2 n3 (invk k)))
-      (recv (enc n n1 n2 n3 n (invk k)))))
-  (label 0)
-  (unrealized (0 1) (0 2) (0 3) (0 5))
-  (origs (n (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton crushing
-  (vars (n n1 n2 n3 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n2) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n2 n3)
-  (operation encryption-test (added-strand adder 2) (enc n n1 (invk k))
-    (0 1))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n2 (invk k))) (recv (enc n n3 (invk k)))
-      (send (enc n n1 n2 n3 (invk k)))
-      (recv (enc n n1 n2 n3 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 2) (0 3) (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton crushing
-  (vars (n n1 n3 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n1) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n3)
-  (operation encryption-test (displaced 2 1 adder 2) (enc n n2 (invk k))
-    (0 2))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n1 (invk k))) (recv (enc n n3 (invk k)))
-      (send (enc n n1 n1 n3 (invk k)))
-      (recv (enc n n1 n1 n3 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 3) (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton crushing
-  (vars (n n1 n2 n3 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n2) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (defstrand adder 2 (n n) (new n2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n2 n3)
-  (operation encryption-test (added-strand adder 2) (enc n n2 (invk k))
-    (0 2))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n2 (invk k))) (recv (enc n n3 (invk k)))
-      (send (enc n n1 n2 n3 (invk k)))
-      (recv (enc n n1 n2 n3 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k))))
-    ((recv (enc n k)) (send (enc n n2 (invk k)))))
-  (label 3)
-  (parent 1)
-  (unrealized (0 3) (0 5))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton crushing
-  (vars (n n1 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n1) (n3 n1) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n n1)
-  (operation encryption-test (displaced 2 1 adder 2) (enc n n3 (invk k))
-    (0 3))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n1 (invk k))) (recv (enc n n1 (invk k)))
-      (send (enc n n1 n1 n1 (invk k)))
-      (recv (enc n n1 n1 n1 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k)))))
-  (label 4)
-  (parent 2)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton crushing
-  (vars (n n1 n3 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n1) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (defstrand adder 2 (n n) (new n3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n3)
-  (operation encryption-test (added-strand adder 2) (enc n n3 (invk k))
-    (0 3))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n1 (invk k))) (recv (enc n n3 (invk k)))
-      (send (enc n n1 n1 n3 (invk k)))
-      (recv (enc n n1 n1 n3 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k))))
-    ((recv (enc n k)) (send (enc n n3 (invk k)))))
-  (label 5)
-  (parent 2)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton crushing
-  (vars (n n1 n2 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n2) (n3 n1) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (defstrand adder 2 (n n) (new n2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n2)
-  (operation encryption-test (displaced 3 1 adder 2) (enc n n3 (invk k))
-    (0 3))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n2 (invk k))) (recv (enc n n1 (invk k)))
-      (send (enc n n1 n2 n1 (invk k)))
-      (recv (enc n n1 n2 n1 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k))))
-    ((recv (enc n k)) (send (enc n n2 (invk k)))))
-  (label 6)
-  (parent 3)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton crushing
-  (vars (n n1 n2 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n2) (n3 n2) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (defstrand adder 2 (n n) (new n2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n2)
-  (operation encryption-test (displaced 3 2 adder 2) (enc n n3 (invk k))
-    (0 3))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n2 (invk k))) (recv (enc n n2 (invk k)))
-      (send (enc n n1 n2 n2 (invk k)))
-      (recv (enc n n1 n2 n2 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k))))
-    ((recv (enc n k)) (send (enc n n2 (invk k)))))
-  (label 7)
-  (parent 3)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton crushing
-  (vars (n n1 n2 n3 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n2) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (defstrand adder 2 (n n) (new n2) (k k))
-  (defstrand adder 2 (n n) (new n3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n2 n3)
-  (operation encryption-test (added-strand adder 2) (enc n n3 (invk k))
-    (0 3))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n2 (invk k))) (recv (enc n n3 (invk k)))
-      (send (enc n n1 n2 n3 (invk k)))
-      (recv (enc n n1 n2 n3 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k))))
-    ((recv (enc n k)) (send (enc n n2 (invk k))))
-    ((recv (enc n k)) (send (enc n n3 (invk k)))))
-  (label 8)
-  (parent 3)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton crushing
-  (vars (n n1 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n1) (n3 n1) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (defstrand twister 2 (n n) (n1 n1) (n2 n1) (n3 n1) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n n1)
-  (operation encryption-test (added-strand twister 2)
-    (enc n n1 n1 n1 n (invk k)) (0 5))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n1 (invk k))) (recv (enc n n1 (invk k)))
-      (send (enc n n1 n1 n1 (invk k)))
-      (recv (enc n n1 n1 n1 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k))))
-    ((recv (enc n n1 n1 n1 (invk k)))
-      (send (enc n n1 n1 n1 n (invk k)))))
-  (label 9)
-  (parent 4)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton crushing
-  (vars (n n1 n3 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n1) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (defstrand adder 2 (n n) (new n3) (k k))
-  (defstrand twister 2 (n n) (n1 n3) (n2 n1) (n3 n1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 3)) ((2 1) (3 0)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n3)
-  (operation encryption-test (added-strand twister 2)
-    (enc n n1 n1 n3 n (invk k)) (0 5))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n1 (invk k))) (recv (enc n n3 (invk k)))
-      (send (enc n n1 n1 n3 (invk k)))
-      (recv (enc n n1 n1 n3 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k))))
-    ((recv (enc n k)) (send (enc n n3 (invk k))))
-    ((recv (enc n n3 n1 n1 (invk k)))
-      (send (enc n n1 n1 n3 n (invk k)))))
-  (label 10)
-  (parent 5)
-  (unrealized (3 0))
-  (comment "empty cohort"))
-
-(defskeleton crushing
-  (vars (n n1 n2 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n2) (n3 n1) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (defstrand adder 2 (n n) (new n2) (k k))
-  (defstrand twister 2 (n n) (n1 n1) (n2 n1) (n3 n2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 2)) ((2 1) (3 0)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n2)
-  (operation encryption-test (added-strand twister 2)
-    (enc n n1 n2 n1 n (invk k)) (0 5))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n2 (invk k))) (recv (enc n n1 (invk k)))
-      (send (enc n n1 n2 n1 (invk k)))
-      (recv (enc n n1 n2 n1 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k))))
-    ((recv (enc n k)) (send (enc n n2 (invk k))))
-    ((recv (enc n n1 n1 n2 (invk k)))
-      (send (enc n n1 n2 n1 n (invk k)))))
-  (label 11)
-  (parent 6)
-  (unrealized (3 0))
-  (comment "empty cohort"))
-
-(defskeleton crushing
-  (vars (n n1 n2 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n2) (n3 n2) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (defstrand adder 2 (n n) (new n2) (k k))
-  (defstrand twister 2 (n n) (n1 n2) (n2 n1) (n3 n2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 2)) ((2 1) (3 0)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n2)
-  (operation encryption-test (added-strand twister 2)
-    (enc n n1 n2 n2 n (invk k)) (0 5))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n2 (invk k))) (recv (enc n n2 (invk k)))
-      (send (enc n n1 n2 n2 (invk k)))
-      (recv (enc n n1 n2 n2 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k))))
-    ((recv (enc n k)) (send (enc n n2 (invk k))))
-    ((recv (enc n n2 n1 n2 (invk k)))
-      (send (enc n n1 n2 n2 n (invk k)))))
-  (label 12)
-  (parent 7)
-  (unrealized (3 0))
-  (comment "empty cohort"))
-
-(defskeleton crushing
-  (vars (n n1 n2 n3 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n2) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (defstrand adder 2 (n n) (new n2) (k k))
-  (defstrand adder 2 (n n) (new n3) (k k))
-  (defstrand twister 2 (n n) (n1 n3) (n2 n1) (n3 n2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 3))
-    ((3 1) (4 0)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n2 n3)
-  (operation encryption-test (added-strand twister 2)
-    (enc n n1 n2 n3 n (invk k)) (0 5))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n2 (invk k))) (recv (enc n n3 (invk k)))
-      (send (enc n n1 n2 n3 (invk k)))
-      (recv (enc n n1 n2 n3 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k))))
-    ((recv (enc n k)) (send (enc n n2 (invk k))))
-    ((recv (enc n k)) (send (enc n n3 (invk k))))
-    ((recv (enc n n3 n1 n2 (invk k)))
-      (send (enc n n1 n2 n3 n (invk k)))))
-  (label 13)
-  (parent 8)
-  (unrealized (4 0))
-  (comment "empty cohort"))
-
-(defskeleton crushing
-  (vars (n n1 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n1) (n3 n1) (k k))
-  (defstrand adder 2 (n n) (new n1) (k k))
-  (defstrand twister 2 (n n) (n1 n1) (n2 n1) (n3 n1) (k k))
-  (precedes ((0 0) (1 0)) ((0 4) (2 0)) ((1 1) (0 1)) ((2 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n n1)
-  (operation encryption-test (displaced 3 0 init 5)
-    (enc n n1 n1 n1 (invk k)) (2 0))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 (invk k)))
-      (recv (enc n n1 (invk k))) (recv (enc n n1 (invk k)))
-      (send (enc n n1 n1 n1 (invk k)))
-      (recv (enc n n1 n1 n1 n (invk k))))
-    ((recv (enc n k)) (send (enc n n1 (invk k))))
-    ((recv (enc n n1 n1 n1 (invk k)))
-      (send (enc n n1 n1 n1 n (invk k)))))
-  (label 14)
-  (parent 9)
-  (unrealized)
-  (shape)
-  (maps ((0) ((k k) (n n) (n1 n1) (n2 n1) (n3 n1))))
-  (origs (n (0 0)) (n1 (1 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/dass-mod.lisp b/tst/dass-mod.lisp
deleted file mode 100644
--- a/tst/dass-mod.lisp
+++ /dev/null
@@ -1,31 +0,0 @@
-(defprotocol dass basic
-  (defrole init
-    (vars (a name) (b name) (ks name) (k skey) (l text) (ta text) (tb text))
-    (trace (send b)
-	   (recv (enc (cat b (pubk b)) (privk ks)))
-	   (send (enc (cat (enc ta k) l a (enc k (pubk b))) (privk a)))
-	   (recv (enc tb k))))
-  (defrole resp
-    (vars (a name) (b name) (ks name) (k skey) (l text) (ta text) (tb text))
-    (trace (recv (enc (cat (enc ta k) l a (enc k (pubk b))) (privk a)))
-	   (send a)
-	   (recv (enc (cat a (pubk a)) (privk ks)))
-	   (send (enc tb k))))
-  (defrole keyserver
-    (vars (a name) (b name) (ks name))
-    (trace (recv b)
-	   (send (enc (cat b (pubk b)) (privk ks)))
-	   (recv a)
-	   (send (enc (cat a (pubk a)) (privk ks))))))
-
-(defskeleton dass
-  (vars (a name) (b name) (ks name) (k skey))
-  (defstrand init 4 (a a) (b b) (ks ks) (k k))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k))
-
-(defskeleton dass
-  (vars (a name) (b name) (ks name) (k skey))
-  (defstrand resp 4 (a a) (b b) (ks ks) (k k))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k))
diff --git a/tst/dass.lisp b/tst/dass.lisp
deleted file mode 100644
--- a/tst/dass.lisp
+++ /dev/null
@@ -1,31 +0,0 @@
-(defprotocol dass basic
-  (defrole init
-    (vars (a name) (b name) (ks name) (k skey) (l text) (ta text) (kp akey) (tb text))
-    (trace (send b)
-	   (recv (enc (cat b (pubk b)) (privk ks)))
-	   (send (cat (enc ta k) (enc (cat l a kp) (privk a)) (enc (enc k (pubk b)) kp)))
-	   (recv (enc tb k))))
-  (defrole resp
-    (vars (a name) (b name) (ks name) (k skey) (l text) (ta text) (kp akey) (tb text))
-    (trace (recv (cat (enc ta k) (enc (cat l a kp) (privk a)) (enc (enc k (pubk b)) kp)))
-	   (send a)
-	   (recv (enc (cat a (pubk a)) (privk ks)))
-	   (send (enc tb k))))
-  (defrole keyserver
-    (vars (a name) (b name) (ks name))
-    (trace (recv b)
-	   (send (enc (cat b (pubk b)) (privk ks)))
-	   (recv a)
-	   (send (enc (cat a (pubk a)) (privk ks))))))
-
-(defskeleton dass
-  (vars (a name) (b name) (ks name) (k skey) (kp akey))
-  (defstrand init 4 (a a) (b b) (ks ks) (k k) (kp kp))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k kp))
-
-(defskeleton dass
-  (vars (a name) (b name) (ks name) (k skey) (kp akey))
-  (defstrand resp 4 (a a) (b b) (ks ks) (k k) (kp kp))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k kp))
diff --git a/tst/dass_simple.scm b/tst/dass_simple.scm
deleted file mode 100644
--- a/tst/dass_simple.scm
+++ /dev/null
@@ -1,57 +0,0 @@
-(herald "Distributed Authentication Security Service Protocol Variants")
-
-(defprotocol dass-simple basic
-  (defrole init (vars (a b name) (k skey) (ta text) (kp akey) (tb text))
-    (trace (send (cat (enc "init" ta k)
-		      (enc a kp (privk a))
-		      (enc (enc k (pubk b)) (invk kp))))
-	   (recv (enc "resp" tb k))))
-  (defrole resp (vars (a b name) (k skey) (ta text) (kp akey) (tb text))
-    (trace (recv (cat (enc "init" ta k)
-		      (enc a kp (privk a))
-		      (enc (enc k (pubk b)) (invk kp))))
-	   (send (enc "resp" tb k))))
-  (comment "In this version of the protocol ")
-  (comment "b might interact with a compromised initiator.")
-  (comment "That is why a is not authenticated to b."))
-
-(defprotocol dass+ basic
-  (defrole init (vars (a b name) (k skey) (ta text) (kp akey) (tb text))
-    (trace (send (cat (enc "init" ta k)
-		      (enc a kp (privk a))
-		      (enc (enc k (pubk b)) (invk kp))))
-	   (recv (enc "resp" tb k))))
-  (defrole resp (vars (a b name) (k skey) (ta text) (kp akey) (tb text))
-    (trace (recv (cat (enc "init" ta k)
-		      (enc a kp (privk a))
-		      (enc (enc k (pubk b)) (invk kp))))
-	   (send (enc "resp" tb k)))
-    (non-orig (privk a)))
-  (comment "In this version of the protocol ")
-  (comment "b never interacts with a compromised initiator.")
-  (comment "That is why a is properly authenticated to b."))
-
-(defskeleton dass-simple
-  (vars (a name) (b name) (k skey) (kp akey) (ta text)(tb text))
-  (defstrand init 2 (a a) (b b) (k k) (kp kp) (ta ta) (tb tb))
-  (non-orig (privk a) (privk b) (invk kp))
-  (uniq-orig k kp))
-
-(defskeleton dass+
-  (vars (a name) (b name) (k skey) (kp akey) (ta text)(tb text))
-  (defstrand init 2 (a a) (b b) (k k) (kp kp) (ta ta) (tb tb))
-  (non-orig (privk a) (privk b) (invk kp))
-  (uniq-orig k kp))
-
-(comment
- (defskeleton dass
-   (vars (a name) (b name) (ks name) (k skey) (kp akey))
-   (defstrand init 4 (a a) (b b) (ks ks) (k k) (kp kp))
-   (non-orig (privk a) (privk b) (privk ks))
-   (uniq-orig k kp))
-
- (defskeleton dass
-   (vars (a name) (b name) (ks name) (k skey) (kp akey))
-   (defstrand resp 4 (a a) (b b) (ks ks) (k k) (kp kp))
-   (non-orig (privk a) (privk b) (privk ks))
-   (uniq-orig k kp)))
diff --git a/tst/dass_simple.tst b/tst/dass_simple.tst
deleted file mode 100644
--- a/tst/dass_simple.tst
+++ /dev/null
@@ -1,361 +0,0 @@
-(herald "Distributed Authentication Security Service Protocol Variants")
-
-(comment "CPSA 2.5.4")
-(comment "All input read from dass_simple.scm")
-
-(defprotocol dass-simple basic
-  (defrole init
-    (vars (a b name) (k skey) (ta text) (kp akey) (tb text))
-    (trace
-      (send
-        (cat (enc "init" ta k) (enc a kp (privk a))
-          (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k))))
-  (defrole resp
-    (vars (a b name) (k skey) (ta text) (kp akey) (tb text))
-    (trace
-      (recv
-        (cat (enc "init" ta k) (enc a kp (privk a))
-          (enc (enc k (pubk b)) (invk kp)))) (send (enc "resp" tb k))))
-  (comment "In this version of the protocol ")
-  (comment "b might interact with a compromised initiator.")
-  (comment "That is why a is not authenticated to b."))
-
-(defskeleton dass-simple
-  (vars (ta tb text) (a b name) (k skey) (kp akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (non-orig (invk kp) (privk a) (privk b))
-  (uniq-orig k kp)
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (k (0 0)) (kp (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton dass-simple
-  (vars (ta tb ta-0 text) (a b a-0 b-0 name) (k skey) (kp kp-0 akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (defstrand resp 2 (ta ta-0) (tb tb) (a a-0) (b b-0) (k k) (kp kp-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk kp) (privk a) (privk b))
-  (uniq-orig k kp)
-  (operation encryption-test (added-strand resp 2) (enc "resp" tb k)
-    (0 1))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv
-       (cat (enc "init" ta-0 k) (enc a-0 kp-0 (privk a-0))
-         (enc (enc k (pubk b-0)) (invk kp-0))))
-      (send (enc "resp" tb k))))
-  (label 1)
-  (parent 0)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton dass-simple
-  (vars (ta tb text) (a b name) (k skey) (kp akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (deflistener k)
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk kp) (privk a) (privk b))
-  (uniq-orig k kp)
-  (operation encryption-test (added-listener k) (enc "resp" tb k) (0 1))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv k) (send k)))
-  (label 2)
-  (parent 0)
-  (unrealized (1 0))
-  (comment "empty cohort"))
-
-(defskeleton dass-simple
-  (vars (ta tb text) (a b a-0 b-0 name) (k skey) (kp kp-0 akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (defstrand resp 2 (ta ta) (tb tb) (a a-0) (b b-0) (k k) (kp kp-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk kp) (privk a) (privk b))
-  (uniq-orig k kp)
-  (operation encryption-test (displaced 2 0 init 1) (enc "init" ta-0 k)
-    (1 0))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv
-       (cat (enc "init" ta k) (enc a-0 kp-0 (privk a-0))
-         (enc (enc k (pubk b-0)) (invk kp-0))))
-      (send (enc "resp" tb k))))
-  (label 3)
-  (parent 1)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dass-simple
-  (vars (ta tb ta-0 text) (a b a-0 b-0 name) (k skey) (kp kp-0 akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (defstrand resp 2 (ta ta-0) (tb tb) (a a-0) (b b-0) (k k) (kp kp-0))
-  (deflistener k)
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (invk kp) (privk a) (privk b))
-  (uniq-orig k kp)
-  (operation encryption-test (added-listener k) (enc "init" ta-0 k)
-    (1 0))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv
-       (cat (enc "init" ta-0 k) (enc a-0 kp-0 (privk a-0))
-         (enc (enc k (pubk b-0)) (invk kp-0))))
-      (send (enc "resp" tb k))) ((recv k) (send k)))
-  (label 4)
-  (parent 1)
-  (unrealized (2 0))
-  (comment "empty cohort"))
-
-(defskeleton dass-simple
-  (vars (ta tb text) (a b a-0 name) (k skey) (kp kp-0 akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (defstrand resp 2 (ta ta) (tb tb) (a a-0) (b b) (k k) (kp kp-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk kp) (privk a) (privk b))
-  (uniq-orig k kp)
-  (operation nonce-test (contracted (b-0 b)) k (1 0) (enc k (pubk b)))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv
-       (cat (enc "init" ta k) (enc a-0 kp-0 (privk a-0))
-         (enc (enc k (pubk b)) (invk kp-0)))) (send (enc "resp" tb k))))
-  (label 5)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (k k) (kp kp) (ta ta) (tb tb))))
-  (origs (k (0 0)) (kp (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol dass+ basic
-  (defrole init
-    (vars (a b name) (k skey) (ta text) (kp akey) (tb text))
-    (trace
-      (send
-        (cat (enc "init" ta k) (enc a kp (privk a))
-          (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k))))
-  (defrole resp
-    (vars (a b name) (k skey) (ta text) (kp akey) (tb text))
-    (trace
-      (recv
-        (cat (enc "init" ta k) (enc a kp (privk a))
-          (enc (enc k (pubk b)) (invk kp)))) (send (enc "resp" tb k)))
-    (non-orig (privk a)))
-  (comment "In this version of the protocol ")
-  (comment "b never interacts with a compromised initiator.")
-  (comment "That is why a is properly authenticated to b."))
-
-(defskeleton dass+
-  (vars (ta tb text) (a b name) (k skey) (kp akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (non-orig (invk kp) (privk a) (privk b))
-  (uniq-orig k kp)
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k))))
-  (label 6)
-  (unrealized (0 1))
-  (origs (k (0 0)) (kp (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton dass+
-  (vars (ta tb ta-0 text) (a b a-0 b-0 name) (k skey) (kp kp-0 akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (defstrand resp 2 (ta ta-0) (tb tb) (a a-0) (b b-0) (k k) (kp kp-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk kp) (privk a) (privk b) (privk a-0))
-  (uniq-orig k kp)
-  (operation encryption-test (added-strand resp 2) (enc "resp" tb k)
-    (0 1))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv
-       (cat (enc "init" ta-0 k) (enc a-0 kp-0 (privk a-0))
-         (enc (enc k (pubk b-0)) (invk kp-0))))
-      (send (enc "resp" tb k))))
-  (label 7)
-  (parent 6)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton dass+
-  (vars (ta tb text) (a b name) (k skey) (kp akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (deflistener k)
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk kp) (privk a) (privk b))
-  (uniq-orig k kp)
-  (operation encryption-test (added-listener k) (enc "resp" tb k) (0 1))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv k) (send k)))
-  (label 8)
-  (parent 6)
-  (unrealized (1 0))
-  (comment "empty cohort"))
-
-(defskeleton dass+
-  (vars (ta tb text) (a b a-0 b-0 name) (k skey) (kp kp-0 akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (defstrand resp 2 (ta ta) (tb tb) (a a-0) (b b-0) (k k) (kp kp-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk kp) (privk a) (privk b) (privk a-0))
-  (uniq-orig k kp)
-  (operation encryption-test (displaced 2 0 init 1) (enc "init" ta-0 k)
-    (1 0))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv
-       (cat (enc "init" ta k) (enc a-0 kp-0 (privk a-0))
-         (enc (enc k (pubk b-0)) (invk kp-0))))
-      (send (enc "resp" tb k))))
-  (label 9)
-  (parent 7)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton dass+
-  (vars (ta tb ta-0 text) (a b a-0 b-0 name) (k skey) (kp kp-0 akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (defstrand resp 2 (ta ta-0) (tb tb) (a a-0) (b b-0) (k k) (kp kp-0))
-  (deflistener k)
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (invk kp) (privk a) (privk b) (privk a-0))
-  (uniq-orig k kp)
-  (operation encryption-test (added-listener k) (enc "init" ta-0 k)
-    (1 0))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv
-       (cat (enc "init" ta-0 k) (enc a-0 kp-0 (privk a-0))
-         (enc (enc k (pubk b-0)) (invk kp-0))))
-      (send (enc "resp" tb k))) ((recv k) (send k)))
-  (label 10)
-  (parent 7)
-  (unrealized (1 0) (2 0))
-  (comment "empty cohort"))
-
-(defskeleton dass+
-  (vars (ta tb text) (a b b-0 name) (k skey) (kp akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (defstrand resp 2 (ta ta) (tb tb) (a a) (b b-0) (k k) (kp kp))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk kp) (privk a) (privk b))
-  (uniq-orig k kp)
-  (operation encryption-test (displaced 2 0 init 1)
-    (enc a-0 kp-0 (privk a-0)) (1 0))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b-0)) (invk kp)))) (send (enc "resp" tb k))))
-  (label 11)
-  (parent 9)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dass+
-  (vars (ta tb ta-0 text) (a b a-0 b-0 b-1 name) (k k-0 skey)
-    (kp kp-0 akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (defstrand resp 2 (ta ta) (tb tb) (a a-0) (b b-0) (k k) (kp kp-0))
-  (defstrand init 1 (ta ta-0) (a a-0) (b b-1) (k k-0) (kp kp-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((2 0) (1 0)))
-  (non-orig (invk kp) (privk a) (privk b) (privk a-0))
-  (uniq-orig k kp)
-  (operation encryption-test (added-strand init 1)
-    (enc a-0 kp-0 (privk a-0)) (1 0))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv
-       (cat (enc "init" ta k) (enc a-0 kp-0 (privk a-0))
-         (enc (enc k (pubk b-0)) (invk kp-0))))
-      (send (enc "resp" tb k)))
-    ((send
-       (cat (enc "init" ta-0 k-0) (enc a-0 kp-0 (privk a-0))
-         (enc (enc k-0 (pubk b-1)) (invk kp-0))))))
-  (label 12)
-  (parent 9)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dass+
-  (vars (ta tb text) (a b name) (k skey) (kp akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (defstrand resp 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk kp) (privk a) (privk b))
-  (uniq-orig k kp)
-  (operation encryption-test (displaced 2 0 init 1)
-    (enc (enc k (pubk b-0)) (invk kp)) (1 0))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (send (enc "resp" tb k))))
-  (label 13)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (k k) (kp kp) (ta ta) (tb tb))))
-  (origs (k (0 0)) (kp (0 0))))
-
-(defskeleton dass+
-  (vars (ta tb ta-0 text) (a b a-0 b-0 name) (k k-0 skey)
-    (kp kp-0 akey))
-  (defstrand init 2 (ta ta) (tb tb) (a a) (b b) (k k) (kp kp))
-  (defstrand resp 2 (ta ta) (tb tb) (a a-0) (b b) (k k) (kp kp-0))
-  (defstrand init 1 (ta ta-0) (a a-0) (b b-0) (k k-0) (kp kp-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((2 0) (1 0)))
-  (non-orig (invk kp) (privk a) (privk b) (privk a-0))
-  (uniq-orig k kp)
-  (operation nonce-test (contracted (b-1 b)) k (1 0) (enc k (pubk b)))
-  (traces
-    ((send
-       (cat (enc "init" ta k) (enc a kp (privk a))
-         (enc (enc k (pubk b)) (invk kp)))) (recv (enc "resp" tb k)))
-    ((recv
-       (cat (enc "init" ta k) (enc a-0 kp-0 (privk a-0))
-         (enc (enc k (pubk b)) (invk kp-0)))) (send (enc "resp" tb k)))
-    ((send
-       (cat (enc "init" ta-0 k-0) (enc a-0 kp-0 (privk a-0))
-         (enc (enc k-0 (pubk b-0)) (invk kp-0))))))
-  (label 14)
-  (parent 12)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (k k) (kp kp) (ta ta) (tb tb))))
-  (origs (k (0 0)) (kp (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/denning-sacco.scm b/tst/denning-sacco.scm
deleted file mode 100644
--- a/tst/denning-sacco.scm
+++ /dev/null
@@ -1,27 +0,0 @@
-(herald "Denning-Sacco Protocol")
-
-(defprotocol denning-sacco basic
-  (defrole init (vars (a b ks name) (k skey) (ta text))
-    (trace
-     (send (cat a b))
-     (recv (cat (enc b (pubk b) (privk ks))
-		(enc a (pubk a) (privk ks))))
-     (send (enc (enc a b k ta (privk a))
-		(enc b (pubk b) (privk ks))
-		(enc a (pubk a) (privk ks)) (pubk b)))))
-  (defrole resp (vars (a b ks name) (k skey) (ta text))
-    (trace
-     (recv (enc (enc a b k ta (privk a))
-		(enc b (pubk b) (privk ks))
-		(enc a (pubk a) (privk ks)) (pubk b)))))
-  (defrole keyserver (vars (a b ks name))
-    (trace
-     (recv (cat a b))
-     (send (cat (enc b (pubk b) (privk ks))
-		(enc a (pubk a) (privk ks)))))))
-
-(defskeleton denning-sacco
-  (vars (a b ks name) (k skey))
-  (defstrand resp 1 (a a) (b b) (ks ks) (k k))
-  (non-orig (privk b) (privk a) (privk ks))
-  (uniq-orig k))
diff --git a/tst/denning-sacco.tst b/tst/denning-sacco.tst
deleted file mode 100644
--- a/tst/denning-sacco.tst
+++ /dev/null
@@ -1,418 +0,0 @@
-(herald "Denning-Sacco Protocol")
-
-(comment "CPSA 2.5.4")
-(comment "All input read from denning-sacco.scm")
-
-(defprotocol denning-sacco basic
-  (defrole init
-    (vars (a b ks name) (k skey) (ta text))
-    (trace (send (cat a b))
-      (recv
-        (cat (enc b (pubk b) (privk ks)) (enc a (pubk a) (privk ks))))
-      (send
-        (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-          (enc a (pubk a) (privk ks)) (pubk b)))))
-  (defrole resp
-    (vars (a b ks name) (k skey) (ta text))
-    (trace
-      (recv
-        (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-          (enc a (pubk a) (privk ks)) (pubk b)))))
-  (defrole keyserver
-    (vars (a b ks name))
-    (trace (recv (cat a b))
-      (send
-        (cat (enc b (pubk b) (privk ks))
-          (enc a (pubk a) (privk ks)))))))
-
-(defskeleton denning-sacco
-  (vars (ta text) (a b ks name) (k skey))
-  (defstrand resp 1 (ta ta) (a a) (b b) (ks ks) (k k))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k)
-  (traces
-    ((recv
-       (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-         (enc a (pubk a) (privk ks)) (pubk b)))))
-  (label 0)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton denning-sacco
-  (vars (ta text) (a b ks ks-0 name) (k skey))
-  (defstrand resp 1 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a a) (b b) (ks ks-0) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 3)
-    (enc a b k ta (privk a)) (0 0))
-  (traces
-    ((recv
-       (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-         (enc a (pubk a) (privk ks)) (pubk b))))
-    ((send (cat a b))
-      (recv
-        (cat (enc b (pubk b) (privk ks-0))
-          (enc a (pubk a) (privk ks-0))))
-      (send
-        (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks-0))
-          (enc a (pubk a) (privk ks-0)) (pubk b)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton denning-sacco
-  (vars (ta text) (a b ks name) (k skey))
-  (defstrand resp 1 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k)
-  (operation encryption-test (contracted (ks-0 ks))
-    (enc a b k ta (privk a)) (0 0)
-    (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-      (enc a (pubk a) (privk ks)) (pubk b)))
-  (traces
-    ((recv
-       (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-         (enc a (pubk a) (privk ks)) (pubk b))))
-    ((send (cat a b))
-      (recv
-        (cat (enc b (pubk b) (privk ks)) (enc a (pubk a) (privk ks))))
-      (send
-        (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-          (enc a (pubk a) (privk ks)) (pubk b)))))
-  (label 2)
-  (parent 1)
-  (unrealized (1 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton denning-sacco
-  (vars (ta text) (a b ks a-0 name) (k skey))
-  (defstrand resp 1 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (a a-0) (b b) (ks ks))
-  (precedes ((1 2) (0 0)) ((2 1) (1 1)))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc b (pubk b) (privk ks)) (1 1))
-  (traces
-    ((recv
-       (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-         (enc a (pubk a) (privk ks)) (pubk b))))
-    ((send (cat a b))
-      (recv
-        (cat (enc b (pubk b) (privk ks)) (enc a (pubk a) (privk ks))))
-      (send
-        (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-          (enc a (pubk a) (privk ks)) (pubk b))))
-    ((recv (cat a-0 b))
-      (send
-        (cat (enc b (pubk b) (privk ks))
-          (enc a-0 (pubk a-0) (privk ks))))))
-  (label 3)
-  (parent 2)
-  (unrealized (1 1))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton denning-sacco
-  (vars (ta text) (a b ks b-0 name) (k skey))
-  (defstrand resp 1 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (a b) (b b-0) (ks ks))
-  (precedes ((1 2) (0 0)) ((2 1) (1 1)))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc b (pubk b) (privk ks)) (1 1))
-  (traces
-    ((recv
-       (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-         (enc a (pubk a) (privk ks)) (pubk b))))
-    ((send (cat a b))
-      (recv
-        (cat (enc b (pubk b) (privk ks)) (enc a (pubk a) (privk ks))))
-      (send
-        (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-          (enc a (pubk a) (privk ks)) (pubk b))))
-    ((recv (cat b b-0))
-      (send
-        (cat (enc b-0 (pubk b-0) (privk ks))
-          (enc b (pubk b) (privk ks))))))
-  (label 4)
-  (parent 2)
-  (unrealized (1 1))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton denning-sacco
-  (vars (ta text) (b ks a name) (k skey))
-  (defstrand resp 1 (ta ta) (a b) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a b) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (a a) (b b) (ks ks))
-  (precedes ((1 2) (0 0)) ((2 1) (1 1)))
-  (non-orig (privk b) (privk ks))
-  (uniq-orig k)
-  (operation encryption-test (displaced 3 2 keyserver 2)
-    (enc a-0 (pubk a-0) (privk ks)) (1 1))
-  (traces
-    ((recv
-       (enc (enc b b k ta (privk b)) (enc b (pubk b) (privk ks))
-         (enc b (pubk b) (privk ks)) (pubk b))))
-    ((send (cat b b))
-      (recv
-        (cat (enc b (pubk b) (privk ks)) (enc b (pubk b) (privk ks))))
-      (send
-        (enc (enc b b k ta (privk b)) (enc b (pubk b) (privk ks))
-          (enc b (pubk b) (privk ks)) (pubk b))))
-    ((recv (cat a b))
-      (send
-        (cat (enc b (pubk b) (privk ks)) (enc a (pubk a) (privk ks))))))
-  (label 5)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a b) (b b) (ks ks) (k k) (ta ta))))
-  (origs (k (1 2))))
-
-(defskeleton denning-sacco
-  (vars (ta text) (a b ks a-0 a-1 name) (k skey))
-  (defstrand resp 1 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (a a-0) (b b) (ks ks))
-  (defstrand keyserver 2 (a a-1) (b a) (ks ks))
-  (precedes ((1 2) (0 0)) ((2 1) (1 1)) ((3 1) (1 1)))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc a (pubk a) (privk ks)) (1 1))
-  (traces
-    ((recv
-       (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-         (enc a (pubk a) (privk ks)) (pubk b))))
-    ((send (cat a b))
-      (recv
-        (cat (enc b (pubk b) (privk ks)) (enc a (pubk a) (privk ks))))
-      (send
-        (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-          (enc a (pubk a) (privk ks)) (pubk b))))
-    ((recv (cat a-0 b))
-      (send
-        (cat (enc b (pubk b) (privk ks))
-          (enc a-0 (pubk a-0) (privk ks)))))
-    ((recv (cat a-1 a))
-      (send
-        (cat (enc a (pubk a) (privk ks))
-          (enc a-1 (pubk a-1) (privk ks))))))
-  (label 6)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (k k) (ta ta))))
-  (origs (k (1 2))))
-
-(defskeleton denning-sacco
-  (vars (ta text) (b ks a name) (k skey))
-  (defstrand resp 1 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (a a) (b b) (ks ks))
-  (precedes ((1 2) (0 0)) ((2 1) (1 1)))
-  (non-orig (privk b) (privk ks) (privk a))
-  (uniq-orig k)
-  (operation encryption-test (displaced 3 2 keyserver 2)
-    (enc a-0 (pubk a-0) (privk ks)) (1 1))
-  (traces
-    ((recv
-       (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-         (enc a (pubk a) (privk ks)) (pubk b))))
-    ((send (cat a b))
-      (recv
-        (cat (enc b (pubk b) (privk ks)) (enc a (pubk a) (privk ks))))
-      (send
-        (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-          (enc a (pubk a) (privk ks)) (pubk b))))
-    ((recv (cat a b))
-      (send
-        (cat (enc b (pubk b) (privk ks)) (enc a (pubk a) (privk ks))))))
-  (label 7)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (k k) (ta ta))))
-  (origs (k (1 2))))
-
-(defskeleton denning-sacco
-  (vars (ta text) (a b ks a-0 b-0 name) (k skey))
-  (defstrand resp 1 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (a a-0) (b b) (ks ks))
-  (defstrand keyserver 2 (a a) (b b-0) (ks ks))
-  (precedes ((1 2) (0 0)) ((2 1) (1 1)) ((3 1) (1 1)))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc a (pubk a) (privk ks)) (1 1))
-  (traces
-    ((recv
-       (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-         (enc a (pubk a) (privk ks)) (pubk b))))
-    ((send (cat a b))
-      (recv
-        (cat (enc b (pubk b) (privk ks)) (enc a (pubk a) (privk ks))))
-      (send
-        (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-          (enc a (pubk a) (privk ks)) (pubk b))))
-    ((recv (cat a-0 b))
-      (send
-        (cat (enc b (pubk b) (privk ks))
-          (enc a-0 (pubk a-0) (privk ks)))))
-    ((recv (cat a b-0))
-      (send
-        (cat (enc b-0 (pubk b-0) (privk ks))
-          (enc a (pubk a) (privk ks))))))
-  (label 8)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (k k) (ta ta))))
-  (origs (k (1 2))))
-
-(defskeleton denning-sacco
-  (vars (ta text) (b ks b-0 name) (k skey))
-  (defstrand resp 1 (ta ta) (a b-0) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a b-0) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (a b) (b b-0) (ks ks))
-  (precedes ((1 2) (0 0)) ((2 1) (1 1)))
-  (non-orig (privk b) (privk ks) (privk b-0))
-  (uniq-orig k)
-  (operation encryption-test (displaced 3 2 keyserver 2)
-    (enc a (pubk a) (privk ks)) (1 1))
-  (traces
-    ((recv
-       (enc (enc b-0 b k ta (privk b-0)) (enc b (pubk b) (privk ks))
-         (enc b-0 (pubk b-0) (privk ks)) (pubk b))))
-    ((send (cat b-0 b))
-      (recv
-        (cat (enc b (pubk b) (privk ks))
-          (enc b-0 (pubk b-0) (privk ks))))
-      (send
-        (enc (enc b-0 b k ta (privk b-0)) (enc b (pubk b) (privk ks))
-          (enc b-0 (pubk b-0) (privk ks)) (pubk b))))
-    ((recv (cat b b-0))
-      (send
-        (cat (enc b-0 (pubk b-0) (privk ks))
-          (enc b (pubk b) (privk ks))))))
-  (label 9)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a b-0) (b b) (ks ks) (k k) (ta ta))))
-  (origs (k (1 2))))
-
-(defskeleton denning-sacco
-  (vars (ta text) (a b ks b-0 a-0 name) (k skey))
-  (defstrand resp 1 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (a b) (b b-0) (ks ks))
-  (defstrand keyserver 2 (a a-0) (b a) (ks ks))
-  (precedes ((1 2) (0 0)) ((2 1) (1 1)) ((3 1) (1 1)))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc a (pubk a) (privk ks)) (1 1))
-  (traces
-    ((recv
-       (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-         (enc a (pubk a) (privk ks)) (pubk b))))
-    ((send (cat a b))
-      (recv
-        (cat (enc b (pubk b) (privk ks)) (enc a (pubk a) (privk ks))))
-      (send
-        (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-          (enc a (pubk a) (privk ks)) (pubk b))))
-    ((recv (cat b b-0))
-      (send
-        (cat (enc b-0 (pubk b-0) (privk ks))
-          (enc b (pubk b) (privk ks)))))
-    ((recv (cat a-0 a))
-      (send
-        (cat (enc a (pubk a) (privk ks))
-          (enc a-0 (pubk a-0) (privk ks))))))
-  (label 10)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (k k) (ta ta))))
-  (origs (k (1 2))))
-
-(defskeleton denning-sacco
-  (vars (ta text) (b ks b-0 name) (k skey))
-  (defstrand resp 1 (ta ta) (a b) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a b) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (a b) (b b-0) (ks ks))
-  (precedes ((1 2) (0 0)) ((2 1) (1 1)))
-  (non-orig (privk b) (privk ks))
-  (uniq-orig k)
-  (operation encryption-test (displaced 3 2 keyserver 2)
-    (enc a (pubk a) (privk ks)) (1 1))
-  (traces
-    ((recv
-       (enc (enc b b k ta (privk b)) (enc b (pubk b) (privk ks))
-         (enc b (pubk b) (privk ks)) (pubk b))))
-    ((send (cat b b))
-      (recv
-        (cat (enc b (pubk b) (privk ks)) (enc b (pubk b) (privk ks))))
-      (send
-        (enc (enc b b k ta (privk b)) (enc b (pubk b) (privk ks))
-          (enc b (pubk b) (privk ks)) (pubk b))))
-    ((recv (cat b b-0))
-      (send
-        (cat (enc b-0 (pubk b-0) (privk ks))
-          (enc b (pubk b) (privk ks))))))
-  (label 11)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a b) (b b) (ks ks) (k k) (ta ta))))
-  (origs (k (1 2))))
-
-(defskeleton denning-sacco
-  (vars (ta text) (a b ks b-0 b-1 name) (k skey))
-  (defstrand resp 1 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ta ta) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (a b) (b b-0) (ks ks))
-  (defstrand keyserver 2 (a a) (b b-1) (ks ks))
-  (precedes ((1 2) (0 0)) ((2 1) (1 1)) ((3 1) (1 1)))
-  (non-orig (privk a) (privk b) (privk ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc a (pubk a) (privk ks)) (1 1))
-  (traces
-    ((recv
-       (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-         (enc a (pubk a) (privk ks)) (pubk b))))
-    ((send (cat a b))
-      (recv
-        (cat (enc b (pubk b) (privk ks)) (enc a (pubk a) (privk ks))))
-      (send
-        (enc (enc a b k ta (privk a)) (enc b (pubk b) (privk ks))
-          (enc a (pubk a) (privk ks)) (pubk b))))
-    ((recv (cat b b-0))
-      (send
-        (cat (enc b-0 (pubk b-0) (privk ks))
-          (enc b (pubk b) (privk ks)))))
-    ((recv (cat a b-1))
-      (send
-        (cat (enc b-1 (pubk b-1) (privk ks))
-          (enc a (pubk a) (privk ks))))))
-  (label 12)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (k k) (ta ta))))
-  (origs (k (1 2))))
-
-(comment "Nothing left to do")
diff --git a/tst/deorig_contract.scm b/tst/deorig_contract.scm
deleted file mode 100644
--- a/tst/deorig_contract.scm
+++ /dev/null
@@ -1,40 +0,0 @@
-;;;  Deorig_contract:  Demonstrates a subtle incompleteness.
-;;;
-;;;  Attempts to show that deorigination may be necessary
-;;; even during non-augmentation steps, such as in a contraction.
-;;;  The idea is to make for a situation in which a value will
-;;; be originated on a strand but later a contraction will force
-;;; that value to be one that is restricted, where deorigination
-;;; can solve the problem but CPSA will probably eliminate the
-;;; contraction from the cohort.
-
-(defprotocol deorig-contract basic
-  (defrole init (vars (k akey) (x1 x2 text))
-     (trace
-       (send (enc x1 k))
-       (send (enc x2 k))
-       (recv (enc x1 x2 k))
-     )
-     (uniq-orig x1 x2)
-     (non-orig (invk k))
-   )
-   (defrole resp (vars (k akey) (y1 y2 y3 text))
-     (trace
-       (recv (enc y1 k))
-       (recv (enc y2 k))
-       (send (enc y1 y3 k))
-     )
-   )
-)
-
-(defskeleton deorig-contract
-   (vars)
-   (defstrand init 3)
-)
-
-(defskeleton deorig-contract
-   (vars (k akey) (x1 x2 text))
-   (defstrand init 3 (k k) (x1 x1) (x2 x2))
-   (defstrand resp 3 (k k) (y1 x1) (y2 x2) (y3 x2))
-   (precedes ((0 0) (1 0)) ((0 1) (1 1)) ((1 2) (0 2)))
-)
diff --git a/tst/deorig_contract.tst b/tst/deorig_contract.tst
deleted file mode 100644
--- a/tst/deorig_contract.tst
+++ /dev/null
@@ -1,67 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from deorig_contract.scm")
-
-(defprotocol deorig-contract basic
-  (defrole init
-    (vars (k akey) (x1 x2 text))
-    (trace (send (enc x1 k)) (send (enc x2 k)) (recv (enc x1 x2 k)))
-    (non-orig (invk k))
-    (uniq-orig x1 x2))
-  (defrole resp
-    (vars (k akey) (y1 y2 y3 text))
-    (trace (recv (enc y1 k)) (recv (enc y2 k)) (send (enc y1 y3 k)))))
-
-(defskeleton deorig-contract
-  (vars (x1 x2 text) (k akey))
-  (defstrand init 3 (x1 x1) (x2 x2) (k k))
-  (non-orig (invk k))
-  (uniq-orig x1 x2)
-  (traces ((send (enc x1 k)) (send (enc x2 k)) (recv (enc x1 x2 k))))
-  (label 0)
-  (unrealized (0 2))
-  (origs (x2 (0 1)) (x1 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton deorig-contract
-  (vars (x1 x2 y2 y3 text) (k akey))
-  (defstrand init 3 (x1 x1) (x2 x2) (k k))
-  (defstrand resp 3 (y1 x1) (y2 y2) (y3 y3) (k k))
-  (precedes ((0 0) (1 0)) ((1 2) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig x1 x2)
-  (operation nonce-test (added-strand resp 3) x1 (0 2) (enc x1 k))
-  (traces ((send (enc x1 k)) (send (enc x2 k)) (recv (enc x1 x2 k)))
-    ((recv (enc x1 k)) (recv (enc y2 k)) (send (enc x1 y3 k))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
-
-(defprotocol deorig-contract basic
-  (defrole init
-    (vars (k akey) (x1 x2 text))
-    (trace (send (enc x1 k)) (send (enc x2 k)) (recv (enc x1 x2 k)))
-    (non-orig (invk k))
-    (uniq-orig x1 x2))
-  (defrole resp
-    (vars (k akey) (y1 y2 y3 text))
-    (trace (recv (enc y1 k)) (recv (enc y2 k)) (send (enc y1 y3 k)))))
-
-(defskeleton deorig-contract
-  (vars (x1 x2 text) (k akey))
-  (defstrand init 3 (x1 x1) (x2 x2) (k k))
-  (defstrand resp 3 (y1 x1) (y2 x2) (y3 x2) (k k))
-  (precedes ((0 0) (1 0)) ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig x1 x2)
-  (traces ((send (enc x1 k)) (send (enc x2 k)) (recv (enc x1 x2 k)))
-    ((recv (enc x1 k)) (recv (enc x2 k)) (send (enc x1 x2 k))))
-  (label 2)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((k k) (x1 x1) (x2 x2))))
-  (origs (x2 (0 1)) (x1 (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/deorig_mesg.scm b/tst/deorig_mesg.scm
deleted file mode 100644
--- a/tst/deorig_mesg.scm
+++ /dev/null
@@ -1,19 +0,0 @@
-(herald deorig-mesg)
-
-(defprotocol deorig-mesg basic
-  (defrole init
-    (vars (k akey) (x text))
-    (trace (send (enc x k)) (recv x))
-    (uniq-orig x)
-    (non-orig (invk k)))
-  (defrole resp
-    (vars (x mesg) (y text))
-    (trace (recv x) (send y))))
-
-(defskeleton deorig-mesg (vars) (defstrand init 2))
-
-(defskeleton deorig-mesg
-  (vars (k akey) (z text))
-  (defstrand init 2 (k k) (x z))
-  (defstrand resp 2 (x (enc z k)) (y z))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1))))
diff --git a/tst/deorig_mesg.tst b/tst/deorig_mesg.tst
deleted file mode 100644
--- a/tst/deorig_mesg.tst
+++ /dev/null
@@ -1,49 +0,0 @@
-(herald deorig-mesg)
-
-(comment "CPSA 2.5.4")
-(comment "All input read from deorig_mesg.scm")
-
-(defprotocol deorig-mesg basic
-  (defrole init
-    (vars (k akey) (x text))
-    (trace (send (enc x k)) (recv x))
-    (non-orig (invk k))
-    (uniq-orig x))
-  (defrole resp (vars (x mesg) (y text)) (trace (recv x) (send y))))
-
-(defskeleton deorig-mesg
-  (vars (x text) (k akey))
-  (defstrand init 2 (x x) (k k))
-  (non-orig (invk k))
-  (uniq-orig x)
-  (traces ((send (enc x k)) (recv x)))
-  (label 0)
-  (unrealized (0 1))
-  (origs (x (0 0)))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
-
-(defprotocol deorig-mesg basic
-  (defrole init
-    (vars (k akey) (x text))
-    (trace (send (enc x k)) (recv x))
-    (non-orig (invk k))
-    (uniq-orig x))
-  (defrole resp (vars (x mesg) (y text)) (trace (recv x) (send y))))
-
-(defskeleton deorig-mesg
-  (vars (z text) (k akey))
-  (defstrand init 2 (x z) (k k))
-  (defstrand resp 2 (x (enc z k)) (y z))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig z)
-  (traces ((send (enc z k)) (recv z)) ((recv (enc z k)) (send z)))
-  (label 1)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((k k) (z z))))
-  (origs (z (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/deorig_simple.scm b/tst/deorig_simple.scm
deleted file mode 100644
--- a/tst/deorig_simple.scm
+++ /dev/null
@@ -1,30 +0,0 @@
-(herald deorig-simple)
-
-;;;  Deorig_simple:     Demonstrates the same incompleteness as
-;;;                     deorig_contract, but with fewer messages.
-;;;
-;;;  This simply sets up the archetypal nonce test for an init strand
-;;;  but the resp role is only a partial match for the test.  In particular,
-;;;  it sends a different value than it receives.  The obvious shape is one
-;;;  in which the resp strand sends the same value it receives, but this
-;;;  shape is not found.
-
-(defprotocol deorig-simple basic
-  (defrole init
-    (vars (k akey) (x text))
-    (trace (send (enc x k)) (recv x))
-    (uniq-orig x)
-    (non-orig (invk k)))
-  (defrole resp
-    (vars (k akey) (x y text))
-    (trace (recv (enc x k)) (send y))))
-
-(defskeleton deorig-simple
-  (vars)
-  (defstrand init 2))
-
-(defskeleton deorig-simple
-  (vars (k akey) (z text))
-  (defstrand init 2 (k k) (x z))
-  (defstrand resp 2 (k k) (x z) (y z))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1))))
diff --git a/tst/deorig_simple.tst b/tst/deorig_simple.tst
deleted file mode 100644
--- a/tst/deorig_simple.tst
+++ /dev/null
@@ -1,53 +0,0 @@
-(herald deorig-simple)
-
-(comment "CPSA 2.5.4")
-(comment "All input read from deorig_simple.scm")
-
-(defprotocol deorig-simple basic
-  (defrole init
-    (vars (k akey) (x text))
-    (trace (send (enc x k)) (recv x))
-    (non-orig (invk k))
-    (uniq-orig x))
-  (defrole resp
-    (vars (k akey) (x y text))
-    (trace (recv (enc x k)) (send y))))
-
-(defskeleton deorig-simple
-  (vars (x text) (k akey))
-  (defstrand init 2 (x x) (k k))
-  (non-orig (invk k))
-  (uniq-orig x)
-  (traces ((send (enc x k)) (recv x)))
-  (label 0)
-  (unrealized (0 1))
-  (origs (x (0 0)))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
-
-(defprotocol deorig-simple basic
-  (defrole init
-    (vars (k akey) (x text))
-    (trace (send (enc x k)) (recv x))
-    (non-orig (invk k))
-    (uniq-orig x))
-  (defrole resp
-    (vars (k akey) (x y text))
-    (trace (recv (enc x k)) (send y))))
-
-(defskeleton deorig-simple
-  (vars (z text) (k akey))
-  (defstrand init 2 (x z) (k k))
-  (defstrand resp 2 (x z) (y z) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig z)
-  (traces ((send (enc z k)) (recv z)) ((recv (enc z k)) (send z)))
-  (label 1)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((k k) (z z))))
-  (origs (z (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/dh-ca.scm b/tst/dh-ca.scm
new file mode 100644
--- /dev/null
+++ b/tst/dh-ca.scm
@@ -0,0 +1,54 @@
+(herald dhca (algebra diffie-hellman))
+
+(defprotocol dhca diffie-hellman
+  (defrole init 
+    (vars (x expn) (a b ca name) (h base) (n text))
+    (trace
+     (send (enc "reg" (exp (gen) x) a (privk a)))
+     (recv (enc (exp (gen) x) a (privk ca)))
+     (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+     (recv (cat h (enc h b (privk ca)) (enc n (exp h x))))
+     (send (enc "check" n (exp h x))))
+    (uniq-gen x)
+    (non-orig (privk ca)))
+  (defrole resp 
+    (vars (y expn) (a b ca name) (h base) (n text))
+    (trace
+     (send (enc "reg" (exp (gen) y) b (privk b))) 
+     (recv (enc (exp (gen) y) b (privk ca)))
+     (recv (cat h (enc h a (privk ca))))
+     (send (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+		(enc n (exp h y))))
+     (recv (enc "check" n (exp h y))))
+    (uniq-gen y)
+    (non-orig (privk ca)))
+  (defrole ca (vars (subject ca name) (h base))
+    (trace
+     (recv (enc "reg" h subject (privk subject)))
+     (send (enc h subject (privk ca))))
+    (non-orig (privk subject))
+    )
+  (comment A diffie-hellman exchange which uses a certificate
+    authority to certify long-term DH values)
+)
+
+(defskeleton dhca
+  (vars )
+  (defstrand init 5 )
+(comment Full initiator POV No need to make extra assumptions))
+
+(defskeleton dhca
+  (vars (n text))
+  (defstrand resp 5 (n n))
+  (uniq-orig n)
+  (comment Full responder point of view with freshly chosen n)
+)
+
+(defskeleton dhca
+  (vars (a b ca name) (x y expn) (n text))
+  (defstrand init 5 (x x) (h (exp (gen) y)) (ca ca) (a a) (b b) (n n))
+  (defstrand resp 5 (y y) (h (exp (gen) x)) (ca ca) (a a) (b b) (n n))
+(uniq-orig n)
+(comment point of view in which init and resp each complete and
+    they agree on the relevant parameters)
+)
diff --git a/tst/dh-ca.tst b/tst/dh-ca.tst
new file mode 100644
--- /dev/null
+++ b/tst/dh-ca.tst
@@ -0,0 +1,2487 @@
+(herald dhca (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from dh-ca.scm")
+
+(defprotocol dhca diffie-hellman
+  (defrole init
+    (vars (x expn) (a b ca name) (h base) (n text))
+    (trace (send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv (cat h (enc h b (privk ca)) (enc n (exp h x))))
+      (send (enc "check" n (exp h x))))
+    (non-orig (privk ca))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (a b ca name) (h base) (n text))
+    (trace (send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat h (enc h a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp h y)))) (recv (enc "check" n (exp h y))))
+    (non-orig (privk ca))
+    (uniq-gen y))
+  (defrole ca
+    (vars (subject ca name) (h base))
+    (trace (recv (enc "reg" h subject (privk subject)))
+      (send (enc h subject (privk ca))))
+    (non-orig (privk subject)))
+  (comment A diffie-hellman exchange which uses a certificate authority
+    to certify long-term DH values))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (h base) (x expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h h) (x x))
+  (non-orig (privk ca))
+  (uniq-gen x)
+  (comment Full initiator POV No need to make extra assumptions)
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv (cat h (enc h b (privk ca)) (enc n (exp h x))))
+      (send (enc "check" n (exp h x)))))
+  (label 0)
+  (unrealized (0 1) (0 3))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (h base) (x expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h h) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk ca))
+  (uniq-gen x)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) x) a (privk ca)) (0 1))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv (cat h (enc h b (privk ca)) (enc n (exp h x))))
+      (send (enc "check" n (exp h x))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca)))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a ca name) (x expn))
+  (defstrand init 5 (n n) (a a) (b a) (ca ca) (h (exp (gen) x)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk ca))
+  (uniq-gen x)
+  (operation encryption-test (displaced 2 1 ca 2) (enc h b (privk ca))
+    (0 3))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))
+          (enc n (exp (gen) (mul x x)))))
+      (send (enc "check" n (exp (gen) (mul x x)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca)))))
+  (label 2)
+  (parent 1)
+  (unrealized (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (h base) (x expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h h) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h h))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((2 1) (0 3)))
+  (non-orig (privk a) (privk b) (privk ca))
+  (uniq-gen x)
+  (operation encryption-test (added-strand ca 2) (enc h b (privk ca))
+    (0 3))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv (cat h (enc h b (privk ca)) (enc n (exp h x))))
+      (send (enc "check" n (exp h x))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" h b (privk b))) (send (enc h b (privk ca)))))
+  (label 3)
+  (parent 1)
+  (unrealized (0 3) (2 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a ca a-0 b ca-0 name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b a) (ca ca) (h (exp (gen) x)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand resp 4 (n n) (a a-0) (b b) (ca ca-0)
+    (h (exp (gen) (mul x x (rec y)))) (y y))
+  (precedes ((0 0) (1 0)) ((0 0) (2 2)) ((1 1) (0 1)) ((2 3) (0 3)))
+  (non-orig (privk a) (privk ca) (privk ca-0))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand resp 4)
+    (enc n (exp (gen) (mul x x))) (0 3))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))
+          (enc n (exp (gen) (mul x x)))))
+      (send (enc "check" n (exp (gen) (mul x x)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca-0)))
+      (recv
+        (cat (exp (gen) (mul x x (rec y)))
+          (enc (exp (gen) (mul x x (rec y))) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca-0))
+          (enc n (exp (gen) (mul x x)))))))
+  (label 4)
+  (parent 2)
+  (unrealized (2 1) (2 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a ca name) (x expn))
+  (defstrand init 5 (n n) (a a) (b a) (ca ca) (h (exp (gen) x)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (deflistener (exp (gen) (mul x x)))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
+  (non-orig (privk a) (privk ca))
+  (uniq-gen x)
+  (operation encryption-test (added-listener (exp (gen) (mul x x)))
+    (enc n (exp (gen) (mul x x))) (0 3))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))
+          (enc n (exp (gen) (mul x x)))))
+      (send (enc "check" n (exp (gen) (mul x x)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (exp (gen) (mul x x))) (send (exp (gen) (mul x x)))))
+  (label 5)
+  (parent 2)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (a ca name) (y expn))
+  (defstrand init 5 (n n) (a a) (b a) (ca ca) (h (exp (gen) y)) (x y))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y)))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
+  (non-orig (privk a) (privk ca))
+  (uniq-gen y)
+  (operation encryption-test (displaced 3 0 resp 1)
+    (enc "reg" (exp (gen) y-0) b (privk b)) (2 0))
+  (traces
+    ((send (enc "reg" (exp (gen) y) a (privk a)))
+      (recv (enc (exp (gen) y) a (privk ca)))
+      (send (cat (exp (gen) y) (enc (exp (gen) y) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) a (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (send (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) a (privk a)))
+      (send (enc (exp (gen) y) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) a (privk a)))
+      (send (enc (exp (gen) y) a (privk ca)))))
+  (label 6)
+  (parent 3)
+  (unrealized (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 1 (b b) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((2 1) (0 3)) ((3 0) (2 0)))
+  (non-orig (privk a) (privk b) (privk ca))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand resp 1)
+    (enc "reg" (exp (gen) y) b (privk b)) (2 0))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))))
+  (label 7)
+  (parent 3)
+  (unrealized (0 3))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a ca a-0 b ca-0 name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b a) (ca ca) (h (exp (gen) x)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand resp 4 (n n) (a a-0) (b b) (ca ca-0)
+    (h (exp (gen) (mul x x (rec y)))) (y y))
+  (defstrand ca 2 (subject b) (ca ca-0) (h (exp (gen) y)))
+  (precedes ((0 0) (1 0)) ((0 0) (2 2)) ((1 1) (0 1)) ((2 0) (3 0))
+    ((2 3) (0 3)) ((3 1) (2 1)))
+  (non-orig (privk a) (privk ca) (privk b) (privk ca-0))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) y) b (privk ca-0)) (2 1))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))
+          (enc n (exp (gen) (mul x x)))))
+      (send (enc "check" n (exp (gen) (mul x x)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca-0)))
+      (recv
+        (cat (exp (gen) (mul x x (rec y)))
+          (enc (exp (gen) (mul x x (rec y))) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca-0))
+          (enc n (exp (gen) (mul x x))))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca-0)))))
+  (label 8)
+  (parent 4)
+  (unrealized (2 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a ca a-0 b ca-0 name) (y y-0 expn))
+  (defstrand init 5 (n n) (a a) (b a) (ca ca) (h (exp (gen) y)) (x y))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a-0) (b b) (ca ca-0)
+    (h (exp (gen) (mul y y (rec y-0)))) (y y-0))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 2)) ((1 1) (0 1))
+    ((2 1) (0 3)) ((3 3) (0 3)))
+  (non-orig (privk a) (privk ca) (privk ca-0))
+  (uniq-gen y y-0)
+  (operation encryption-test (added-strand resp 4)
+    (enc n (exp (gen) (mul y y))) (0 3))
+  (traces
+    ((send (enc "reg" (exp (gen) y) a (privk a)))
+      (recv (enc (exp (gen) y) a (privk ca)))
+      (send (cat (exp (gen) y) (enc (exp (gen) y) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) a (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (send (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) a (privk a)))
+      (send (enc (exp (gen) y) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) a (privk a)))
+      (send (enc (exp (gen) y) a (privk ca))))
+    ((send (enc "reg" (exp (gen) y-0) b (privk b)))
+      (recv (enc (exp (gen) y-0) b (privk ca-0)))
+      (recv
+        (cat (exp (gen) (mul y y (rec y-0)))
+          (enc (exp (gen) (mul y y (rec y-0))) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y-0) (enc (exp (gen) y-0) b (privk ca-0))
+          (enc n (exp (gen) (mul y y)))))))
+  (label 9)
+  (parent 6)
+  (unrealized (3 1) (3 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a ca name) (y expn))
+  (defstrand init 5 (n n) (a a) (b a) (ca ca) (h (exp (gen) y)) (x y))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y)))
+  (deflistener (exp (gen) (mul y y)))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
+    ((2 1) (0 3)) ((3 1) (0 3)))
+  (non-orig (privk a) (privk ca))
+  (uniq-gen y)
+  (operation encryption-test (added-listener (exp (gen) (mul y y)))
+    (enc n (exp (gen) (mul y y))) (0 3))
+  (traces
+    ((send (enc "reg" (exp (gen) y) a (privk a)))
+      (recv (enc (exp (gen) y) a (privk ca)))
+      (send (cat (exp (gen) y) (enc (exp (gen) y) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) a (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (send (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) a (privk a)))
+      (send (enc (exp (gen) y) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) a (privk a)))
+      (send (enc (exp (gen) y) a (privk ca))))
+    ((recv (exp (gen) (mul y y))) (send (exp (gen) (mul y y)))))
+  (label 10)
+  (parent 6)
+  (unrealized (3 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (a ca a-0 b ca-0 name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a-0) (b b) (ca ca-0) (h (exp (gen) x))
+    (y y))
+  (precedes ((0 0) (1 0)) ((0 0) (3 2)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((3 0) (2 0)) ((3 3) (0 3)))
+  (non-orig (privk a) (privk ca) (privk b) (privk ca-0))
+  (uniq-gen x y)
+  (operation encryption-test (displaced 3 4 resp 4)
+    (enc n (exp (gen) (mul x y-0))) (0 3))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca-0)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca-0))
+          (enc n (exp (gen) (mul x y)))))))
+  (label 11)
+  (parent 7)
+  (unrealized (3 1) (3 2))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca a-0 b-0 ca-0 name) (x y y-0 expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 1 (b b) (y y))
+  (defstrand resp 4 (n n) (a a-0) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul x y (rec y-0)))) (y y-0))
+  (precedes ((0 0) (1 0)) ((0 0) (4 2)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((3 0) (2 0)) ((3 0) (4 2)) ((4 3) (0 3)))
+  (non-orig (privk a) (privk b) (privk ca) (privk ca-0))
+  (uniq-gen x y y-0)
+  (operation encryption-test (added-strand resp 4)
+    (enc n (exp (gen) (mul x y))) (0 3))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b))))
+    ((send (enc "reg" (exp (gen) y-0) b-0 (privk b-0)))
+      (recv (enc (exp (gen) y-0) b-0 (privk ca-0)))
+      (recv
+        (cat (exp (gen) (mul x y (rec y-0)))
+          (enc (exp (gen) (mul x y (rec y-0))) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y-0) (enc (exp (gen) y-0) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul x y)))))))
+  (label 12)
+  (parent 7)
+  (unrealized (4 1) (4 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 1 (b b) (y y))
+  (deflistener (exp (gen) (mul x y)))
+  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((3 0) (2 0)) ((3 0) (4 0)) ((4 1) (0 3)))
+  (non-orig (privk a) (privk b) (privk ca))
+  (uniq-gen x y)
+  (operation encryption-test (added-listener (exp (gen) (mul x y)))
+    (enc n (exp (gen) (mul x y))) (0 3))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b))))
+    ((recv (exp (gen) (mul x y))) (send (exp (gen) (mul x y)))))
+  (label 13)
+  (parent 7)
+  (unrealized (4 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (a ca a-0 b ca-0 name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b a) (ca ca) (h (exp (gen) x)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand resp 4 (n n) (a a-0) (b b) (ca ca-0)
+    (h (exp (gen) (mul x x (rec y)))) (y y))
+  (defstrand ca 2 (subject b) (ca ca-0) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a-0) (ca ca-0)
+    (h (exp (gen) (mul x x (rec y)))))
+  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((1 1) (0 1)) ((2 0) (3 0))
+    ((2 0) (4 0)) ((2 3) (0 3)) ((3 1) (2 1)) ((4 1) (2 2)))
+  (non-orig (privk a) (privk ca) (privk a-0) (privk b) (privk ca-0))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) (mul x x (rec y))) a-0 (privk ca-0)) (2 2))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))
+          (enc n (exp (gen) (mul x x)))))
+      (send (enc "check" n (exp (gen) (mul x x)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca-0)))
+      (recv
+        (cat (exp (gen) (mul x x (rec y)))
+          (enc (exp (gen) (mul x x (rec y))) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca-0))
+          (enc n (exp (gen) (mul x x))))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca-0))))
+    ((recv (enc "reg" (exp (gen) (mul x x (rec y))) a-0 (privk a-0)))
+      (send (enc (exp (gen) (mul x x (rec y))) a-0 (privk ca-0)))))
+  (label 14)
+  (parent 8)
+  (unrealized (4 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (a ca a-0 b ca-0 name) (y y-0 expn))
+  (defstrand init 5 (n n) (a a) (b a) (ca ca) (h (exp (gen) y)) (x y))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a-0) (b b) (ca ca-0)
+    (h (exp (gen) (mul y y (rec y-0)))) (y y-0))
+  (defstrand ca 2 (subject b) (ca ca-0) (h (exp (gen) y-0)))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 2)) ((1 1) (0 1))
+    ((2 1) (0 3)) ((3 0) (4 0)) ((3 3) (0 3)) ((4 1) (3 1)))
+  (non-orig (privk a) (privk ca) (privk b) (privk ca-0))
+  (uniq-gen y y-0)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) y-0) b (privk ca-0)) (3 1))
+  (traces
+    ((send (enc "reg" (exp (gen) y) a (privk a)))
+      (recv (enc (exp (gen) y) a (privk ca)))
+      (send (cat (exp (gen) y) (enc (exp (gen) y) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) a (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (send (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) a (privk a)))
+      (send (enc (exp (gen) y) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) a (privk a)))
+      (send (enc (exp (gen) y) a (privk ca))))
+    ((send (enc "reg" (exp (gen) y-0) b (privk b)))
+      (recv (enc (exp (gen) y-0) b (privk ca-0)))
+      (recv
+        (cat (exp (gen) (mul y y (rec y-0)))
+          (enc (exp (gen) (mul y y (rec y-0))) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y-0) (enc (exp (gen) y-0) b (privk ca-0))
+          (enc n (exp (gen) (mul y y))))))
+    ((recv (enc "reg" (exp (gen) y-0) b (privk b)))
+      (send (enc (exp (gen) y-0) b (privk ca-0)))))
+  (label 15)
+  (parent 9)
+  (unrealized (3 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a ca a-0 b name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a-0) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((0 0) (3 2)) ((1 1) (0 1)) ((2 1) (3 1))
+    ((3 0) (2 0)) ((3 3) (0 3)))
+  (non-orig (privk a) (privk ca) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (displaced 4 2 ca 2)
+    (enc (exp (gen) y) b (privk ca-0)) (3 1))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a-0 (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))))
+  (label 16)
+  (parent 11)
+  (unrealized (3 2))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a ca a-0 b ca-0 name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a-0) (b b) (ca ca-0) (h (exp (gen) x))
+    (y y))
+  (defstrand ca 2 (subject b) (ca ca-0) (h (exp (gen) y)))
+  (precedes ((0 0) (1 0)) ((0 0) (3 2)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((3 0) (2 0)) ((3 0) (4 0)) ((3 3) (0 3)) ((4 1) (3 1)))
+  (non-orig (privk a) (privk ca) (privk b) (privk ca-0))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) y) b (privk ca-0)) (3 1))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca-0)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca-0))
+          (enc n (exp (gen) (mul x y))))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca-0)))))
+  (label 17)
+  (parent 11)
+  (unrealized (3 2))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca a-0 b-0 ca-0 name) (x y y-0 expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 1 (b b) (y y))
+  (defstrand resp 4 (n n) (a a-0) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul x y (rec y-0)))) (y y-0))
+  (defstrand ca 2 (subject b-0) (ca ca-0) (h (exp (gen) y-0)))
+  (precedes ((0 0) (1 0)) ((0 0) (4 2)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((3 0) (2 0)) ((3 0) (4 2)) ((4 0) (5 0)) ((4 3) (0 3))
+    ((5 1) (4 1)))
+  (non-orig (privk a) (privk b) (privk ca) (privk b-0) (privk ca-0))
+  (uniq-gen x y y-0)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) y-0) b-0 (privk ca-0)) (4 1))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b))))
+    ((send (enc "reg" (exp (gen) y-0) b-0 (privk b-0)))
+      (recv (enc (exp (gen) y-0) b-0 (privk ca-0)))
+      (recv
+        (cat (exp (gen) (mul x y (rec y-0)))
+          (enc (exp (gen) (mul x y (rec y-0))) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y-0) (enc (exp (gen) y-0) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul x y))))))
+    ((recv (enc "reg" (exp (gen) y-0) b-0 (privk b-0)))
+      (send (enc (exp (gen) y-0) b-0 (privk ca-0)))))
+  (label 18)
+  (parent 12)
+  (unrealized (4 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a ca a-0 b ca-0 name) (y y-0 expn))
+  (defstrand init 5 (n n) (a a) (b a) (ca ca) (h (exp (gen) y)) (x y))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a-0) (b b) (ca ca-0)
+    (h (exp (gen) (mul y y (rec y-0)))) (y y-0))
+  (defstrand ca 2 (subject b) (ca ca-0) (h (exp (gen) y-0)))
+  (defstrand ca 2 (subject a-0) (ca ca-0)
+    (h (exp (gen) (mul y y (rec y-0)))))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (5 0)) ((1 1) (0 1))
+    ((2 1) (0 3)) ((3 0) (4 0)) ((3 0) (5 0)) ((3 3) (0 3))
+    ((4 1) (3 1)) ((5 1) (3 2)))
+  (non-orig (privk a) (privk ca) (privk a-0) (privk b) (privk ca-0))
+  (uniq-gen y y-0)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) (mul y y (rec y-0))) a-0 (privk ca-0)) (3 2))
+  (traces
+    ((send (enc "reg" (exp (gen) y) a (privk a)))
+      (recv (enc (exp (gen) y) a (privk ca)))
+      (send (cat (exp (gen) y) (enc (exp (gen) y) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) a (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (send (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) a (privk a)))
+      (send (enc (exp (gen) y) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) a (privk a)))
+      (send (enc (exp (gen) y) a (privk ca))))
+    ((send (enc "reg" (exp (gen) y-0) b (privk b)))
+      (recv (enc (exp (gen) y-0) b (privk ca-0)))
+      (recv
+        (cat (exp (gen) (mul y y (rec y-0)))
+          (enc (exp (gen) (mul y y (rec y-0))) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y-0) (enc (exp (gen) y-0) b (privk ca-0))
+          (enc n (exp (gen) (mul y y))))))
+    ((recv (enc "reg" (exp (gen) y-0) b (privk b)))
+      (send (enc (exp (gen) y-0) b (privk ca-0))))
+    ((recv (enc "reg" (exp (gen) (mul y y (rec y-0))) a-0 (privk a-0)))
+      (send (enc (exp (gen) (mul y y (rec y-0))) a-0 (privk ca-0)))))
+  (label 19)
+  (parent 15)
+  (unrealized (5 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (a ca b name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (3 2)) ((2 1) (3 1))
+    ((3 0) (2 0)) ((3 3) (0 3)))
+  (non-orig (privk a) (privk ca) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (displaced 4 1 ca 2)
+    (enc (exp (gen) x) a-0 (privk ca)) (3 2))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))))
+  (label 20)
+  (parent 16)
+  (unrealized)
+  (shape)
+  (maps ((0) ((x x) (a a) (b b) (ca ca) (h (exp (gen) y)) (n n))))
+  (origs))
+
+(defskeleton dhca
+  (vars (n text) (a ca a-0 b name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a-0) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject a-0) (ca ca) (h (exp (gen) x)))
+  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((1 1) (0 1)) ((2 1) (3 1))
+    ((3 0) (2 0)) ((3 3) (0 3)) ((4 1) (3 2)))
+  (non-orig (privk a) (privk ca) (privk a-0) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) x) a-0 (privk ca)) (3 2))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a-0 (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y))))))
+    ((recv (enc "reg" (exp (gen) x) a-0 (privk a-0)))
+      (send (enc (exp (gen) x) a-0 (privk ca)))))
+  (label 21)
+  (parent 16)
+  (unrealized (4 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a ca b name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (3 2)) ((2 1) (0 3))
+    ((3 0) (2 0)) ((3 0) (4 0)) ((3 3) (0 3)) ((4 1) (3 1)))
+  (non-orig (privk a) (privk ca) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (displaced 5 1 ca 2)
+    (enc (exp (gen) x) a-0 (privk ca-0)) (3 2))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y))))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca)))))
+  (label 22)
+  (parent 17)
+  (seen 20)
+  (unrealized)
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a ca a-0 b ca-0 name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a-0) (b b) (ca ca-0) (h (exp (gen) x))
+    (y y))
+  (defstrand ca 2 (subject b) (ca ca-0) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a-0) (ca ca-0) (h (exp (gen) x)))
+  (precedes ((0 0) (1 0)) ((0 0) (5 0)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((3 0) (2 0)) ((3 0) (4 0)) ((3 3) (0 3)) ((4 1) (3 1))
+    ((5 1) (3 2)))
+  (non-orig (privk a) (privk ca) (privk a-0) (privk b) (privk ca-0))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) x) a-0 (privk ca-0)) (3 2))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca-0)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca-0))
+          (enc n (exp (gen) (mul x y))))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca-0))))
+    ((recv (enc "reg" (exp (gen) x) a-0 (privk a-0)))
+      (send (enc (exp (gen) x) a-0 (privk ca-0)))))
+  (label 23)
+  (parent 17)
+  (unrealized (5 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca a-0 b-0 ca-0 name) (x y y-0 expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 1 (b b) (y y))
+  (defstrand resp 4 (n n) (a a-0) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul x y (rec y-0)))) (y y-0))
+  (defstrand ca 2 (subject b-0) (ca ca-0) (h (exp (gen) y-0)))
+  (defstrand ca 2 (subject a-0) (ca ca-0)
+    (h (exp (gen) (mul x y (rec y-0)))))
+  (precedes ((0 0) (1 0)) ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((3 0) (2 0)) ((3 0) (6 0)) ((4 0) (5 0)) ((4 0) (6 0))
+    ((4 3) (0 3)) ((5 1) (4 1)) ((6 1) (4 2)))
+  (non-orig (privk a) (privk b) (privk ca) (privk a-0) (privk b-0)
+    (privk ca-0))
+  (uniq-gen x y y-0)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) (mul x y (rec y-0))) a-0 (privk ca-0)) (4 2))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b))))
+    ((send (enc "reg" (exp (gen) y-0) b-0 (privk b-0)))
+      (recv (enc (exp (gen) y-0) b-0 (privk ca-0)))
+      (recv
+        (cat (exp (gen) (mul x y (rec y-0)))
+          (enc (exp (gen) (mul x y (rec y-0))) a-0 (privk ca-0))))
+      (send
+        (cat (exp (gen) y-0) (enc (exp (gen) y-0) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul x y))))))
+    ((recv (enc "reg" (exp (gen) y-0) b-0 (privk b-0)))
+      (send (enc (exp (gen) y-0) b-0 (privk ca-0))))
+    ((recv (enc "reg" (exp (gen) (mul x y (rec y-0))) a-0 (privk a-0)))
+      (send (enc (exp (gen) (mul x y (rec y-0))) a-0 (privk ca-0)))))
+  (label 24)
+  (parent 18)
+  (unrealized (6 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (a ca b name) (y y-0 expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x y-0))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y-0)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) y-0)) (y y))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y-0)))
+  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((1 1) (0 1)) ((2 1) (3 1))
+    ((3 0) (2 0)) ((3 3) (0 3)) ((4 1) (3 2)))
+  (non-orig (privk a) (privk ca) (privk b))
+  (uniq-gen y y-0)
+  (operation encryption-test (displaced 5 0 resp 1)
+    (enc "reg" (exp (gen) y-0) a-0 (privk a-0)) (4 0))
+  (traces
+    ((send (enc "reg" (exp (gen) y-0) a (privk a)))
+      (recv (enc (exp (gen) y-0) a (privk ca)))
+      (send (cat (exp (gen) y-0) (enc (exp (gen) y-0) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y-0)))))
+      (send (enc "check" n (exp (gen) (mul y y-0)))))
+    ((recv (enc "reg" (exp (gen) y-0) a (privk a)))
+      (send (enc (exp (gen) y-0) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y-0) (enc (exp (gen) y-0) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y-0))))))
+    ((recv (enc "reg" (exp (gen) y-0) a (privk a)))
+      (send (enc (exp (gen) y-0) a (privk ca)))))
+  (label 25)
+  (parent 21)
+  (unrealized)
+  (shape)
+  (maps ((0) ((x y-0) (a a) (b b) (ca ca) (h (exp (gen) y)) (n n))))
+  (origs))
+
+(defskeleton dhca
+  (vars (n text) (a ca b ca-0 name) (y y-0 expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x y-0))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y-0)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand resp 4 (n n) (a a) (b b) (ca ca-0) (h (exp (gen) y-0))
+    (y y))
+  (defstrand ca 2 (subject b) (ca ca-0) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca-0) (h (exp (gen) y-0)))
+  (precedes ((0 0) (1 0)) ((0 0) (5 0)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((3 0) (2 0)) ((3 0) (4 0)) ((3 3) (0 3)) ((4 1) (3 1))
+    ((5 1) (3 2)))
+  (non-orig (privk a) (privk ca) (privk b) (privk ca-0))
+  (uniq-gen y y-0)
+  (operation encryption-test (displaced 6 0 resp 1)
+    (enc "reg" (exp (gen) y-0) a-0 (privk a-0)) (5 0))
+  (traces
+    ((send (enc "reg" (exp (gen) y-0) a (privk a)))
+      (recv (enc (exp (gen) y-0) a (privk ca)))
+      (send (cat (exp (gen) y-0) (enc (exp (gen) y-0) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y-0)))))
+      (send (enc "check" n (exp (gen) (mul y y-0)))))
+    ((recv (enc "reg" (exp (gen) y-0) a (privk a)))
+      (send (enc (exp (gen) y-0) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca-0)))
+      (recv (cat (exp (gen) y-0) (enc (exp (gen) y-0) a (privk ca-0))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca-0))
+          (enc n (exp (gen) (mul y y-0))))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca-0))))
+    ((recv (enc "reg" (exp (gen) y-0) a (privk a)))
+      (send (enc (exp (gen) y-0) a (privk ca-0)))))
+  (label 26)
+  (parent 23)
+  (unrealized)
+  (shape)
+  (maps ((0) ((x y-0) (a a) (b b) (ca ca) (h (exp (gen) y)) (n n))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol dhca diffie-hellman
+  (defrole init
+    (vars (x expn) (a b ca name) (h base) (n text))
+    (trace (send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv (cat h (enc h b (privk ca)) (enc n (exp h x))))
+      (send (enc "check" n (exp h x))))
+    (non-orig (privk ca))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (a b ca name) (h base) (n text))
+    (trace (send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat h (enc h a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp h y)))) (recv (enc "check" n (exp h y))))
+    (non-orig (privk ca))
+    (uniq-gen y))
+  (defrole ca
+    (vars (subject ca name) (h base))
+    (trace (recv (enc "reg" h subject (privk subject)))
+      (send (enc h subject (privk ca))))
+    (non-orig (privk subject)))
+  (comment A diffie-hellman exchange which uses a certificate authority
+    to certify long-term DH values))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (h base) (y expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h h) (y y))
+  (non-orig (privk ca))
+  (uniq-gen y)
+  (uniq-orig n)
+  (comment Full responder point of view with freshly chosen n)
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat h (enc h a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp h y)))) (recv (enc "check" n (exp h y)))))
+  (label 27)
+  (unrealized (0 1) (0 2) (0 4))
+  (origs (n (0 3)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (h base) (y expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h h) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk b) (privk ca))
+  (uniq-gen y)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) y) b (privk ca)) (0 1))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat h (enc h a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp h y)))) (recv (enc "check" n (exp h y))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca)))))
+  (label 28)
+  (parent 27)
+  (unrealized (0 2) (0 4))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (b ca name) (y expn))
+  (defstrand resp 5 (n n) (a b) (b b) (ca ca) (h (exp (gen) y)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk b) (privk ca))
+  (uniq-gen y)
+  (uniq-orig n)
+  (operation encryption-test (displaced 2 1 ca 2) (enc h a (privk ca))
+    (0 2))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (recv (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca)))))
+  (label 29)
+  (parent 28)
+  (unrealized (0 4))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (h base) (y expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h h) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h h))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((2 1) (0 2)))
+  (non-orig (privk a) (privk b) (privk ca))
+  (uniq-gen y)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2) (enc h a (privk ca))
+    (0 2))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat h (enc h a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp h y)))) (recv (enc "check" n (exp h y))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" h a (privk a))) (send (enc h a (privk ca)))))
+  (label 30)
+  (parent 28)
+  (unrealized (0 4) (2 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a b-0 ca-0 name) (y x expn))
+  (defstrand resp 5 (n n) (a b) (b b) (ca ca) (h (exp (gen) y)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand init 5 (n n) (a a) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul y y (rec x)))) (x x))
+  (precedes ((0 0) (1 0)) ((0 3) (2 3)) ((1 1) (0 1)) ((2 4) (0 4)))
+  (non-orig (privk b) (privk ca) (privk ca-0))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand init 5)
+    (enc "check" n (exp (gen) (mul y y))) (0 4))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (recv (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul y y (rec x)))
+          (enc (exp (gen) (mul y y (rec x))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y y)))))
+      (send (enc "check" n (exp (gen) (mul y y))))))
+  (label 31)
+  (parent 29)
+  (unrealized (2 1) (2 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (b ca name) (y expn))
+  (defstrand resp 5 (n n) (a b) (b b) (ca ca) (h (exp (gen) y)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (deflistener (exp (gen) (mul y y)))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 4)))
+  (non-orig (privk b) (privk ca))
+  (uniq-gen y)
+  (uniq-orig n)
+  (operation encryption-test (added-listener (exp (gen) (mul y y)))
+    (enc "check" n (exp (gen) (mul y y))) (0 4))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (recv (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (exp (gen) (mul y y))) (send (exp (gen) (mul y y)))))
+  (label 32)
+  (parent 29)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (b ca name) (y expn))
+  (defstrand resp 5 (n n) (a b) (b b) (ca ca) (h (exp (gen) y)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 2)))
+  (non-orig (privk b) (privk ca))
+  (uniq-gen y)
+  (uniq-orig n)
+  (operation encryption-test (displaced 3 0 resp 1)
+    (enc "reg" (exp (gen) y-0) a (privk a)) (2 0))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (recv (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca)))))
+  (label 33)
+  (parent 30)
+  (unrealized (0 4))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (y y-0 expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y-0)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y-0)))
+  (defstrand resp 1 (b a) (y y-0))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 0) (2 0)))
+  (non-orig (privk a) (privk b) (privk ca))
+  (uniq-gen y y-0)
+  (uniq-orig n)
+  (operation encryption-test (added-strand resp 1)
+    (enc "reg" (exp (gen) y-0) a (privk a)) (2 0))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y-0) (enc (exp (gen) y-0) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y-0)))))
+      (recv (enc "check" n (exp (gen) (mul y y-0)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) y-0) a (privk a)))
+      (send (enc (exp (gen) y-0) a (privk ca))))
+    ((send (enc "reg" (exp (gen) y-0) a (privk a)))))
+  (label 34)
+  (parent 30)
+  (unrealized (0 4))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a b-0 ca-0 name) (y x expn))
+  (defstrand resp 5 (n n) (a b) (b b) (ca ca) (h (exp (gen) y)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand init 5 (n n) (a a) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul y y (rec x)))) (x x))
+  (defstrand ca 2 (subject a) (ca ca-0) (h (exp (gen) x)))
+  (precedes ((0 0) (1 0)) ((0 3) (2 3)) ((1 1) (0 1)) ((2 0) (3 0))
+    ((2 4) (0 4)) ((3 1) (2 1)))
+  (non-orig (privk b) (privk ca) (privk a) (privk ca-0))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) x) a (privk ca-0)) (2 1))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (recv (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul y y (rec x)))
+          (enc (exp (gen) (mul y y (rec x))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y y)))))
+      (send (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca-0)))))
+  (label 35)
+  (parent 31)
+  (unrealized (2 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a b-0 ca-0 name) (y x expn))
+  (defstrand resp 5 (n n) (a b) (b b) (ca ca) (h (exp (gen) y)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand init 5 (n n) (a a) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul y y (rec x)))) (x x))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 3) (3 3)) ((1 1) (0 1))
+    ((2 1) (0 2)) ((3 4) (0 4)))
+  (non-orig (privk b) (privk ca) (privk ca-0))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand init 5)
+    (enc "check" n (exp (gen) (mul y y))) (0 4))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (recv (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul y y (rec x)))
+          (enc (exp (gen) (mul y y (rec x))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y y)))))
+      (send (enc "check" n (exp (gen) (mul y y))))))
+  (label 36)
+  (parent 33)
+  (unrealized (3 1) (3 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (b ca name) (y expn))
+  (defstrand resp 5 (n n) (a b) (b b) (ca ca) (h (exp (gen) y)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (deflistener (exp (gen) (mul y y)))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
+    ((2 1) (0 2)) ((3 1) (0 4)))
+  (non-orig (privk b) (privk ca))
+  (uniq-gen y)
+  (uniq-orig n)
+  (operation encryption-test (added-listener (exp (gen) (mul y y)))
+    (enc "check" n (exp (gen) (mul y y))) (0 4))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (recv (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (exp (gen) (mul y y))) (send (exp (gen) (mul y y)))))
+  (label 37)
+  (parent 33)
+  (unrealized (3 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a b-0 ca-0 name) (y x expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a) (b b-0) (ca ca-0) (h (exp (gen) y))
+    (x x))
+  (precedes ((0 0) (1 0)) ((0 3) (3 3)) ((1 1) (0 1)) ((2 1) (0 2))
+    ((3 0) (2 0)) ((3 4) (0 4)))
+  (non-orig (privk b) (privk ca) (privk a) (privk ca-0))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 3 4 init 5)
+    (enc "check" n (exp (gen) (mul y y-0))) (0 4))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (recv (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca-0))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y x)))))
+      (send (enc "check" n (exp (gen) (mul y x))))))
+  (label 38)
+  (parent 34)
+  (unrealized (3 1) (3 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca a-0 b-0 ca-0 name) (y y-0 x expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y-0)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y-0)))
+  (defstrand resp 1 (b a) (y y-0))
+  (defstrand init 5 (n n) (a a-0) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul y y-0 (rec x)))) (x x))
+  (precedes ((0 0) (1 0)) ((0 3) (4 3)) ((1 1) (0 1)) ((2 1) (0 2))
+    ((3 0) (2 0)) ((4 4) (0 4)))
+  (non-orig (privk a) (privk b) (privk ca) (privk ca-0))
+  (uniq-gen y y-0 x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand init 5)
+    (enc "check" n (exp (gen) (mul y y-0))) (0 4))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y-0) (enc (exp (gen) y-0) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y-0)))))
+      (recv (enc "check" n (exp (gen) (mul y y-0)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) y-0) a (privk a)))
+      (send (enc (exp (gen) y-0) a (privk ca))))
+    ((send (enc "reg" (exp (gen) y-0) a (privk a))))
+    ((send (enc "reg" (exp (gen) x) a-0 (privk a-0)))
+      (recv (enc (exp (gen) x) a-0 (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a-0 (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul y y-0 (rec x)))
+          (enc (exp (gen) (mul y y-0 (rec x))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y y-0)))))
+      (send (enc "check" n (exp (gen) (mul y y-0))))))
+  (label 39)
+  (parent 34)
+  (unrealized (4 1) (4 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (y y-0 expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y-0)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y-0)))
+  (defstrand resp 1 (b a) (y y-0))
+  (deflistener (exp (gen) (mul y y-0)))
+  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((1 1) (0 1)) ((2 1) (0 2))
+    ((3 0) (2 0)) ((3 0) (4 0)) ((4 1) (0 4)))
+  (non-orig (privk a) (privk b) (privk ca))
+  (uniq-gen y y-0)
+  (uniq-orig n)
+  (operation encryption-test (added-listener (exp (gen) (mul y y-0)))
+    (enc "check" n (exp (gen) (mul y y-0))) (0 4))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y-0) (enc (exp (gen) y-0) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y-0)))))
+      (recv (enc "check" n (exp (gen) (mul y y-0)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) y-0) a (privk a)))
+      (send (enc (exp (gen) y-0) a (privk ca))))
+    ((send (enc "reg" (exp (gen) y-0) a (privk a))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0)))))
+  (label 40)
+  (parent 34)
+  (unrealized (4 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a b-0 ca-0 name) (y x expn))
+  (defstrand resp 5 (n n) (a b) (b b) (ca ca) (h (exp (gen) y)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand init 5 (n n) (a a) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul y y (rec x)))) (x x))
+  (defstrand ca 2 (subject a) (ca ca-0) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b-0) (ca ca-0)
+    (h (exp (gen) (mul y y (rec x)))))
+  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((0 3) (2 3)) ((1 1) (0 1))
+    ((2 0) (3 0)) ((2 0) (4 0)) ((2 4) (0 4)) ((3 1) (2 1))
+    ((4 1) (2 3)))
+  (non-orig (privk b) (privk ca) (privk a) (privk b-0) (privk ca-0))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) (mul y y (rec x))) b-0 (privk ca-0)) (2 3))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (recv (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul y y (rec x)))
+          (enc (exp (gen) (mul y y (rec x))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y y)))))
+      (send (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca-0))))
+    ((recv (enc "reg" (exp (gen) (mul y y (rec x))) b-0 (privk b-0)))
+      (send (enc (exp (gen) (mul y y (rec x))) b-0 (privk ca-0)))))
+  (label 41)
+  (parent 35)
+  (unrealized (4 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a b-0 ca-0 name) (y x expn))
+  (defstrand resp 5 (n n) (a b) (b b) (ca ca) (h (exp (gen) y)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand init 5 (n n) (a a) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul y y (rec x)))) (x x))
+  (defstrand ca 2 (subject a) (ca ca-0) (h (exp (gen) x)))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 3) (3 3)) ((1 1) (0 1))
+    ((2 1) (0 2)) ((3 0) (4 0)) ((3 4) (0 4)) ((4 1) (3 1)))
+  (non-orig (privk b) (privk ca) (privk a) (privk ca-0))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) x) a (privk ca-0)) (3 1))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (recv (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul y y (rec x)))
+          (enc (exp (gen) (mul y y (rec x))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y y)))))
+      (send (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca-0)))))
+  (label 42)
+  (parent 36)
+  (unrealized (3 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a b-0 name) (y x expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a) (b b-0) (ca ca) (h (exp (gen) y)) (x x))
+  (precedes ((0 0) (1 0)) ((0 3) (3 3)) ((1 1) (0 1)) ((2 1) (0 2))
+    ((2 1) (3 1)) ((3 0) (2 0)) ((3 4) (0 4)))
+  (non-orig (privk b) (privk ca) (privk a))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 4 2 ca 2)
+    (enc (exp (gen) x) a (privk ca-0)) (3 1))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (recv (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b-0 (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (send (enc "check" n (exp (gen) (mul y x))))))
+  (label 43)
+  (parent 38)
+  (unrealized (3 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a b-0 ca-0 name) (y x expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a) (b b-0) (ca ca-0) (h (exp (gen) y))
+    (x x))
+  (defstrand ca 2 (subject a) (ca ca-0) (h (exp (gen) x)))
+  (precedes ((0 0) (1 0)) ((0 3) (3 3)) ((1 1) (0 1)) ((2 1) (0 2))
+    ((3 0) (2 0)) ((3 0) (4 0)) ((3 4) (0 4)) ((4 1) (3 1)))
+  (non-orig (privk b) (privk ca) (privk a) (privk ca-0))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) x) a (privk ca-0)) (3 1))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (recv (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca-0))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y x)))))
+      (send (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca-0)))))
+  (label 44)
+  (parent 38)
+  (unrealized (3 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca a-0 b-0 ca-0 name) (y y-0 x expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y-0)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y-0)))
+  (defstrand resp 1 (b a) (y y-0))
+  (defstrand init 5 (n n) (a a-0) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul y y-0 (rec x)))) (x x))
+  (defstrand ca 2 (subject a-0) (ca ca-0) (h (exp (gen) x)))
+  (precedes ((0 0) (1 0)) ((0 3) (4 3)) ((1 1) (0 1)) ((2 1) (0 2))
+    ((3 0) (2 0)) ((4 0) (5 0)) ((4 4) (0 4)) ((5 1) (4 1)))
+  (non-orig (privk a) (privk b) (privk ca) (privk a-0) (privk ca-0))
+  (uniq-gen y y-0 x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) x) a-0 (privk ca-0)) (4 1))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y-0) (enc (exp (gen) y-0) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y-0)))))
+      (recv (enc "check" n (exp (gen) (mul y y-0)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) y-0) a (privk a)))
+      (send (enc (exp (gen) y-0) a (privk ca))))
+    ((send (enc "reg" (exp (gen) y-0) a (privk a))))
+    ((send (enc "reg" (exp (gen) x) a-0 (privk a-0)))
+      (recv (enc (exp (gen) x) a-0 (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a-0 (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul y y-0 (rec x)))
+          (enc (exp (gen) (mul y y-0 (rec x))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y y-0)))))
+      (send (enc "check" n (exp (gen) (mul y y-0)))))
+    ((recv (enc "reg" (exp (gen) x) a-0 (privk a-0)))
+      (send (enc (exp (gen) x) a-0 (privk ca-0)))))
+  (label 45)
+  (parent 39)
+  (unrealized (4 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a b-0 ca-0 name) (y x expn))
+  (defstrand resp 5 (n n) (a b) (b b) (ca ca) (h (exp (gen) y)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand init 5 (n n) (a a) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul y y (rec x)))) (x x))
+  (defstrand ca 2 (subject a) (ca ca-0) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b-0) (ca ca-0)
+    (h (exp (gen) (mul y y (rec x)))))
+  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (5 0)) ((0 3) (3 3))
+    ((1 1) (0 1)) ((2 1) (0 2)) ((3 0) (4 0)) ((3 0) (5 0))
+    ((3 4) (0 4)) ((4 1) (3 1)) ((5 1) (3 3)))
+  (non-orig (privk b) (privk ca) (privk a) (privk b-0) (privk ca-0))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) (mul y y (rec x))) b-0 (privk ca-0)) (3 3))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y)))))
+      (recv (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul y y (rec x)))
+          (enc (exp (gen) (mul y y (rec x))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y y)))))
+      (send (enc "check" n (exp (gen) (mul y y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca-0))))
+    ((recv (enc "reg" (exp (gen) (mul y y (rec x))) b-0 (privk b-0)))
+      (send (enc (exp (gen) (mul y y (rec x))) b-0 (privk ca-0)))))
+  (label 46)
+  (parent 42)
+  (unrealized (5 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a name) (y x expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (precedes ((0 0) (1 0)) ((0 3) (3 3)) ((1 1) (0 1)) ((2 1) (0 2))
+    ((2 1) (3 1)) ((3 0) (2 0)) ((3 4) (0 4)))
+  (non-orig (privk b) (privk ca) (privk a))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 4 1 ca 2)
+    (enc (exp (gen) y) b-0 (privk ca)) (3 3))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (recv (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (send (enc "check" n (exp (gen) (mul y x))))))
+  (label 47)
+  (parent 43)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n n) (y y) (a a) (b b) (ca ca) (h (exp (gen) x)))))
+  (origs (n (0 3))))
+
+(defskeleton dhca
+  (vars (n text) (b ca a b-0 name) (y x expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a) (b b-0) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject b-0) (ca ca) (h (exp (gen) y)))
+  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((0 3) (3 3)) ((1 1) (0 1))
+    ((2 1) (0 2)) ((2 1) (3 1)) ((3 0) (2 0)) ((3 4) (0 4))
+    ((4 1) (3 3)))
+  (non-orig (privk b) (privk ca) (privk a) (privk b-0))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) y) b-0 (privk ca)) (3 3))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (recv (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b-0 (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (send (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) y) b-0 (privk b-0)))
+      (send (enc (exp (gen) y) b-0 (privk ca)))))
+  (label 48)
+  (parent 43)
+  (unrealized (4 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a name) (y x expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (precedes ((0 0) (1 0)) ((0 3) (3 3)) ((1 1) (0 1)) ((2 1) (0 2))
+    ((3 0) (2 0)) ((3 0) (4 0)) ((3 4) (0 4)) ((4 1) (3 1)))
+  (non-orig (privk b) (privk ca) (privk a))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 5 1 ca 2)
+    (enc (exp (gen) y) b-0 (privk ca-0)) (3 3))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (recv (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (send (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca)))))
+  (label 49)
+  (parent 44)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n n) (y y) (a a) (b b) (ca ca) (h (exp (gen) x)))))
+  (origs (n (0 3))))
+
+(defskeleton dhca
+  (vars (n text) (b ca a b-0 ca-0 name) (y x expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a) (b b-0) (ca ca-0) (h (exp (gen) y))
+    (x x))
+  (defstrand ca 2 (subject a) (ca ca-0) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b-0) (ca ca-0) (h (exp (gen) y)))
+  (precedes ((0 0) (1 0)) ((0 0) (5 0)) ((0 3) (3 3)) ((1 1) (0 1))
+    ((2 1) (0 2)) ((3 0) (2 0)) ((3 0) (4 0)) ((3 4) (0 4))
+    ((4 1) (3 1)) ((5 1) (3 3)))
+  (non-orig (privk b) (privk ca) (privk a) (privk b-0) (privk ca-0))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) y) b-0 (privk ca-0)) (3 3))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (recv (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca-0))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y x)))))
+      (send (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca-0))))
+    ((recv (enc "reg" (exp (gen) y) b-0 (privk b-0)))
+      (send (enc (exp (gen) y) b-0 (privk ca-0)))))
+  (label 50)
+  (parent 44)
+  (unrealized (5 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca a-0 b-0 ca-0 name) (y y-0 x expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y-0)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) y-0)))
+  (defstrand resp 1 (b a) (y y-0))
+  (defstrand init 5 (n n) (a a-0) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul y y-0 (rec x)))) (x x))
+  (defstrand ca 2 (subject a-0) (ca ca-0) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b-0) (ca ca-0)
+    (h (exp (gen) (mul y y-0 (rec x)))))
+  (precedes ((0 0) (1 0)) ((0 0) (6 0)) ((0 3) (4 3)) ((1 1) (0 1))
+    ((2 1) (0 2)) ((3 0) (2 0)) ((3 0) (6 0)) ((4 0) (5 0))
+    ((4 0) (6 0)) ((4 4) (0 4)) ((5 1) (4 1)) ((6 1) (4 3)))
+  (non-orig (privk a) (privk b) (privk ca) (privk a-0) (privk b-0)
+    (privk ca-0))
+  (uniq-gen y y-0 x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) (mul y y-0 (rec x))) b-0 (privk ca-0)) (4 3))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) y-0) (enc (exp (gen) y-0) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y y-0)))))
+      (recv (enc "check" n (exp (gen) (mul y y-0)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) y-0) a (privk a)))
+      (send (enc (exp (gen) y-0) a (privk ca))))
+    ((send (enc "reg" (exp (gen) y-0) a (privk a))))
+    ((send (enc "reg" (exp (gen) x) a-0 (privk a-0)))
+      (recv (enc (exp (gen) x) a-0 (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a-0 (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul y y-0 (rec x)))
+          (enc (exp (gen) (mul y y-0 (rec x))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul y y-0)))))
+      (send (enc "check" n (exp (gen) (mul y y-0)))))
+    ((recv (enc "reg" (exp (gen) x) a-0 (privk a-0)))
+      (send (enc (exp (gen) x) a-0 (privk ca-0))))
+    ((recv (enc "reg" (exp (gen) (mul y y-0 (rec x))) b-0 (privk b-0)))
+      (send (enc (exp (gen) (mul y y-0 (rec x))) b-0 (privk ca-0)))))
+  (label 51)
+  (parent 45)
+  (unrealized (6 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a name) (x y expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((0 3) (3 3)) ((1 1) (0 1))
+    ((2 1) (0 2)) ((2 1) (3 1)) ((3 0) (2 0)) ((3 4) (0 4))
+    ((4 1) (3 3)))
+  (non-orig (privk b) (privk ca) (privk a))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation encryption-test (displaced 5 0 resp 1)
+    (enc "reg" (exp (gen) y) b-0 (privk b-0)) (4 0))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (recv (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca)))))
+  (label 52)
+  (parent 48)
+  (seen 47)
+  (unrealized)
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (b ca a ca-0 name) (x y expn))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca-0) (h (exp (gen) y)) (x x))
+  (defstrand ca 2 (subject a) (ca ca-0) (h (exp (gen) x)))
+  (defstrand ca 2 (subject b) (ca ca-0) (h (exp (gen) y)))
+  (precedes ((0 0) (1 0)) ((0 0) (5 0)) ((0 3) (3 3)) ((1 1) (0 1))
+    ((2 1) (0 2)) ((3 0) (2 0)) ((3 0) (4 0)) ((3 4) (0 4))
+    ((4 1) (3 1)) ((5 1) (3 3)))
+  (non-orig (privk b) (privk ca) (privk a) (privk ca-0))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation encryption-test (displaced 6 0 resp 1)
+    (enc "reg" (exp (gen) y) b-0 (privk b-0)) (5 0))
+  (traces
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (recv (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca-0)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca-0))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca-0))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca-0))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca-0)))))
+  (label 53)
+  (parent 50)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n n) (y y) (a a) (b b) (ca ca) (h (exp (gen) x)))))
+  (origs (n (0 3))))
+
+(comment "Nothing left to do")
+
+(defprotocol dhca diffie-hellman
+  (defrole init
+    (vars (x expn) (a b ca name) (h base) (n text))
+    (trace (send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv (cat h (enc h b (privk ca)) (enc n (exp h x))))
+      (send (enc "check" n (exp h x))))
+    (non-orig (privk ca))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (a b ca name) (h base) (n text))
+    (trace (send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat h (enc h a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp h y)))) (recv (enc "check" n (exp h y))))
+    (non-orig (privk ca))
+    (uniq-gen y))
+  (defrole ca
+    (vars (subject ca name) (h base))
+    (trace (recv (enc "reg" h subject (privk subject)))
+      (send (enc h subject (privk ca))))
+    (non-orig (privk subject)))
+  (comment A diffie-hellman exchange which uses a certificate authority
+    to certify long-term DH values))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (non-orig (privk ca))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (comment point of view in which init and resp each complete and they
+    agree on the relevant parameters)
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (recv (enc "check" n (exp (gen) (mul x y))))))
+  (label 54)
+  (unrealized (0 1) (0 3) (1 1) (1 2) (1 4))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 2)) ((1 3) (0 3)))
+  (non-orig (privk ca))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (recv (enc "check" n (exp (gen) (mul x y))))))
+  (label 55)
+  (parent 54)
+  (unrealized (0 1) (1 1) (1 2) (1 4))
+  (origs (n (1 3)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (precedes ((0 0) (1 2)) ((1 0) (2 0)) ((1 3) (0 3)) ((2 1) (1 1)))
+  (non-orig (privk b) (privk ca))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) y) b (privk ca)) (1 1))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (recv (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca)))))
+  (label 56)
+  (parent 55)
+  (unrealized (0 1) (1 2) (1 4))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (precedes ((0 0) (3 0)) ((1 0) (2 0)) ((1 3) (0 3)) ((2 1) (1 1))
+    ((3 1) (1 2)))
+  (non-orig (privk a) (privk b) (privk ca))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) x) a (privk ca)) (1 2))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (recv (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca)))))
+  (label 57)
+  (parent 56)
+  (unrealized (0 1) (1 4))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (y x expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (precedes ((0 0) (3 0)) ((0 4) (1 4)) ((1 0) (2 0)) ((1 3) (0 3))
+    ((2 1) (1 1)) ((3 1) (1 2)))
+  (non-orig (privk a) (privk b) (privk ca))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 4 0 init 5)
+    (enc "check" n (exp (gen) (mul x-0 y))) (1 4))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (send (enc "check" n (exp (gen) (mul y x)))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (recv (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca)))))
+  (label 58)
+  (parent 57)
+  (unrealized (0 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca a-0 b-0 ca-0 name) (x y x-0 expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a-0) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul x y (rec x-0)))) (x x-0))
+  (precedes ((0 0) (3 0)) ((1 0) (2 0)) ((1 3) (0 3)) ((1 3) (4 3))
+    ((2 1) (1 1)) ((3 1) (1 2)) ((4 4) (1 4)))
+  (non-orig (privk a) (privk b) (privk ca) (privk ca-0))
+  (uniq-gen x y x-0)
+  (uniq-orig n)
+  (operation encryption-test (added-strand init 5)
+    (enc "check" n (exp (gen) (mul x y))) (1 4))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (recv (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x-0) a-0 (privk a-0)))
+      (recv (enc (exp (gen) x-0) a-0 (privk ca-0)))
+      (send
+        (cat (exp (gen) x-0) (enc (exp (gen) x-0) a-0 (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul x y (rec x-0)))
+          (enc (exp (gen) (mul x y (rec x-0))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y))))))
+  (label 59)
+  (parent 57)
+  (unrealized (0 1) (4 1) (4 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (deflistener (exp (gen) (mul x y)))
+  (precedes ((0 0) (3 0)) ((0 0) (4 0)) ((1 0) (2 0)) ((1 0) (4 0))
+    ((1 3) (0 3)) ((2 1) (1 1)) ((3 1) (1 2)) ((4 1) (1 4)))
+  (non-orig (privk a) (privk b) (privk ca))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation encryption-test (added-listener (exp (gen) (mul x y)))
+    (enc "check" n (exp (gen) (mul x y))) (1 4))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (recv (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (exp (gen) (mul x y))) (send (exp (gen) (mul x y)))))
+  (label 60)
+  (parent 57)
+  (unrealized (0 1) (4 0))
+  (comment "empty cohort"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (y x expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (precedes ((0 0) (3 0)) ((0 4) (1 4)) ((1 0) (2 0)) ((1 3) (0 3))
+    ((2 1) (1 1)) ((3 1) (0 1)) ((3 1) (1 2)))
+  (non-orig (privk a) (privk b) (privk ca))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 4 3 ca 2)
+    (enc (exp (gen) x) a (privk ca)) (0 1))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (send (enc "check" n (exp (gen) (mul y x)))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (recv (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca)))))
+  (label 61)
+  (parent 58)
+  (unrealized)
+  (shape)
+  (maps ((0 1) ((a a) (b b) (ca ca) (x x) (y y) (n n))))
+  (origs (n (1 3))))
+
+(defskeleton dhca
+  (vars (n text) (a b ca name) (y x expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (precedes ((0 0) (3 0)) ((0 0) (4 0)) ((0 4) (1 4)) ((1 0) (2 0))
+    ((1 3) (0 3)) ((2 1) (1 1)) ((3 1) (1 2)) ((4 1) (0 1)))
+  (non-orig (privk a) (privk b) (privk ca))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) x) a (privk ca)) (0 1))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (send (enc "check" n (exp (gen) (mul y x)))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul y x)))))
+      (recv (enc "check" n (exp (gen) (mul y x)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca)))))
+  (label 62)
+  (parent 58)
+  (unrealized)
+  (shape)
+  (maps ((0 1) ((a a) (b b) (ca ca) (x x) (y y) (n n))))
+  (origs (n (1 3))))
+
+(defskeleton dhca
+  (vars (n text) (a b ca a-0 b-0 ca-0 name) (x y x-0 expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a-0) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul x y (rec x-0)))) (x x-0))
+  (defstrand ca 2 (subject a-0) (ca ca-0) (h (exp (gen) x-0)))
+  (precedes ((0 0) (3 0)) ((1 0) (2 0)) ((1 3) (0 3)) ((1 3) (4 3))
+    ((2 1) (1 1)) ((3 1) (1 2)) ((4 0) (5 0)) ((4 4) (1 4))
+    ((5 1) (4 1)))
+  (non-orig (privk a) (privk b) (privk ca) (privk a-0) (privk ca-0))
+  (uniq-gen x y x-0)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) x-0) a-0 (privk ca-0)) (4 1))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (recv (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x-0) a-0 (privk a-0)))
+      (recv (enc (exp (gen) x-0) a-0 (privk ca-0)))
+      (send
+        (cat (exp (gen) x-0) (enc (exp (gen) x-0) a-0 (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul x y (rec x-0)))
+          (enc (exp (gen) (mul x y (rec x-0))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x-0) a-0 (privk a-0)))
+      (send (enc (exp (gen) x-0) a-0 (privk ca-0)))))
+  (label 63)
+  (parent 59)
+  (unrealized (0 1) (4 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhca
+  (vars (n text) (a b ca a-0 b-0 ca-0 name) (x y x-0 expn))
+  (defstrand init 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand resp 5 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y y))
+  (defstrand ca 2 (subject b) (ca ca) (h (exp (gen) y)))
+  (defstrand ca 2 (subject a) (ca ca) (h (exp (gen) x)))
+  (defstrand init 5 (n n) (a a-0) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul x y (rec x-0)))) (x x-0))
+  (defstrand ca 2 (subject a-0) (ca ca-0) (h (exp (gen) x-0)))
+  (defstrand ca 2 (subject b-0) (ca ca-0)
+    (h (exp (gen) (mul x y (rec x-0)))))
+  (precedes ((0 0) (3 0)) ((0 0) (6 0)) ((1 0) (2 0)) ((1 0) (6 0))
+    ((1 3) (0 3)) ((1 3) (4 3)) ((2 1) (1 1)) ((3 1) (1 2))
+    ((4 0) (5 0)) ((4 0) (6 0)) ((4 4) (1 4)) ((5 1) (4 1))
+    ((6 1) (4 3)))
+  (non-orig (privk a) (privk b) (privk ca) (privk a-0) (privk b-0)
+    (privk ca-0))
+  (uniq-gen x y x-0)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 2)
+    (enc (exp (gen) (mul x y (rec x-0))) b-0 (privk ca-0)) (4 3))
+  (traces
+    ((send (enc "reg" (exp (gen) x) a (privk a)))
+      (recv (enc (exp (gen) x) a (privk ca)))
+      (send (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (recv
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((send (enc "reg" (exp (gen) y) b (privk b)))
+      (recv (enc (exp (gen) y) b (privk ca)))
+      (recv (cat (exp (gen) x) (enc (exp (gen) x) a (privk ca))))
+      (send
+        (cat (exp (gen) y) (enc (exp (gen) y) b (privk ca))
+          (enc n (exp (gen) (mul x y)))))
+      (recv (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) y) b (privk b)))
+      (send (enc (exp (gen) y) b (privk ca))))
+    ((recv (enc "reg" (exp (gen) x) a (privk a)))
+      (send (enc (exp (gen) x) a (privk ca))))
+    ((send (enc "reg" (exp (gen) x-0) a-0 (privk a-0)))
+      (recv (enc (exp (gen) x-0) a-0 (privk ca-0)))
+      (send
+        (cat (exp (gen) x-0) (enc (exp (gen) x-0) a-0 (privk ca-0))))
+      (recv
+        (cat (exp (gen) (mul x y (rec x-0)))
+          (enc (exp (gen) (mul x y (rec x-0))) b-0 (privk ca-0))
+          (enc n (exp (gen) (mul x y)))))
+      (send (enc "check" n (exp (gen) (mul x y)))))
+    ((recv (enc "reg" (exp (gen) x-0) a-0 (privk a-0)))
+      (send (enc (exp (gen) x-0) a-0 (privk ca-0))))
+    ((recv (enc "reg" (exp (gen) (mul x y (rec x-0))) b-0 (privk b-0)))
+      (send (enc (exp (gen) (mul x y (rec x-0))) b-0 (privk ca-0)))))
+  (label 64)
+  (parent 63)
+  (unrealized (0 1) (6 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
diff --git a/tst/dh_mim.scm b/tst/dh_mim.scm
new file mode 100644
--- /dev/null
+++ b/tst/dh_mim.scm
@@ -0,0 +1,83 @@
+(herald "Diffie-Hellman protocol, man-in-the-middle attack" (algebra diffie-hellman)
+; (limit 1)
+)
+
+(defprotocol dh_mim diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (n text))
+    (trace (send (exp (gen) x)) (recv h) (send (enc n (exp h x))))
+;    (uniq-orig n)
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (n text))
+    (trace (recv h) (send (exp (gen) y)) (recv (enc n (exp h y))))
+    (uniq-gen y))
+  (comment "Diffie-hellman key exchange followed by an encryption"))
+
+(comment
+(defskeleton dh_mim
+  (vars (n text) (hx base) (y x expn))
+  (defstrand init 3 (n n) (h (exp hx (mul (rec y) x))) (x y))
+  (defstrand resp 3 (n n) (h hx) (y x))
+  (precedes ((0 2) (1 2)) ((1 1) (0 1)))
+  (pen-non-orig y x)
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 2 0 init 3)
+    (enc n (exp hx (mul y-0 x-0))) (1 2))
+  (traces
+    ((send (exp (gen) y)) (recv (exp hx (mul (rec y) x)))
+      (send (enc n (exp hx x))))
+    ((recv hx) (send (exp (gen) x)) (recv (enc n (exp hx x)))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1))
+  (origs (n (0 2)))
+  (comment "empty cohort"))
+)
+
+;(comment
+(defskeleton dh_mim
+  (vars (n text) (hx hy base) (x y expn))
+  (defstrand init 3 (n n) (h hy) (x x))
+  (defstrand resp 3 (n n) (h hx) (y y))
+  (precedes ((0 2) (1 2)))
+  (uniq-orig n)
+  (pen-non-orig x y)
+  (comment "Agreement on the encrypted text only"))
+;)
+
+(comment
+(defskeleton dh_mim
+  (vars (n text) (x z y expn))
+  (defstrand init 3 (n n) (h (exp (gen) (mul x z y))) (x y))
+  (defstrand resp 3 (n n) (h (exp (gen) (mul z y y))) (y x))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n))
+)
+
+(comment
+(defskeleton dh_mim
+  (vars (n text) (x y y-0 expn))
+  (defstrand init 3 (n n) (h (exp (gen) (mul y y-0))) (x y-0))
+  (defstrand resp 3 (n n) (h (exp (gen) (mul (rec x) y y-0 y-0))) (y x))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)))
+  (pen-non-orig x y-0)
+  (uniq-gen x y-0)
+  (uniq-orig n)
+  (operation nonce-test (displaced 2 0 init 1) (exp (gen) (mul y x-0))
+    (0 1))
+  (traces
+    ((send (exp (gen) y-0)) (recv (exp (gen) (mul y y-0)))
+      (send (enc n (exp (gen) (mul y y-0 y-0)))))
+    ((recv (exp (gen) (mul (rec x) y y-0 y-0))) (send (exp (gen) x))
+      (recv (enc n (exp (gen) (mul y y-0 y-0))))))
+  (label 3)
+  (parent 1)
+  (seen 3)
+  (unrealized (1 0))
+  (origs (n (0 2)))
+  (comment "3 in cohort - 2 not yet seen"))
+)
diff --git a/tst/dh_mim.tst b/tst/dh_mim.tst
new file mode 100644
--- /dev/null
+++ b/tst/dh_mim.tst
@@ -0,0 +1,296 @@
+(herald "Diffie-Hellman protocol, man-in-the-middle attack"
+  (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from dh_mim.scm")
+
+(defprotocol dh_mim diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (n text))
+    (trace (send (exp (gen) x)) (recv h) (send (enc n (exp h x))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (n text))
+    (trace (recv h) (send (exp (gen) y)) (recv (enc n (exp h y))))
+    (uniq-gen y)
+    (ind-zero-in (y h)))
+  (comment "Diffie-hellman key exchange followed by an encryption"))
+
+(defskeleton dh_mim
+  (vars (n text) (hx hy base) (x y expn))
+  (defstrand init 3 (n n) (h hy) (x x))
+  (defstrand resp 3 (n n) (h hx) (y y))
+  (precedes ((0 2) (1 2)))
+  (ind-zero-in (y hx))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (comment "Agreement on the encrypted text only")
+  (traces ((send (exp (gen) x)) (recv hy) (send (enc n (exp hy x))))
+    ((recv hx) (send (exp (gen) y)) (recv (enc n (exp hx y)))))
+  (label 0)
+  (unrealized (1 2))
+  (origs (n (0 2)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (hy base) (y x expn))
+  (defstrand init 3 (n n) (h (exp hy y)) (x x))
+  (defstrand resp 3 (n n) (h (exp hy x)) (y y))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp hy x)))
+  (pen-non-orig y x)
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 2 0 init 3) (enc n (exp hx y-0))
+    (1 2))
+  (traces
+    ((send (exp (gen) x)) (recv (exp hy y))
+      (send (enc n (exp hy (mul y x)))))
+    ((recv (exp hy x)) (send (exp (gen) y))
+      (recv (enc n (exp hy (mul y x))))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1) (1 0))
+  (origs (n (0 2)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (hx hy base) (x y expn))
+  (defstrand init 3 (n n) (h hy) (x x))
+  (defstrand resp 3 (n n) (h hx) (y y))
+  (deflistener (exp hx y))
+  (precedes ((0 2) (1 2)) ((1 1) (2 0)) ((2 1) (1 2)))
+  (ind-zero-in (y hx))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation encryption-test (added-listener (exp hx y))
+    (enc n (exp hx y)) (1 2))
+  (traces ((send (exp (gen) x)) (recv hy) (send (enc n (exp hy x))))
+    ((recv hx) (send (exp (gen) y)) (recv (enc n (exp hx y))))
+    ((recv (exp hx y)) (send (exp hx y))))
+  (label 2)
+  (parent 0)
+  (unrealized (1 2) (2 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (y x expn) (x-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) (mul y x-0))) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) (mul x x-0))) (y y))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp (gen) (mul x x-0))))
+  (pen-non-orig y x)
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test (algebra-contracted (hy (exp (gen) x-0)))
+    (exp (gen) (mul x x-0)) (1 0) (exp (gen) x))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) (mul y x-0)))
+      (send (enc n (exp (gen) (mul y x x-0)))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y x x-0))))))
+  (label 3)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1)
+      ((n n) (hx (exp (gen) (mul x x-0))) (hy (exp (gen) (mul y x-0)))
+        (x x) (y y))))
+  (origs (n (0 2))))
+
+(defskeleton dh_mim
+  (vars (n text) (hy base) (x y expn) (y-0 expr))
+  (defstrand init 3 (n n) (h hy) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (precedes ((0 2) (1 2)) ((1 1) (2 0)) ((2 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test (algebra-contracted (hx (exp (gen) y-0)))
+    (exp (gen) (mul y y-0)) (2 0) (exp (gen) y))
+  (traces ((send (exp (gen) x)) (recv hy) (send (enc n (exp hy x))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0)))))
+  (label 4)
+  (parent 2)
+  (unrealized (1 2))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (x y expn) (y-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) (mul (rec x) y y-0))) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (precedes ((0 2) (1 2)) ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test
+    (contracted (hy (exp (gen) (mul (rec x) y y-0)))) n (1 2)
+    (enc n (exp (gen) (mul y y-0))))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) (mul (rec x) y y-0)))
+      (send (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0)))))
+  (label 5)
+  (parent 4)
+  (unrealized (0 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (hy base) (x y expn) (y-0 expr))
+  (defstrand init 3 (n n) (h hy) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (deflistener (exp hy x))
+  (precedes ((0 0) (3 0)) ((0 2) (1 2)) ((1 1) (2 0)) ((2 1) (1 2))
+    ((3 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test (added-listener (exp hy x)) n (1 2)
+    (enc n (exp hy x)))
+  (traces ((send (exp (gen) x)) (recv hy) (send (enc n (exp hy x))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0))))
+    ((recv (exp hy x)) (send (exp hy x))))
+  (label 6)
+  (parent 4)
+  (unrealized (3 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (y x expn) (y-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) (mul y y-0))) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) (mul x y-0))) (y y))
+  (deflistener (exp (gen) (mul y x y-0)))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)) ((1 1) (2 0))
+    ((2 1) (1 2)))
+  (ind-zero-in (y (exp (gen) (mul x y-0))))
+  (pen-non-orig y x)
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test
+    (algebra-contracted (x-0 x) (y-1 (mul x y-0)) (y-2 y-0))
+    (exp (gen) (mul y y-0)) (0 1))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) (mul y y-0)))
+      (send (enc n (exp (gen) (mul y x y-0)))))
+    ((recv (exp (gen) (mul x y-0))) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y x y-0)))))
+    ((recv (exp (gen) (mul y x y-0))) (send (exp (gen) (mul y x y-0)))))
+  (label 7)
+  (parent 5)
+  (unrealized (2 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (x y expn) (y-0 x-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) x-0)) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (3 0)) ((0 2) (1 2)) ((1 1) (2 0)) ((2 1) (1 2))
+    ((3 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test (algebra-contracted (hy (exp (gen) x-0)))
+    (exp (gen) (mul x x-0)) (3 0) (exp (gen) x))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) x-0))
+      (send (enc n (exp (gen) (mul x x-0)))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0)))))
+  (label 8)
+  (parent 6)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (y x expn) (y-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) (mul y (rec x) y-0))) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)) ((1 1) (2 0))
+    ((2 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (pen-non-orig y x)
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test
+    (algebra-contracted (x-0 x) (y-1 (mul (rec x) y-0)) (y-2 y-0))
+    (exp (gen) (mul y y-0)) (2 0))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) (mul y (rec x) y-0)))
+      (send (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0)))))
+  (label 9)
+  (parent 7)
+  (seen 7)
+  (unrealized (0 1))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (x y expn) (y-0 x-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) x-0)) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (2 0)) ((0 2) (1 2)) ((2 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation generalization deleted (2 0))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) x-0))
+      (send (enc n (exp (gen) (mul x x-0)))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0)))))
+  (label 10)
+  (parent 8)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (x y expn) (y-0 x-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) x-0)) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (precedes ((0 2) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation generalization deleted (2 0))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) x-0))
+      (send (enc n (exp (gen) (mul x x-0)))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0))))))
+  (label 11)
+  (parent 10)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1)
+      ((n n) (hx (exp (gen) y-0)) (hy (exp (gen) x-0)) (x x) (y y))))
+  (origs (n (0 2))))
+
+(comment "Nothing left to do")
diff --git a/tst/dh_mim2.scm b/tst/dh_mim2.scm
new file mode 100644
--- /dev/null
+++ b/tst/dh_mim2.scm
@@ -0,0 +1,85 @@
+(herald "Diffie-Hellman protocol, man-in-the-middle attack" (algebra diffie-hellman)
+; (limit 1)
+)
+
+(defprotocol dh_mim diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (n text))
+    (trace (send (exp (gen) x)) (recv h) (send (enc n (exp h x))))
+    (neq (h (gen)))
+    (uniq-orig n)
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (n text))
+    (trace (recv h) (send (exp (gen) y)) (recv (enc n (exp h y))))
+    (neq (h (gen)))
+    (uniq-gen y))
+  (comment "Diffie-hellman key exchange followed by an encryption"))
+
+(comment
+(defskeleton dh_mim
+  (vars (n text) (hx base) (y x expn))
+  (defstrand init 3 (n n) (h (exp hx (mul (rec y) x))) (x y))
+  (defstrand resp 3 (n n) (h hx) (y x))
+  (precedes ((0 2) (1 2)) ((1 1) (0 1)))
+  (pen-non-orig y x)
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 2 0 init 3)
+    (enc n (exp hx (mul y-0 x-0))) (1 2))
+  (traces
+    ((send (exp (gen) y)) (recv (exp hx (mul (rec y) x)))
+      (send (enc n (exp hx x))))
+    ((recv hx) (send (exp (gen) x)) (recv (enc n (exp hx x)))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1))
+  (origs (n (0 2)))
+  (comment "empty cohort"))
+)
+
+;(comment
+(defskeleton dh_mim
+  (vars (n text) (hx hy base) (x y expn))
+  (defstrand init 3 (n n) (h hy) (x x))
+  (defstrand resp 3 (n n) (h hx) (y y))
+  (precedes ((0 2) (1 2)))
+  (uniq-orig n)
+  (pen-non-orig x y)
+  (comment "Agreement on the encrypted text only"))
+;)
+
+(comment
+(defskeleton dh_mim
+  (vars (n text) (x z y expn))
+  (defstrand init 3 (n n) (h (exp (gen) (mul x z y))) (x y))
+  (defstrand resp 3 (n n) (h (exp (gen) (mul z y y))) (y x))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n))
+)
+
+(comment
+(defskeleton dh_mim
+  (vars (n text) (x y y-0 expn))
+  (defstrand init 3 (n n) (h (exp (gen) (mul y y-0))) (x y-0))
+  (defstrand resp 3 (n n) (h (exp (gen) (mul (rec x) y y-0 y-0))) (y x))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)))
+  (pen-non-orig x y-0)
+  (uniq-gen x y-0)
+  (uniq-orig n)
+  (operation nonce-test (displaced 2 0 init 1) (exp (gen) (mul y x-0))
+    (0 1))
+  (traces
+    ((send (exp (gen) y-0)) (recv (exp (gen) (mul y y-0)))
+      (send (enc n (exp (gen) (mul y y-0 y-0)))))
+    ((recv (exp (gen) (mul (rec x) y y-0 y-0))) (send (exp (gen) x))
+      (recv (enc n (exp (gen) (mul y y-0 y-0))))))
+  (label 3)
+  (parent 1)
+  (seen 3)
+  (unrealized (1 0))
+  (origs (n (0 2)))
+  (comment "3 in cohort - 2 not yet seen"))
+)
diff --git a/tst/dh_mim2.tst b/tst/dh_mim2.tst
new file mode 100644
--- /dev/null
+++ b/tst/dh_mim2.tst
@@ -0,0 +1,311 @@
+(herald "Diffie-Hellman protocol, man-in-the-middle attack"
+  (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from dh_mim2.scm")
+
+(defprotocol dh_mim diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (n text))
+    (trace (send (exp (gen) x)) (recv h) (send (enc n (exp h x))))
+    (uniq-orig n)
+    (uniq-gen x)
+    (neq (h (gen))))
+  (defrole resp
+    (vars (y expn) (h base) (n text))
+    (trace (recv h) (send (exp (gen) y)) (recv (enc n (exp h y))))
+    (uniq-gen y)
+    (neq (h (gen)))
+    (ind-zero-in (y h)))
+  (comment "Diffie-hellman key exchange followed by an encryption"))
+
+(defskeleton dh_mim
+  (vars (n text) (hx hy base) (x y expn))
+  (defstrand init 3 (n n) (h hy) (x x))
+  (defstrand resp 3 (n n) (h hx) (y y))
+  (precedes ((0 2) (1 2)))
+  (ind-zero-in (y hx))
+  (neq (hx (gen)) (hy (gen)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (comment "Agreement on the encrypted text only")
+  (traces ((send (exp (gen) x)) (recv hy) (send (enc n (exp hy x))))
+    ((recv hx) (send (exp (gen) y)) (recv (enc n (exp hx y)))))
+  (label 0)
+  (unrealized (1 2))
+  (origs (n (0 2)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (hy base) (y x expn))
+  (defstrand init 3 (n n) (h (exp hy y)) (x x))
+  (defstrand resp 3 (n n) (h (exp hy x)) (y y))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp hy x)))
+  (neq ((exp hy y) (gen)) ((exp hy x) (gen)))
+  (pen-non-orig y x)
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 2 0 init 3) (enc n (exp hx y-0))
+    (1 2))
+  (traces
+    ((send (exp (gen) x)) (recv (exp hy y))
+      (send (enc n (exp hy (mul y x)))))
+    ((recv (exp hy x)) (send (exp (gen) y))
+      (recv (enc n (exp hy (mul y x))))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1) (1 0))
+  (origs (n (0 2)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (hx hy base) (x y expn))
+  (defstrand init 3 (n n) (h hy) (x x))
+  (defstrand resp 3 (n n) (h hx) (y y))
+  (deflistener (exp hx y))
+  (precedes ((0 2) (1 2)) ((1 1) (2 0)) ((2 1) (1 2)))
+  (ind-zero-in (y hx))
+  (neq (hx (gen)) (hy (gen)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation encryption-test (added-listener (exp hx y))
+    (enc n (exp hx y)) (1 2))
+  (traces ((send (exp (gen) x)) (recv hy) (send (enc n (exp hy x))))
+    ((recv hx) (send (exp (gen) y)) (recv (enc n (exp hx y))))
+    ((recv (exp hx y)) (send (exp hx y))))
+  (label 2)
+  (parent 0)
+  (unrealized (1 2) (2 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (y x expn) (x-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) (mul y x-0))) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) (mul x x-0))) (y y))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp (gen) (mul x x-0))))
+  (neq ((exp (gen) (mul y x-0)) (gen)) ((exp (gen) (mul x x-0)) (gen)))
+  (pen-non-orig y x)
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test (algebra-contracted (hy (exp (gen) x-0)))
+    (exp (gen) (mul x x-0)) (1 0) (exp (gen) x))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) (mul y x-0)))
+      (send (enc n (exp (gen) (mul y x x-0)))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y x x-0))))))
+  (label 3)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1)
+      ((n n) (hx (exp (gen) (mul x x-0))) (hy (exp (gen) (mul y x-0)))
+        (x x) (y y))))
+  (origs (n (0 2))))
+
+(defskeleton dh_mim
+  (vars (n text) (hy base) (x y expn) (y-0 expr))
+  (defstrand init 3 (n n) (h hy) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (precedes ((0 2) (1 2)) ((1 1) (2 0)) ((2 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (neq ((exp (gen) y-0) (gen)) (hy (gen)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test (algebra-contracted (hx (exp (gen) y-0)))
+    (exp (gen) (mul y y-0)) (2 0) (exp (gen) y))
+  (traces ((send (exp (gen) x)) (recv hy) (send (enc n (exp hy x))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0)))))
+  (label 4)
+  (parent 2)
+  (unrealized (1 2))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (x y expn) (y-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) (mul (rec x) y y-0))) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (precedes ((0 2) (1 2)) ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (neq ((exp (gen) y-0) (gen)) ((exp (gen) (mul (rec x) y y-0)) (gen)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test
+    (contracted (hy (exp (gen) (mul (rec x) y y-0)))) n (1 2)
+    (enc n (exp (gen) (mul y y-0))))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) (mul (rec x) y y-0)))
+      (send (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0)))))
+  (label 5)
+  (parent 4)
+  (unrealized (0 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (hy base) (x y expn) (y-0 expr))
+  (defstrand init 3 (n n) (h hy) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (deflistener (exp hy x))
+  (precedes ((0 0) (3 0)) ((0 2) (1 2)) ((1 1) (2 0)) ((2 1) (1 2))
+    ((3 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (neq ((exp (gen) y-0) (gen)) (hy (gen)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test (added-listener (exp hy x)) n (1 2)
+    (enc n (exp hy x)))
+  (traces ((send (exp (gen) x)) (recv hy) (send (enc n (exp hy x))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0))))
+    ((recv (exp hy x)) (send (exp hy x))))
+  (label 6)
+  (parent 4)
+  (unrealized (3 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (y x expn) (y-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) (mul y y-0))) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) (mul x y-0))) (y y))
+  (deflistener (exp (gen) (mul y x y-0)))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)) ((1 1) (2 0))
+    ((2 1) (1 2)))
+  (ind-zero-in (y (exp (gen) (mul x y-0))))
+  (neq ((exp (gen) (mul x y-0)) (gen)) ((exp (gen) (mul y y-0)) (gen)))
+  (pen-non-orig y x)
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test
+    (algebra-contracted (x-0 x) (y-1 (mul x y-0)) (y-2 y-0))
+    (exp (gen) (mul y y-0)) (0 1))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) (mul y y-0)))
+      (send (enc n (exp (gen) (mul y x y-0)))))
+    ((recv (exp (gen) (mul x y-0))) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y x y-0)))))
+    ((recv (exp (gen) (mul y x y-0))) (send (exp (gen) (mul y x y-0)))))
+  (label 7)
+  (parent 5)
+  (unrealized (2 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (x y expn) (y-0 x-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) x-0)) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (3 0)) ((0 2) (1 2)) ((1 1) (2 0)) ((2 1) (1 2))
+    ((3 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (neq ((exp (gen) y-0) (gen)) ((exp (gen) x-0) (gen)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test (algebra-contracted (hy (exp (gen) x-0)))
+    (exp (gen) (mul x x-0)) (3 0) (exp (gen) x))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) x-0))
+      (send (enc n (exp (gen) (mul x x-0)))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0)))))
+  (label 8)
+  (parent 6)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (y x expn) (y-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) (mul y (rec x) y-0))) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)) ((1 1) (2 0))
+    ((2 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (neq ((exp (gen) y-0) (gen)) ((exp (gen) (mul y (rec x) y-0)) (gen)))
+  (pen-non-orig y x)
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test
+    (algebra-contracted (x-0 x) (y-1 (mul (rec x) y-0)) (y-2 y-0))
+    (exp (gen) (mul y y-0)) (2 0))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) (mul y (rec x) y-0)))
+      (send (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0)))))
+  (label 9)
+  (parent 7)
+  (seen 7)
+  (unrealized (0 1))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (x y expn) (y-0 x-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) x-0)) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (2 0)) ((0 2) (1 2)) ((2 1) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (neq ((exp (gen) y-0) (gen)) ((exp (gen) x-0) (gen)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation generalization deleted (2 0))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) x-0))
+      (send (enc n (exp (gen) (mul x x-0)))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0)))))
+  (label 10)
+  (parent 8)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_mim
+  (vars (n text) (x y expn) (y-0 x-0 expr))
+  (defstrand init 3 (n n) (h (exp (gen) x-0)) (x x))
+  (defstrand resp 3 (n n) (h (exp (gen) y-0)) (y y))
+  (precedes ((0 2) (1 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (neq ((exp (gen) y-0) (gen)) ((exp (gen) x-0) (gen)))
+  (pen-non-orig x y)
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation generalization deleted (2 0))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) x-0))
+      (send (enc n (exp (gen) (mul x x-0)))))
+    ((recv (exp (gen) y-0)) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul y y-0))))))
+  (label 11)
+  (parent 10)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1)
+      ((n n) (hx (exp (gen) y-0)) (hy (exp (gen) x-0)) (x x) (y y))))
+  (origs (n (0 2))))
+
+(comment "Nothing left to do")
diff --git a/tst/dh_sig.scm b/tst/dh_sig.scm
new file mode 100644
--- /dev/null
+++ b/tst/dh_sig.scm
@@ -0,0 +1,62 @@
+(herald "Signed DH exchange" (algebra diffie-hellman)
+)
+
+(defprotocol dh_sig diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace 
+     (send (exp (gen) x)) 
+     (recv (enc h (exp (gen) x) (privk b)))
+     (send (enc h (exp (gen) x) (privk a))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace 
+     (recv h) 
+     (send (enc (exp (gen) y) h (privk b)))
+     (recv (enc (exp (gen) y) h (privk a))))
+    (uniq-gen y))
+)
+
+(defskeleton dh_sig
+  (vars (a b name))
+  (defstrand init 3 (a a) (b b))
+  (non-orig (privk b) (privk a))
+)
+
+(defskeleton dh_sig
+  (vars (a b name))
+  (defstrand resp 3 (a a) (b b))
+  (non-orig (privk a) (privk b))
+)
+
+
+(defprotocol dh_sig2 diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace 
+     (send (exp (gen) x)) 
+     (recv (enc h (exp (gen) x) (privk b)))
+     (send (enc (exp (gen) x) h b (privk a))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace 
+     (recv h) 
+     (send (enc (exp (gen) y) h (privk b)))
+     (recv (enc h (exp (gen) y) b (privk a))))
+    (uniq-gen y))
+)
+
+(defskeleton dh_sig2
+  (vars (a b name))
+  (defstrand init 3 (a a) (b b))
+  (non-orig (privk b) (privk a))
+)
+
+(defskeleton dh_sig2
+  (vars (a b name))
+  (defstrand resp 3 (a a) (b b))
+  (non-orig (privk a) (privk b))
+)
+
diff --git a/tst/dh_sig.tst b/tst/dh_sig.tst
new file mode 100644
--- /dev/null
+++ b/tst/dh_sig.tst
@@ -0,0 +1,230 @@
+(herald "Signed DH exchange" (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from dh_sig.scm")
+
+(defprotocol dh_sig diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace (send (exp (gen) x)) (recv (enc h (exp (gen) x) (privk b)))
+      (send (enc h (exp (gen) x) (privk a))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace (recv h) (send (enc (exp (gen) y) h (privk b)))
+      (recv (enc (exp (gen) y) h (privk a))))
+    (uniq-gen y)
+    (ind-zero-in (y h))))
+
+(defskeleton dh_sig
+  (vars (a b name) (h base) (x expn))
+  (defstrand init 3 (a a) (b b) (h h) (x x))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (traces
+    ((send (exp (gen) x)) (recv (enc h (exp (gen) x) (privk b)))
+      (send (enc h (exp (gen) x) (privk a)))))
+  (label 0)
+  (unrealized (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_sig
+  (vars (a b name) (x y expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (defstrand resp 2 (b b) (h (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand resp 2)
+    (enc (exp (gen) y) (exp (gen) x) (privk b)) (0 1))
+  (traces
+    ((send (exp (gen) x))
+      (recv (enc (exp (gen) y) (exp (gen) x) (privk b)))
+      (send (enc (exp (gen) y) (exp (gen) x) (privk a))))
+    ((recv (exp (gen) x))
+      (send (enc (exp (gen) y) (exp (gen) x) (privk b)))))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (x x) (h (exp (gen) y)))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol dh_sig diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace (send (exp (gen) x)) (recv (enc h (exp (gen) x) (privk b)))
+      (send (enc h (exp (gen) x) (privk a))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace (recv h) (send (enc (exp (gen) y) h (privk b)))
+      (recv (enc (exp (gen) y) h (privk a))))
+    (uniq-gen y)
+    (ind-zero-in (y h))))
+
+(defskeleton dh_sig
+  (vars (a b name) (h base) (y expn))
+  (defstrand resp 3 (a a) (b b) (h h) (y y))
+  (ind-zero-in (y h))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (traces
+    ((recv h) (send (enc (exp (gen) y) h (privk b)))
+      (recv (enc (exp (gen) y) h (privk a)))))
+  (label 2)
+  (unrealized (0 2))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dh_sig
+  (vars (a b b-0 name) (y x expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b-0) (h (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (operation encryption-test (added-strand init 3)
+    (enc (exp (gen) y) (exp (gen) x) (privk a)) (0 2))
+  (traces
+    ((recv (exp (gen) x))
+      (send (enc (exp (gen) y) (exp (gen) x) (privk b)))
+      (recv (enc (exp (gen) y) (exp (gen) x) (privk a))))
+    ((send (exp (gen) x))
+      (recv (enc (exp (gen) y) (exp (gen) x) (privk b-0)))
+      (send (enc (exp (gen) y) (exp (gen) x) (privk a)))))
+  (label 3)
+  (parent 2)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (y y) (h (exp (gen) x)))))
+  (origs))
+
+(defskeleton dh_sig
+  (vars (b name) (h base) (y expn))
+  (defstrand resp 3 (a b) (b b) (h h) (y y))
+  (ind-zero-in (y h))
+  (non-orig (privk b))
+  (uniq-gen y)
+  (operation encryption-test (displaced 1 0 resp 2)
+    (enc (exp (gen) y) h (privk a)) (0 2))
+  (traces
+    ((recv h) (send (enc (exp (gen) y) h (privk b)))
+      (recv (enc (exp (gen) y) h (privk b)))))
+  (label 4)
+  (parent 2)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a b) (b b) (y y) (h h))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol dh_sig2 diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace (send (exp (gen) x)) (recv (enc h (exp (gen) x) (privk b)))
+      (send (enc (exp (gen) x) h b (privk a))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace (recv h) (send (enc (exp (gen) y) h (privk b)))
+      (recv (enc h (exp (gen) y) b (privk a))))
+    (uniq-gen y)
+    (ind-zero-in (y h))))
+
+(defskeleton dh_sig2
+  (vars (a b name) (h base) (x expn))
+  (defstrand init 3 (a a) (b b) (h h) (x x))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (traces
+    ((send (exp (gen) x)) (recv (enc h (exp (gen) x) (privk b)))
+      (send (enc (exp (gen) x) h b (privk a)))))
+  (label 5)
+  (unrealized (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_sig2
+  (vars (a b name) (x y expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (defstrand resp 2 (b b) (h (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand resp 2)
+    (enc (exp (gen) y) (exp (gen) x) (privk b)) (0 1))
+  (traces
+    ((send (exp (gen) x))
+      (recv (enc (exp (gen) y) (exp (gen) x) (privk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (privk a))))
+    ((recv (exp (gen) x))
+      (send (enc (exp (gen) y) (exp (gen) x) (privk b)))))
+  (label 6)
+  (parent 5)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (x x) (h (exp (gen) y)))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol dh_sig2 diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace (send (exp (gen) x)) (recv (enc h (exp (gen) x) (privk b)))
+      (send (enc (exp (gen) x) h b (privk a))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace (recv h) (send (enc (exp (gen) y) h (privk b)))
+      (recv (enc h (exp (gen) y) b (privk a))))
+    (uniq-gen y)
+    (ind-zero-in (y h))))
+
+(defskeleton dh_sig2
+  (vars (a b name) (h base) (y expn))
+  (defstrand resp 3 (a a) (b b) (h h) (y y))
+  (ind-zero-in (y h))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (traces
+    ((recv h) (send (enc (exp (gen) y) h (privk b)))
+      (recv (enc h (exp (gen) y) b (privk a)))))
+  (label 7)
+  (unrealized (0 2))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dh_sig2
+  (vars (a b name) (y x expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (operation encryption-test (added-strand init 3)
+    (enc (exp (gen) x) (exp (gen) y) b (privk a)) (0 2))
+  (traces
+    ((recv (exp (gen) x))
+      (send (enc (exp (gen) y) (exp (gen) x) (privk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) b (privk a))))
+    ((send (exp (gen) x))
+      (recv (enc (exp (gen) y) (exp (gen) x) (privk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (privk a)))))
+  (label 8)
+  (parent 7)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (y y) (h (exp (gen) x)))))
+  (origs))
+
+(comment "Nothing left to do")
diff --git a/tst/dh_test.scm b/tst/dh_test.scm
new file mode 100644
--- /dev/null
+++ b/tst/dh_test.scm
@@ -0,0 +1,115 @@
+(herald "Diffie-Hellman protocol, man-in-the-middle attack" (algebra diffie-hellman) (bound 20))
+
+(comment 
+(defprotocol foo diffie-hellman
+  (defrole init
+    (vars (h base) (k akey) (x expn))
+    (trace
+       (send (enc (exp (gen) x) k))
+       (recv (enc (exp h x) k))
+    )
+    (non-orig (invk k))
+    (uniq-gen x)
+  )
+)
+
+(defskeleton foo
+   (vars (h base))
+   (defstrand init 2 (h h)))
+
+(defprotocol bar diffie-hellman
+  (defrole init
+    (vars (h base) (x z expn))
+    (trace
+       (send (exp (gen) x))
+       (recv (exp (gen) (mul x z)))
+    )
+    (uniq-gen x)
+  )
+)
+
+(defskeleton bar
+  (vars (x expn))
+  (defstrand init 2 (x x)))
+
+(defprotocol bar2 diffie-hellman
+  (defrole init
+    (vars (h base) (x z expn))
+    (trace
+       (send (exp h x))
+       (recv (exp (gen) x))
+    )
+    (uniq-gen x)
+  )
+)
+
+(defskeleton bar2
+  (vars (x expn))
+  (defstrand init 2 (x x)))
+
+(defprotocol baz diffie-hellman
+  (defrole init
+    (vars (h base) (x z expn) (k akey))
+    (trace
+       (send (enc (exp (gen) x) k))
+       (recv (enc (exp (gen) (mul x z)) k))
+    )
+    (uniq-gen x)
+    (non-orig (invk k))
+  )
+)
+
+(defskeleton baz
+  (vars (x expn))
+  (defstrand init 2 (x x)))
+
+
+(defprotocol bazar diffie-hellman
+  (defrole init
+    (vars (h base) (t text) (x z expn) (k skey))
+    (trace
+       (send (enc (exp (gen) (mul x z)) k))
+       (recv (exp (gen) x))
+    )
+    (uniq-orig t)
+    (pen-non-orig k)
+    (uniq-gen x)
+  )
+  (defrole revealer
+    (vars (m mesg) (k skey))
+    (trace
+       (recv (enc m k))
+       (send k)))
+)
+
+(defskeleton bazar
+  (vars (k skey))
+  (defstrand init 2 (k k)))
+
+
+(defprotocol foo2 diffie-hellman
+  (defrole init
+    (vars (h base) (x expn))
+    (trace
+       (send (cat (exp (gen) x)
+		  (enc "foo" (exp h x))))
+       (recv (exp h x)))
+    (uniq-gen x)))
+
+(defskeleton foo2
+   (vars )
+   (defstrand init 2))
+)
+
+(defprotocol foo3 diffie-hellman
+  (defrole resp
+    (vars (h base))
+    (trace (recv h)))
+  (defrole init
+    (vars (x expn))
+    (trace (send (exp (gen) x)))))
+
+(defskeleton foo3
+   (vars (x expn))
+   (defstrand resp 1 (h (exp (gen) x)))
+   (non-orig x))
diff --git a/tst/dh_test.tst b/tst/dh_test.tst
new file mode 100644
--- /dev/null
+++ b/tst/dh_test.tst
@@ -0,0 +1,37 @@
+(herald "Diffie-Hellman protocol, man-in-the-middle attack"
+  (algebra diffie-hellman) (bound 20))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from dh_test.scm")
+(comment "Strand count bounded at 20")
+
+(defprotocol foo3 diffie-hellman
+  (defrole resp (vars (h base)) (trace (recv h)))
+  (defrole init (vars (x expn)) (trace (send (exp (gen) x)))))
+
+(defskeleton foo3
+  (vars (x expn))
+  (defstrand resp 1 (h (exp (gen) x)))
+  (non-orig x)
+  (traces ((recv (exp (gen) x))))
+  (label 0)
+  (unrealized (0 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton foo3
+  (vars (x expn))
+  (defstrand resp 1 (h (exp (gen) x)))
+  (defstrand init 1 (x x))
+  (precedes ((1 0) (0 0)))
+  (non-orig x)
+  (operation nonce-test (added-strand init 1) (exp (gen) x) (0 0))
+  (traces ((recv (exp (gen) x))) ((send (exp (gen) x))))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((x x))))
+  (origs))
+
+(comment "Nothing left to do")
diff --git a/tst/dhnsl.lisp b/tst/dhnsl.lisp
new file mode 100644
--- /dev/null
+++ b/tst/dhnsl.lisp
@@ -0,0 +1,52 @@
+(herald "Diffie-Hellman enhanced Needham-Schroeder-Lowe Protocol"
+;  (limit 1)
+  (algebra diffie-hellman))
+
+(defprotocol dhnsl diffie-hellman
+  (defrole init
+    (vars (a b name) (h2 h3 base) (x expn))
+    (trace
+     (send (enc (exp (gen) x) a (pubk b)))
+     (recv (enc h2 (exp h2 x) h3 b (pubk a)))
+     (send (enc (exp h3 x) (pubk b)))
+    )
+    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role")
+  )
+  (defrole resp
+    (vars (b a name) (h1 base) (y z expn))
+    (trace
+     (recv (enc h1 a (pubk b)))
+     (send (enc (exp (gen) y) (exp h1 y) (exp (gen) z) b (pubk a)))
+     (recv (enc (exp h1 z) (pubk b)))
+    )
+    (uniq-gen y z)
+    (comment "Y and Z should be assumed to be freshly chosen per role")
+  )
+  (comment "Needham-Schroeder-Lowe DH challenge/responses in place of nonces")
+)
+
+;;; The initiator point-of-view
+(defskeleton dhnsl
+  (vars (a b name) (h2 h3 base) (x expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x))
+  (non-orig (privk b) (privk a))
+  (comment "Initiator point-of-view"))
+
+;;; The responder point-of-view
+(defskeleton dhnsl
+  (vars (a b name) (h1 base) (y z expn))
+  (defstrand resp 3 (a a) (b b) (h1 h1) (y y) (z z))
+  (non-orig (privk a))
+  (comment "Responder point-of-view"))
+
+;(defskeleton dhnsl
+;  (vars (a b a-0 b-0 name) (y z z-0 x expn))
+;  (defstrand resp 3 (b b) (a a) (h1 (exp (gen) (mul (rec z-0) x))) (y y)
+;    (z z))
+;  (defstrand init 1 (a a-0) (b b-0) (x x))
+;  (precedes ((1 0) (0 0)))
+;  (non-orig (privk a))
+;  (uniq-gen y z x)
+;  (comment "empty cohort"))
+
diff --git a/tst/dhnsl.tst b/tst/dhnsl.tst
new file mode 100644
--- /dev/null
+++ b/tst/dhnsl.tst
@@ -0,0 +1,5826 @@
+(herald "Diffie-Hellman enhanced Needham-Schroeder-Lowe Protocol"
+  (algebra diffie-hellman))
+
+(comment "CPSA 3.0.2")
+(comment "All input read from dhnsl.lsp")
+
+(defprotocol dhnsl diffie-hellman
+  (defrole init
+    (vars (a b name) (h2 h3 base) (x expn))
+    (trace (send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc h2 (exp h2 x) h3 b (pubk a)))
+      (send (enc (exp h3 x) (pubk b))))
+    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role"))
+  (defrole resp
+    (vars (b a name) (h1 base) (y z expn))
+    (trace (recv (enc h1 a (pubk b)))
+      (send (enc (exp (gen) y) (exp h1 y) (exp (gen) z) b (pubk a)))
+      (recv (enc (exp h1 z) (pubk b))))
+    (uniq-gen y z)
+    (ind-zero-in (y h1) (z h1))
+    (comment "Y and Z should be assumed to be freshly chosen per role"))
+  (comment
+    "Needham-Schroeder-Lowe DH challenge/responses in place of nonces"))
+
+(defskeleton dhnsl
+  (vars (a b name) (h2 h3 base) (x expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (comment "Initiator point-of-view")
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc h2 (exp h2 x) h3 b (pubk a)))
+      (send (enc (exp h3 x) (pubk b)))))
+  (label 0)
+  (unrealized (0 1))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 name) (h2 h3 h2-0 base) (x x-0 x-1 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-0 (rec x-1)))) (x x-1))
+  (precedes ((0 0) (1 1)) ((1 2) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x x-1)
+  (operation nonce-test (added-strand init 3) (exp h2 x) (0 1)
+    (enc (exp (gen) x) a (pubk b)))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc h2 (exp h2 x) h3 b (pubk a)))
+      (send (enc (exp h3 x) (pubk b))))
+    ((send (enc (exp (gen) x-1) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-1) (exp h2 (mul x x-0 (rec x-1))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-0)) (pubk b-0)))))
+  (label 1)
+  (parent 0)
+  (unrealized (1 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b name) (h3 base) (x x-0 expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp (gen) (rec x))) (h3 h3)
+    (x x-0))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-0)
+  (operation nonce-test (displaced 1 0 init 1)
+    (exp (gen) (mul (rec x) x-1)) (0 1)
+    (enc (exp (gen) x-1) a (pubk b)))
+  (traces
+    ((send (enc (exp (gen) x-0) a (pubk b)))
+      (recv
+        (enc (exp (gen) (rec x)) (exp (gen) (mul (rec x) x-0)) h3 b
+          (pubk a))) (send (enc (exp h3 x-0) (pubk b)))))
+  (label 2)
+  (parent 0)
+  (seen 2)
+  (unrealized (0 1))
+  (origs)
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 name) (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-0) x-1))) (x x-0))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-2 (rec x-3)))) (x x-3))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 2) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-0 x-1 x-3)
+  (operation nonce-test (added-strand init 3) (exp h2-0 x-0) (1 1)
+    (exp (gen) x-0))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-0) (exp h2 (mul x (rec x-0) x-1)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-1)) (pubk b-0))))
+    ((send (enc (exp (gen) x-3) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-3) (exp h2-0 (mul x-0 x-2 (rec x-3))) b-1
+          (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-2)) (pubk b-1)))))
+  (label 3)
+  (parent 1)
+  (unrealized (1 1) (2 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 name) (h2 h3 h2-0 base)
+    (x z x-0 x-1 x-2 x-3 x-4 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-4))
+    (h3 (exp h2 (mul x (rec x-0) x-1))) (x x-0))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-0 x-2)))
+    (y x-3) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 0)) ((1 2) (0 1)) ((2 1) (1 1)))
+  (ind-zero-in (x-3 (exp h2-0 (mul x-0 x-2)))
+    (z (exp h2-0 (mul x-0 x-2))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-0 x-1 x-3)
+  (operation nonce-test (added-strand resp 2) (exp h2-0 (mul x-0 x-4))
+    (1 1) (exp (gen) x-0))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-4) (exp h2-0 (mul x-0 x-4))
+          (exp h2 (mul x (rec x-0) x-1)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-1)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-0 x-2)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-3) (exp h2-0 (mul x-0 x-2 x-3)) (exp (gen) z)
+          b-1 (pubk a-1)))))
+  (label 4)
+  (parent 1)
+  (unrealized (1 1) (2 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 name) (h2 h3 base) (x x-0 x-1 x-2 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x-2))
+    (h3 (exp h2 (mul x x-0 (rec x-1)))) (x x-1))
+  (precedes ((0 0) (1 1)) ((1 2) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x x-1)
+  (operation nonce-test (algebra-contracted (h2-0 (exp (gen) x-2)))
+    (exp (gen) (mul x-1 x-2)) (1 1) (exp (gen) x-1))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc h2 (exp h2 x) h3 b (pubk a)))
+      (send (enc (exp h3 x) (pubk b))))
+    ((send (enc (exp (gen) x-1) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x-2) (exp (gen) (mul x-1 x-2))
+          (exp h2 (mul x x-0 (rec x-1))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-0)) (pubk b-0)))))
+  (label 5)
+  (parent 1)
+  (unrealized (1 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 name) (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-2 (rec x-3)))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-1) x-3))) (x x-1))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 x-4 (rec x-5)))) (x x-5))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 2) (2 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-1 x-2 x-3 x-5)
+  (operation nonce-test (added-strand init 3) (exp h2-1 x-1) (2 1)
+    (exp (gen) x-1))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc h2 (exp h2 x-2) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x x-2 (rec x-3))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-1) (exp h2-0 (mul x-0 (rec x-1) x-3)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-5) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-5) (exp h2-1 (mul x-1 x-4 (rec x-5))) b-2
+          (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-4)) (pubk b-2)))))
+  (label 6)
+  (parent 3)
+  (unrealized (1 1) (2 1) (3 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 name) (h2 h3 h2-0 h2-1 base)
+    (x x-0 z x-1 x-2 x-3 x-4 x-5 x-6 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-2 (rec x-3)))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 x-6))
+    (h3 (exp h2-0 (mul x-0 (rec x-1) x-3))) (x x-1))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-1 (mul x-1 x-4)))
+    (y x-5) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 0))
+    ((2 2) (1 1)) ((3 1) (2 1)))
+  (ind-zero-in (x-5 (exp h2-1 (mul x-1 x-4)))
+    (z (exp h2-1 (mul x-1 x-4))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-1 x-2 x-3 x-5)
+  (operation nonce-test (added-strand resp 2) (exp h2-1 (mul x-1 x-6))
+    (2 1) (exp (gen) x-1))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc h2 (exp h2 x-2) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x x-2 (rec x-3))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 x-6) (exp h2-1 (mul x-1 x-6))
+          (exp h2-0 (mul x-0 (rec x-1) x-3)) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((recv (enc (exp h2-1 (mul x-1 x-4)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-5) (exp h2-1 (mul x-1 x-4 x-5)) (exp (gen) z)
+          b-2 (pubk a-2)))))
+  (label 7)
+  (parent 3)
+  (unrealized (1 1) (2 1) (3 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 x-3 x-4 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-0) x-1))) (x x-0))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-4))
+    (h3 (exp h2-0 (mul x-0 x-2 (rec x-3)))) (x x-3))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 2) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-0 x-1 x-3)
+  (operation nonce-test (algebra-contracted (h2-1 (exp (gen) x-4)))
+    (exp (gen) (mul x-3 x-4)) (2 1) (exp (gen) x-3))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-0) (exp h2 (mul x (rec x-0) x-1)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-1)) (pubk b-0))))
+    ((send (enc (exp (gen) x-3) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-4) (exp (gen) (mul x-3 x-4))
+          (exp h2-0 (mul x-0 x-2 (rec x-3))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-2)) (pubk b-1)))))
+  (label 8)
+  (parent 3)
+  (unrealized (1 1) (2 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 name) (h2 h3 h2-0 h2-1 base)
+    (x x-0 z x-1 x-2 x-3 x-4 x-5 x-6 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-0))
+    (h3 (exp h2 (mul x x-1 (rec x-2)))) (x x-2))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-2 x-4))) (y z)
+    (z x-3))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-2 x-4 x-5 (rec x-6)))) (x x-6))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 2) (2 0)))
+  (ind-zero-in (z (exp h2-0 (mul x-2 x-4)))
+    (x-3 (exp h2-0 (mul x-2 x-4))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-1 x-2 x-3 x-6)
+  (operation nonce-test (added-strand init 3) (exp h2-0 (mul x-2 x-4))
+    (2 0) (exp (gen) x-2))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-0) (exp h2-0 (mul x-0 x-2))
+          (exp h2 (mul x x-1 (rec x-2))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-1)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-2 x-4)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z) (exp h2-0 (mul z x-2 x-4)) (exp (gen) x-3)
+          b-1 (pubk a-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc h2-1 (exp h2-1 x-6) (exp h2-0 (mul x-2 x-4 x-5 (rec x-6)))
+          b-2 (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-2 x-4 x-5)) (pubk b-2)))))
+  (label 9)
+  (parent 4)
+  (unrealized (1 1) (3 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 name) (h2 h3 h2-0 base)
+    (x x-0 z z-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 (mul x-0 x-7)))
+    (h3 (exp h2 (mul x x-1 (rec x-2)))) (x x-2))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2-0 (mul x-2 x-4 x-5 x-6 (rec x-8)))) (y z-0) (z x-3))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-0 (mul x-2 x-4 x-5)))
+    (y x-6) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (3 0)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)))
+  (ind-zero-in (x-6 (exp h2-0 (mul x-2 x-4 x-5)))
+    (z (exp h2-0 (mul x-2 x-4 x-5)))
+    (z-0 (exp h2-0 (mul x-2 x-4 x-5 x-6 (rec x-8))))
+    (x-3 (exp h2-0 (mul x-2 x-4 x-5 x-6 (rec x-8)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-1 x-2 x-3 x-6)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-0 (mul x-2 x-4 x-5 x-6 (rec x-8))) (2 0) (exp (gen) x-2))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 (mul x-0 x-7)) (exp h2-0 (mul x-0 x-2 x-7))
+          (exp h2 (mul x x-1 (rec x-2))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-1)) (pubk b-0))))
+    ((recv
+       (enc (exp h2-0 (mul x-2 x-4 x-5 x-6 (rec x-8))) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-0 (mul z-0 x-2 x-4 x-5 x-6 (rec x-8))) (exp (gen) x-3)
+          b-1 (pubk a-1))))
+    ((recv (enc (exp h2-0 (mul x-2 x-4 x-5)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-6) (exp h2-0 (mul x-2 x-4 x-5 x-6))
+          (exp (gen) z) b-2 (pubk a-2)))))
+  (label 10)
+  (parent 4)
+  (unrealized (1 1) (3 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 name) (h2 h3 base)
+    (x z x-0 x-1 x-2 x-3 x-4 x-5 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0)
+    (h2 (exp (gen) (mul (rec x-2) x-4 x-5)))
+    (h3 (exp h2 (mul x (rec x-0) x-1))) (x x-0))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp (gen) (mul x-0 x-5)))
+    (y x-3) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 0)) ((1 2) (0 1)) ((2 1) (1 1)))
+  (ind-zero-in (x-3 (exp (gen) (mul x-0 x-5)))
+    (z (exp (gen) (mul x-0 x-5))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-0 x-1 x-3)
+  (operation nonce-test
+    (algebra-contracted (h2-0 (exp (gen) (mul (rec x-2) x-5))))
+    (exp (gen) (mul x-0 x-5)) (2 0) (exp (gen) x-0))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) (mul (rec x-2) x-4 x-5))
+          (exp (gen) (mul x-0 (rec x-2) x-4 x-5))
+          (exp h2 (mul x (rec x-0) x-1)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-1)) (pubk b-0))))
+    ((recv (enc (exp (gen) (mul x-0 x-5)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-3) (exp (gen) (mul x-0 x-3 x-5)) (exp (gen) z)
+          b-1 (pubk a-1)))))
+  (label 11)
+  (parent 4)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 x-3 x-4 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul (rec x-0) x-1 x-2))) (x x-0))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-0)
+    (h3 (exp h2 (mul (rec x-0) x-1 x-2 x-3 (rec x-4)))) (x x-4))
+  (precedes ((0 0) (2 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 2) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-0 x-1 x-4)
+  (operation nonce-test (added-strand init 3)
+    (exp h2 (mul (rec x-0) x-1 x-2)) (1 1))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-0))
+          (exp h2 (mul (rec x-0) x-1 x-2)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x-1 x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc h2-0 (exp h2-0 x-4)
+          (exp h2 (mul (rec x-0) x-1 x-2 x-3 (rec x-4))) b-1
+          (pubk a-1)))
+      (send (enc (exp h2 (mul (rec x-0) x-1 x-2 x-3)) (pubk b-1)))))
+  (label 12)
+  (parent 5)
+  (unrealized (2 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 name) (h2 h3 base)
+    (x z x-0 x-1 x-2 x-3 x-4 x-5 x-6 expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp h2 x-5)) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul (rec x-0) x-1 x-2 x-3 x-4 (rec x-6)))) (x x-0))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2 (mul (rec x-0) x-1 x-2 x-3))) (y x-4) (z z))
+  (precedes ((0 0) (2 0)) ((1 0) (2 0)) ((1 2) (0 1)) ((2 1) (1 1)))
+  (ind-zero-in (x-4 (exp h2 (mul (rec x-0) x-1 x-2 x-3)))
+    (z (exp h2 (mul (rec x-0) x-1 x-2 x-3))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-0 x-1 x-4)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2 (mul (rec x-0) x-1 x-2 x-3 x-4 (rec x-6))) (1 1))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc (exp h2 x-5) (exp h2 (mul x-1 x-5)) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-0))
+          (exp h2 (mul (rec x-0) x-1 x-2 x-3 x-4 (rec x-6))) b-0
+          (pubk a-0)))
+      (send (enc (exp h2 (mul x-1 x-2 x-3 x-4 (rec x-6))) (pubk b-0))))
+    ((recv (enc (exp h2 (mul (rec x-0) x-1 x-2 x-3)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-4) (exp h2 (mul (rec x-0) x-1 x-2 x-3 x-4))
+          (exp (gen) z) b-1 (pubk a-1)))))
+  (label 13)
+  (parent 5)
+  (unrealized (0 1) (2 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 name) (h3 base) (x x-0 x-1 x-2 x-3 expn))
+  (defstrand init 3 (a a) (b b)
+    (h2 (exp (gen) (mul (rec x) (rec x-0) x-1 x-1 x-3))) (h3 h3) (x x))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x-2))
+    (h3 (exp (gen) (mul x-1 x-3))) (x x-1))
+  (precedes ((0 0) (1 1)) ((1 2) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x x-1)
+  (operation nonce-test
+    (algebra-contracted
+      (h2 (exp (gen) (mul (rec x) (rec x-0) x-1 x-1 x-3))))
+    (exp (gen) (mul x-1 x-3)) (1 1))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv
+        (enc (exp (gen) (mul (rec x) (rec x-0) x-1 x-1 x-3))
+          (exp (gen) (mul (rec x-0) x-1 x-1 x-3)) h3 b (pubk a)))
+      (send (enc (exp h3 x) (pubk b))))
+    ((send (enc (exp (gen) x-1) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x-2) (exp (gen) (mul x-1 x-2))
+          (exp (gen) (mul x-1 x-3)) b-0 (pubk a-0)))
+      (send (enc (exp (gen) (mul x-1 x-1 x-3)) (pubk b-0)))))
+  (label 14)
+  (parent 5)
+  (seen 14)
+  (unrealized (0 1))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-3 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 (rec x-2) x-5))) (x x-2))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-3)
+    (h3 (exp h2-2 (mul x-2 x-6 (rec x-7)))) (x x-7))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 2) (3 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-2 x-3 x-4 x-5 x-7)
+  (operation nonce-test (added-strand init 3) (exp h2-2 x-2) (3 1)
+    (exp (gen) x-2))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x (rec x-3) x-4)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-5) (exp h2-0 (mul x-0 x-3 (rec x-5))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-2) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-2) (exp h2-1 (mul x-1 (rec x-2) x-5)) b-2
+          (pubk a-2))) (send (enc (exp h2-1 (mul x-1 x-5)) (pubk b-2))))
+    ((send (enc (exp (gen) x-7) a-3 (pubk b-3)))
+      (recv
+        (enc h2-3 (exp h2-3 x-7) (exp h2-2 (mul x-2 x-6 (rec x-7))) b-3
+          (pubk a-3)))
+      (send (enc (exp h2-2 (mul x-2 x-6)) (pubk b-3)))))
+  (label 15)
+  (parent 6)
+  (unrealized (1 1) (2 1) (3 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-3 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-2 x-8))
+    (h3 (exp h2-1 (mul x-1 (rec x-2) x-5))) (x x-2))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-2 (mul x-2 x-6)))
+    (y x-7) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 0)) ((3 2) (2 1)) ((4 1) (3 1)))
+  (ind-zero-in (x-7 (exp h2-2 (mul x-2 x-6)))
+    (z (exp h2-2 (mul x-2 x-6))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-5 x-7)
+  (operation nonce-test (added-strand resp 2) (exp h2-2 (mul x-2 x-8))
+    (3 1) (exp (gen) x-2))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x (rec x-3) x-4)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-5) (exp h2-0 (mul x-0 x-3 (rec x-5))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-2) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-2 x-8) (exp h2-2 (mul x-2 x-8))
+          (exp h2-1 (mul x-1 (rec x-2) x-5)) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-5)) (pubk b-2))))
+    ((recv (enc (exp h2-2 (mul x-2 x-6)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-7) (exp h2-2 (mul x-2 x-6 x-7)) (exp (gen) z)
+          b-3 (pubk a-3)))))
+  (label 16)
+  (parent 6)
+  (unrealized (1 1) (2 1) (3 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 name) (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-2 (rec x-3)))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-1) x-3))) (x x-1))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-6))
+    (h3 (exp h2-1 (mul x-1 x-4 (rec x-5)))) (x x-5))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 2) (2 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-1 x-2 x-3 x-5)
+  (operation nonce-test (algebra-contracted (h2-2 (exp (gen) x-6)))
+    (exp (gen) (mul x-5 x-6)) (3 1) (exp (gen) x-5))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc h2 (exp h2 x-2) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x x-2 (rec x-3))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-1) (exp h2-0 (mul x-0 (rec x-1) x-3)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-5) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-6) (exp (gen) (mul x-5 x-6))
+          (exp h2-1 (mul x-1 x-4 (rec x-5))) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-4)) (pubk b-2)))))
+  (label 17)
+  (parent 6)
+  (unrealized (1 1) (2 1) (3 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-3))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-2) x-3))) (x x-2))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 x-1))
+    (h3 (exp h2-0 (mul x-0 x-2 (rec x-4)))) (x x-4))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-1 (mul x-4 x-6))) (y z)
+    (z x-5))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-4 x-6 x-7 (rec x-8)))) (x x-8))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 1))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 2) (3 0)))
+  (ind-zero-in (z (exp h2-1 (mul x-4 x-6)))
+    (x-5 (exp h2-1 (mul x-4 x-6))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-5 x-8)
+  (operation nonce-test (added-strand init 3) (exp h2-1 (mul x-4 x-6))
+    (3 0) (exp (gen) x-4))
+  (traces
+    ((send (enc (exp (gen) x-3) a (pubk b)))
+      (recv (enc h2 (exp h2 x-3) h3 b (pubk a)))
+      (send (enc (exp h3 x-3) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-2) (exp h2 (mul x (rec x-2) x-3)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-3)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 x-1) (exp h2-1 (mul x-1 x-4))
+          (exp h2-0 (mul x-0 x-2 (rec x-4))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-2)) (pubk b-1))))
+    ((recv (enc (exp h2-1 (mul x-4 x-6)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) z) (exp h2-1 (mul z x-4 x-6)) (exp (gen) x-5)
+          b-2 (pubk a-2))))
+    ((send (enc (exp (gen) x-8) a-3 (pubk b-3)))
+      (recv
+        (enc h2-2 (exp h2-2 x-8) (exp h2-1 (mul x-4 x-6 x-7 (rec x-8)))
+          b-3 (pubk a-3)))
+      (send (enc (exp h2-1 (mul x-4 x-6 x-7)) (pubk b-3)))))
+  (label 18)
+  (parent 7)
+  (unrealized (1 1) (2 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 b-3 a-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 z z-0 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-3))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-2) x-3))) (x x-2))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 (mul x-1 x-9)))
+    (h3 (exp h2-0 (mul x-0 x-2 (rec x-4)))) (x x-4))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2-1 (mul x-4 x-6 x-7 x-8 (rec x-10)))) (y z-0) (z x-5))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-1 (mul x-4 x-6 x-7)))
+    (y x-8) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 0))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 1) (3 0)))
+  (ind-zero-in (x-8 (exp h2-1 (mul x-4 x-6 x-7)))
+    (z (exp h2-1 (mul x-4 x-6 x-7)))
+    (z-0 (exp h2-1 (mul x-4 x-6 x-7 x-8 (rec x-10))))
+    (x-5 (exp h2-1 (mul x-4 x-6 x-7 x-8 (rec x-10)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-2 x-3 x-4 x-5 x-8)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-1 (mul x-4 x-6 x-7 x-8 (rec x-10))) (3 0) (exp (gen) x-4))
+  (traces
+    ((send (enc (exp (gen) x-3) a (pubk b)))
+      (recv (enc h2 (exp h2 x-3) h3 b (pubk a)))
+      (send (enc (exp h3 x-3) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-2) (exp h2 (mul x (rec x-2) x-3)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-3)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 (mul x-1 x-9)) (exp h2-1 (mul x-1 x-4 x-9))
+          (exp h2-0 (mul x-0 x-2 (rec x-4))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-2)) (pubk b-1))))
+    ((recv
+       (enc (exp h2-1 (mul x-4 x-6 x-7 x-8 (rec x-10))) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-1 (mul z-0 x-4 x-6 x-7 x-8 (rec x-10)))
+          (exp (gen) x-5) b-2 (pubk a-2))))
+    ((recv (enc (exp h2-1 (mul x-4 x-6 x-7)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-8) (exp h2-1 (mul x-4 x-6 x-7 x-8))
+          (exp (gen) z) b-3 (pubk a-3)))))
+  (label 19)
+  (parent 7)
+  (unrealized (1 1) (2 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 name) (h2 h3 h2-0 base)
+    (x x-0 z x-1 x-2 x-3 x-4 x-5 x-6 x-7 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-2 (rec x-3)))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1)
+    (h2 (exp (gen) (mul (rec x-4) x-6 x-7)))
+    (h3 (exp h2-0 (mul x-0 (rec x-1) x-3))) (x x-1))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp (gen) (mul x-1 x-7)))
+    (y x-5) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 0))
+    ((2 2) (1 1)) ((3 1) (2 1)))
+  (ind-zero-in (x-5 (exp (gen) (mul x-1 x-7)))
+    (z (exp (gen) (mul x-1 x-7))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-1 x-2 x-3 x-5)
+  (operation nonce-test
+    (algebra-contracted (h2-1 (exp (gen) (mul (rec x-4) x-7))))
+    (exp (gen) (mul x-1 x-7)) (3 0) (exp (gen) x-1))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc h2 (exp h2 x-2) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x x-2 (rec x-3))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) (mul (rec x-4) x-6 x-7))
+          (exp (gen) (mul x-1 (rec x-4) x-6 x-7))
+          (exp h2-0 (mul x-0 (rec x-1) x-3)) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((recv (enc (exp (gen) (mul x-1 x-7)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-5) (exp (gen) (mul x-1 x-5 x-7)) (exp (gen) z)
+          b-2 (pubk a-2)))))
+  (label 20)
+  (parent 7)
+  (unrealized (1 1) (2 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 name) (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-2 (rec x-3)))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-0))
+    (h3 (exp h2-0 (mul (rec x-1) x-3 x-4))) (x x-1))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-1)
+    (h3 (exp h2-0 (mul (rec x-1) x-3 x-4 x-5 (rec x-6)))) (x x-6))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 2) (2 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-1 x-2 x-3 x-6)
+  (operation nonce-test (added-strand init 3)
+    (exp h2-0 (mul (rec x-1) x-3 x-4)) (2 1))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc h2 (exp h2 x-2) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x x-2 (rec x-3))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul x-0 x-1))
+          (exp h2-0 (mul (rec x-1) x-3 x-4)) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-3 x-4)) (pubk b-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc h2-1 (exp h2-1 x-6)
+          (exp h2-0 (mul (rec x-1) x-3 x-4 x-5 (rec x-6))) b-2
+          (pubk a-2)))
+      (send (enc (exp h2-0 (mul (rec x-1) x-3 x-4 x-5)) (pubk b-2)))))
+  (label 21)
+  (parent 8)
+  (unrealized (1 1) (3 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 name) (h2 h3 h2-0 base)
+    (x x-0 z x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-7))
+    (h3 (exp h2 (mul x x-2 (rec x-3)))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-0))
+    (h3 (exp h2-0 (mul (rec x-1) x-3 x-4 x-5 x-6 (rec x-8)))) (x x-1))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2-0 (mul (rec x-1) x-3 x-4 x-5))) (y x-6) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (3 0)) ((1 2) (0 1)) ((2 0) (3 0))
+    ((2 2) (1 1)) ((3 1) (2 1)))
+  (ind-zero-in (x-6 (exp h2-0 (mul (rec x-1) x-3 x-4 x-5)))
+    (z (exp h2-0 (mul (rec x-1) x-3 x-4 x-5))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-1 x-2 x-3 x-6)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-0 (mul (rec x-1) x-3 x-4 x-5 x-6 (rec x-8))) (2 1))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc h2 (exp h2 x-2) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-7) (exp h2-0 (mul x-3 x-7))
+          (exp h2 (mul x x-2 (rec x-3))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul x-0 x-1))
+          (exp h2-0 (mul (rec x-1) x-3 x-4 x-5 x-6 (rec x-8))) b-1
+          (pubk a-1)))
+      (send
+        (enc (exp h2-0 (mul x-3 x-4 x-5 x-6 (rec x-8))) (pubk b-1))))
+    ((recv (enc (exp h2-0 (mul (rec x-1) x-3 x-4 x-5)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-6) (exp h2-0 (mul (rec x-1) x-3 x-4 x-5 x-6))
+          (exp (gen) z) b-2 (pubk a-2)))))
+  (label 22)
+  (parent 8)
+  (unrealized (1 1) (3 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 name) (h2 h3 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0)
+    (h2 (exp (gen) (mul (rec x-0) (rec x-2) x-3 x-3 x-5)))
+    (h3 (exp h2 (mul x (rec x-0) x-1))) (x x-0))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-4))
+    (h3 (exp (gen) (mul x-3 x-5))) (x x-3))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 2) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-0 x-1 x-3)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-0 (exp (gen) (mul (rec x-0) (rec x-2) x-3 x-3 x-5))))
+    (exp (gen) (mul x-3 x-5)) (2 1))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) (mul (rec x-0) (rec x-2) x-3 x-3 x-5))
+          (exp (gen) (mul (rec x-2) x-3 x-3 x-5))
+          (exp h2 (mul x (rec x-0) x-1)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-1)) (pubk b-0))))
+    ((send (enc (exp (gen) x-3) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-4) (exp (gen) (mul x-3 x-4))
+          (exp (gen) (mul x-3 x-5)) b-1 (pubk a-1)))
+      (send (enc (exp (gen) (mul x-3 x-3 x-5)) (pubk b-1)))))
+  (label 23)
+  (parent 8)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 z x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-0))
+    (h3 (exp h2 (mul x (rec x-4) x-5))) (x x-4))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-1 x-4)))
+    (y x-6) (z x-3))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-1 x-2 (rec z) x-4))) (x z))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-2)
+    (h3 (exp h2-1 (mul z x-7 (rec x-8)))) (x x-8))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (4 1)) ((3 2) (2 0)) ((4 2) (3 1)))
+  (ind-zero-in (x-6 (exp h2-0 (mul x-1 x-4)))
+    (x-3 (exp h2-0 (mul x-1 x-4))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-3 x-4 x-5 x-6 x-8)
+  (operation nonce-test (added-strand init 3) (exp h2-1 z) (3 1)
+    (exp (gen) z))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-0) (exp h2-0 (mul x-0 x-4))
+          (exp h2 (mul x (rec x-4) x-5)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-1 x-4)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-6) (exp h2-0 (mul x-1 x-4 x-6))
+          (exp (gen) x-3) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) z) a-2 (pubk b-2)))
+      (recv
+        (enc h2-1 (exp h2-1 z) (exp h2-0 (mul x-1 x-2 (rec z) x-4)) b-2
+          (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-1 x-2 x-4)) (pubk b-2))))
+    ((send (enc (exp (gen) x-8) a-3 (pubk b-3)))
+      (recv
+        (enc h2-2 (exp h2-2 x-8) (exp h2-1 (mul z x-7 (rec x-8))) b-3
+          (pubk a-3))) (send (enc (exp h2-1 (mul z x-7)) (pubk b-3)))))
+  (label 24)
+  (parent 9)
+  (unrealized (1 1) (3 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 b-3 a-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 z z-0 x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-0))
+    (h3 (exp h2 (mul x (rec x-4) x-5))) (x x-4))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-1 x-4)))
+    (y x-6) (z x-3))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-1 x-9))
+    (h3 (exp h2-0 (mul x-1 x-2 (rec z-0) x-4))) (x z-0))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-1 (mul z-0 x-7)))
+    (y x-8) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (4 0)) ((3 2) (2 0)) ((4 1) (3 1)))
+  (ind-zero-in (x-8 (exp h2-1 (mul z-0 x-7)))
+    (z (exp h2-1 (mul z-0 x-7))) (x-6 (exp h2-0 (mul x-1 x-4)))
+    (x-3 (exp h2-0 (mul x-1 x-4))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-3 x-4 x-5 x-6 x-8)
+  (operation nonce-test (added-strand resp 2) (exp h2-1 (mul z-0 x-9))
+    (3 1) (exp (gen) z-0))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-0) (exp h2-0 (mul x-0 x-4))
+          (exp h2 (mul x (rec x-4) x-5)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-1 x-4)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-6) (exp h2-0 (mul x-1 x-4 x-6))
+          (exp (gen) x-3) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) z-0) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-1 x-9) (exp h2-1 (mul z-0 x-9))
+          (exp h2-0 (mul x-1 x-2 (rec z-0) x-4)) b-2 (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-1 x-2 x-4)) (pubk b-2))))
+    ((recv (enc (exp h2-1 (mul z-0 x-7)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-8) (exp h2-1 (mul z-0 x-7 x-8)) (exp (gen) z)
+          b-3 (pubk a-3)))))
+  (label 25)
+  (parent 9)
+  (unrealized (1 1) (3 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 name) (h2 h3 h2-0 base)
+    (x x-0 z x-1 x-2 x-3 x-4 x-5 x-6 x-7 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-0))
+    (h3 (exp h2 (mul x x-1 (rec x-2)))) (x x-2))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-2 x-4))) (y z)
+    (z x-3))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-7))
+    (h3 (exp h2-0 (mul x-2 x-4 x-5 (rec x-6)))) (x x-6))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 2) (2 0)))
+  (ind-zero-in (z (exp h2-0 (mul x-2 x-4)))
+    (x-3 (exp h2-0 (mul x-2 x-4))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-1 x-2 x-3 x-6)
+  (operation nonce-test (algebra-contracted (h2-1 (exp (gen) x-7)))
+    (exp (gen) (mul x-6 x-7)) (3 1) (exp (gen) x-6))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-0) (exp h2-0 (mul x-0 x-2))
+          (exp h2 (mul x x-1 (rec x-2))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-1)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-2 x-4)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z) (exp h2-0 (mul z x-2 x-4)) (exp (gen) x-3)
+          b-1 (pubk a-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-7) (exp (gen) (mul x-6 x-7))
+          (exp h2-0 (mul x-2 x-4 x-5 (rec x-6))) b-2 (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-2 x-4 x-5)) (pubk b-2)))))
+  (label 26)
+  (parent 9)
+  (unrealized (1 1) (3 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 z z-0 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 (mul x-0 x-1)))
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2-0 (mul (rec x-2) z x-3 x-7 x-8))) (y x-5) (z z-0))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-0 (mul x-3 x-7 x-8)))
+    (y z) (z x-6))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-3 x-7 x-8 x-9 (rec x-10)))) (x x-10))
+  (precedes ((0 0) (1 1)) ((1 0) (4 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)) ((4 2) (3 0)))
+  (ind-zero-in (z (exp h2-0 (mul x-3 x-7 x-8)))
+    (x-6 (exp h2-0 (mul x-3 x-7 x-8)))
+    (x-5 (exp h2-0 (mul (rec x-2) z x-3 x-7 x-8)))
+    (z-0 (exp h2-0 (mul (rec x-2) z x-3 x-7 x-8))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-3 x-4 x-5 x-6 x-10)
+  (operation nonce-test (added-strand init 3)
+    (exp h2-0 (mul x-3 x-7 x-8)) (3 0) (exp (gen) x-3))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 (mul x-0 x-1)) (exp h2-0 (mul x-0 x-1 x-3))
+          (exp h2 (mul x (rec x-3) x-4)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((recv
+       (enc (exp h2-0 (mul (rec x-2) z x-3 x-7 x-8)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-5)
+          (exp h2-0 (mul (rec x-2) z x-3 x-5 x-7 x-8)) (exp (gen) z-0)
+          b-1 (pubk a-1))))
+    ((recv (enc (exp h2-0 (mul x-3 x-7 x-8)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) z) (exp h2-0 (mul z x-3 x-7 x-8))
+          (exp (gen) x-6) b-2 (pubk a-2))))
+    ((send (enc (exp (gen) x-10) a-3 (pubk b-3)))
+      (recv
+        (enc h2-1 (exp h2-1 x-10)
+          (exp h2-0 (mul x-3 x-7 x-8 x-9 (rec x-10))) b-3 (pubk a-3)))
+      (send (enc (exp h2-0 (mul x-3 x-7 x-8 x-9)) (pubk b-3)))))
+  (label 27)
+  (parent 10)
+  (unrealized (1 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 b-3 a-3 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 z z-0 z-1 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12
+      expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 (mul x-0 x-1 x-11)))
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2-0 (mul (rec x-2) z-0 x-3 x-7 x-8 x-9 x-10 (rec x-12))))
+    (y x-5) (z z-1))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2-0 (mul x-3 x-7 x-8 x-9 x-10 (rec x-12)))) (y z-0)
+    (z x-6))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-0 (mul x-3 x-7 x-8 x-9))) (y x-10) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (4 0)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)) ((4 1) (3 0)))
+  (ind-zero-in (x-10 (exp h2-0 (mul x-3 x-7 x-8 x-9)))
+    (z (exp h2-0 (mul x-3 x-7 x-8 x-9)))
+    (z-0 (exp h2-0 (mul x-3 x-7 x-8 x-9 x-10 (rec x-12))))
+    (x-6 (exp h2-0 (mul x-3 x-7 x-8 x-9 x-10 (rec x-12))))
+    (x-5 (exp h2-0 (mul (rec x-2) z-0 x-3 x-7 x-8 x-9 x-10 (rec x-12))))
+    (z-1
+      (exp h2-0 (mul (rec x-2) z-0 x-3 x-7 x-8 x-9 x-10 (rec x-12)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 z-1 x-3 x-4 x-5 x-6 x-10)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-0 (mul x-3 x-7 x-8 x-9 x-10 (rec x-12))) (3 0)
+    (exp (gen) x-3))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 (mul x-0 x-1 x-11))
+          (exp h2-0 (mul x-0 x-1 x-3 x-11))
+          (exp h2 (mul x (rec x-3) x-4)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((recv
+       (enc
+         (exp h2-0 (mul (rec x-2) z-0 x-3 x-7 x-8 x-9 x-10 (rec x-12)))
+         a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-5)
+          (exp h2-0
+            (mul (rec x-2) z-0 x-3 x-5 x-7 x-8 x-9 x-10 (rec x-12)))
+          (exp (gen) z-1) b-1 (pubk a-1))))
+    ((recv
+       (enc (exp h2-0 (mul x-3 x-7 x-8 x-9 x-10 (rec x-12))) a-2
+         (pubk b-2)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-0 (mul z-0 x-3 x-7 x-8 x-9 x-10 (rec x-12)))
+          (exp (gen) x-6) b-2 (pubk a-2))))
+    ((recv (enc (exp h2-0 (mul x-3 x-7 x-8 x-9)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-10) (exp h2-0 (mul x-3 x-7 x-8 x-9 x-10))
+          (exp (gen) z) b-3 (pubk a-3)))))
+  (label 28)
+  (parent 10)
+  (unrealized (1 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 name) (h2 h3 base)
+    (x x-0 z z-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0)
+    (h2 (exp (gen) (mul x-0 (rec x-4) (rec x-5) x-7 x-9)))
+    (h3 (exp h2 (mul x x-1 (rec x-2)))) (x x-2))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp (gen) (mul x-2 x-6 (rec x-8) x-9))) (y z-0) (z x-3))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp (gen) (mul x-2 x-9)))
+    (y x-6) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (3 0)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)))
+  (ind-zero-in (x-6 (exp (gen) (mul x-2 x-9)))
+    (z (exp (gen) (mul x-2 x-9)))
+    (z-0 (exp (gen) (mul x-2 x-6 (rec x-8) x-9)))
+    (x-3 (exp (gen) (mul x-2 x-6 (rec x-8) x-9))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-1 x-2 x-3 x-6)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-0 (exp (gen) (mul (rec x-4) (rec x-5) x-9))))
+    (exp (gen) (mul x-2 x-9)) (3 0) (exp (gen) x-2))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) (mul x-0 (rec x-4) (rec x-5) x-7 x-9))
+          (exp (gen) (mul x-0 x-2 (rec x-4) (rec x-5) x-7 x-9))
+          (exp h2 (mul x x-1 (rec x-2))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-1)) (pubk b-0))))
+    ((recv (enc (exp (gen) (mul x-2 x-6 (rec x-8) x-9)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z-0) (exp (gen) (mul z-0 x-2 x-6 (rec x-8) x-9))
+          (exp (gen) x-3) b-1 (pubk a-1))))
+    ((recv (enc (exp (gen) (mul x-2 x-9)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-6) (exp (gen) (mul x-2 x-6 x-9)) (exp (gen) z)
+          b-2 (pubk a-2)))))
+  (label 29)
+  (parent 10)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 name) (h3 base)
+    (x z x-0 x-1 x-2 x-3 x-4 x-5 x-6 expn))
+  (defstrand init 3 (a a) (b b)
+    (h2 (exp (gen) (mul (rec x) x-0 (rec x-1) x-3 x-6))) (h3 h3)
+    (x x-1))
+  (defstrand init 3 (a a-0) (b b-0)
+    (h2 (exp (gen) (mul (rec x-2) x-4 x-5)))
+    (h3 (exp (gen) (mul x-3 x-6))) (x x-0))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp (gen) (mul x-0 x-5)))
+    (y x-3) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 0)) ((1 2) (0 1)) ((2 1) (1 1)))
+  (ind-zero-in (x-3 (exp (gen) (mul x-0 x-5)))
+    (z (exp (gen) (mul x-0 x-5))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-0 x-1 x-3)
+  (operation nonce-test
+    (algebra-contracted
+      (h2 (exp (gen) (mul (rec x) x-0 (rec x-1) x-3 x-6))))
+    (exp (gen) (mul x-3 x-6)) (1 1))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv
+        (enc (exp (gen) (mul (rec x) x-0 (rec x-1) x-3 x-6))
+          (exp (gen) (mul (rec x) x-0 x-3 x-6)) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) (mul (rec x-2) x-4 x-5))
+          (exp (gen) (mul x-0 (rec x-2) x-4 x-5))
+          (exp (gen) (mul x-3 x-6)) b-0 (pubk a-0)))
+      (send (enc (exp (gen) (mul x-0 x-3 x-6)) (pubk b-0))))
+    ((recv (enc (exp (gen) (mul x-0 x-5)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-3) (exp (gen) (mul x-0 x-3 x-5)) (exp (gen) z)
+          b-1 (pubk a-1)))))
+  (label 30)
+  (parent 11)
+  (seen 30)
+  (unrealized (0 1))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 name) (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-3))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul x-0 x-3 (rec x-4)))) (x x-4))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-0)
+    (h3 (exp h2 (mul x-0 x-1 (rec x-2) x-3 (rec x-4)))) (x x-2))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-2 x-5 (rec x-6)))) (x x-6))
+  (precedes ((0 0) (2 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 2) (2 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-2 x-3 x-4 x-6)
+  (operation nonce-test (added-strand init 3) (exp h2-0 x-2) (2 1)
+    (exp (gen) x-2))
+  (traces
+    ((send (enc (exp (gen) x-3) a (pubk b)))
+      (recv (enc h2 (exp h2 x-3) h3 b (pubk a)))
+      (send (enc (exp h3 x-3) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-4))
+          (exp h2 (mul x-0 x-3 (rec x-4))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x-0 x-3)) (pubk b-0))))
+    ((send (enc (exp (gen) x-2) a-1 (pubk b-1)))
+      (recv
+        (enc h2-0 (exp h2-0 x-2)
+          (exp h2 (mul x-0 x-1 (rec x-2) x-3 (rec x-4))) b-1
+          (pubk a-1)))
+      (send (enc (exp h2 (mul x-0 x-1 x-3 (rec x-4))) (pubk b-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc h2-1 (exp h2-1 x-6) (exp h2-0 (mul x-2 x-5 (rec x-6))) b-2
+          (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-2 x-5)) (pubk b-2)))))
+  (label 31)
+  (parent 12)
+  (unrealized (2 1) (3 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-3))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul x-0 x-3 (rec x-4)))) (x x-4))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-0 x-7))
+    (h3 (exp h2 (mul x-0 x-1 (rec x-2) x-3 (rec x-4)))) (x x-2))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-0 (mul x-2 x-5)))
+    (y x-6) (z z))
+  (precedes ((0 0) (2 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 0))
+    ((2 2) (1 1)) ((3 1) (2 1)))
+  (ind-zero-in (x-6 (exp h2-0 (mul x-2 x-5)))
+    (z (exp h2-0 (mul x-2 x-5))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-6)
+  (operation nonce-test (added-strand resp 2) (exp h2-0 (mul x-2 x-7))
+    (2 1) (exp (gen) x-2))
+  (traces
+    ((send (enc (exp (gen) x-3) a (pubk b)))
+      (recv (enc h2 (exp h2 x-3) h3 b (pubk a)))
+      (send (enc (exp h3 x-3) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-4))
+          (exp h2 (mul x-0 x-3 (rec x-4))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x-0 x-3)) (pubk b-0))))
+    ((send (enc (exp (gen) x-2) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-0 x-7) (exp h2-0 (mul x-2 x-7))
+          (exp h2 (mul x-0 x-1 (rec x-2) x-3 (rec x-4))) b-1
+          (pubk a-1)))
+      (send (enc (exp h2 (mul x-0 x-1 x-3 (rec x-4))) (pubk b-1))))
+    ((recv (enc (exp h2-0 (mul x-2 x-5)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-6) (exp h2-0 (mul x-2 x-5 x-6)) (exp (gen) z)
+          b-2 (pubk a-2)))))
+  (label 32)
+  (parent 12)
+  (unrealized (2 1) (3 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 name) (h2 h3 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul (rec x-0) x-1 x-2))) (x x-0))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-5))
+    (h3 (exp h2 (mul (rec x-0) x-1 x-2 x-3 (rec x-4)))) (x x-4))
+  (precedes ((0 0) (2 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 2) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-0 x-1 x-4)
+  (operation nonce-test (algebra-contracted (h2-0 (exp (gen) x-5)))
+    (exp (gen) (mul x-4 x-5)) (2 1) (exp (gen) x-4))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-0))
+          (exp h2 (mul (rec x-0) x-1 x-2)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x-1 x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-5) (exp (gen) (mul x-4 x-5))
+          (exp h2 (mul (rec x-0) x-1 x-2 x-3 (rec x-4))) b-1
+          (pubk a-1)))
+      (send (enc (exp h2 (mul (rec x-0) x-1 x-2 x-3)) (pubk b-1)))))
+  (label 33)
+  (parent 12)
+  (unrealized (2 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp h2 x-0)) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul (rec x-1) z x-2 (rec x-3) x-5 x-6))) (x x-3))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2 (mul x-2 (rec x-3) x-5 x-6))) (y z) (z x-4))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-0)
+    (h3 (exp h2 (mul x-2 (rec x-3) x-5 x-6 (rec x-7) (rec x-8))))
+    (x x-8))
+  (precedes ((0 0) (3 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 2) (2 0)))
+  (ind-zero-in (z (exp h2 (mul x-2 (rec x-3) x-5 x-6)))
+    (x-4 (exp h2 (mul x-2 (rec x-3) x-5 x-6))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-8)
+  (operation nonce-test (added-strand init 3)
+    (exp h2 (mul x-2 (rec x-3) x-5 x-6)) (2 0))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc (exp h2 x-0) (exp h2 (mul x-0 x-2)) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-3))
+          (exp h2 (mul (rec x-1) z x-2 (rec x-3) x-5 x-6)) b-0
+          (pubk a-0)))
+      (send (enc (exp h2 (mul (rec x-1) z x-2 x-5 x-6)) (pubk b-0))))
+    ((recv (enc (exp h2 (mul x-2 (rec x-3) x-5 x-6)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z) (exp h2 (mul z x-2 (rec x-3) x-5 x-6))
+          (exp (gen) x-4) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) x-8) a-2 (pubk b-2)))
+      (recv
+        (enc h2-0 (exp h2-0 x-8)
+          (exp h2 (mul x-2 (rec x-3) x-5 x-6 (rec x-7) (rec x-8))) b-2
+          (pubk a-2)))
+      (send
+        (enc (exp h2 (mul x-2 (rec x-3) x-5 x-6 (rec x-7)))
+          (pubk b-2)))))
+  (label 34)
+  (parent 13)
+  (unrealized (0 1) (3 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 name) (h2 h3 base)
+    (x x-0 x-1 z z-0 x-2 y x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp h2 (mul x-0 x-8))) (h3 h3)
+    (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3
+      (exp h2
+        (mul (rec x-1) z-0 x-2 (rec y) x-4 x-5 (rec x-6) x-7 x-9)))
+    (x y))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2 (mul x-2 (rec y) x-4 x-5 (rec x-6) x-7 x-9))) (y z-0)
+    (z x-3))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2 (mul x-2 (rec y) x-4 x-5 (rec x-6)))) (y x-7) (z z))
+  (precedes ((0 0) (3 0)) ((1 0) (3 0)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)))
+  (ind-zero-in (x-7 (exp h2 (mul x-2 (rec y) x-4 x-5 (rec x-6))))
+    (z (exp h2 (mul x-2 (rec y) x-4 x-5 (rec x-6))))
+    (z-0 (exp h2 (mul x-2 (rec y) x-4 x-5 (rec x-6) x-7 x-9)))
+    (x-3 (exp h2 (mul x-2 (rec y) x-4 x-5 (rec x-6) x-7 x-9))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-2 y x-3 x-7)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2 (mul x-2 (rec y) x-4 x-5 (rec x-6) x-7 x-9)) (2 0))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv
+        (enc (exp h2 (mul x-0 x-8)) (exp h2 (mul x-0 x-2 x-8)) h3 b
+          (pubk a))) (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) y) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x y))
+          (exp h2
+            (mul (rec x-1) z-0 x-2 (rec y) x-4 x-5 (rec x-6) x-7 x-9))
+          b-0 (pubk a-0)))
+      (send
+        (enc (exp h2 (mul (rec x-1) z-0 x-2 x-4 x-5 (rec x-6) x-7 x-9))
+          (pubk b-0))))
+    ((recv
+       (enc (exp h2 (mul x-2 (rec y) x-4 x-5 (rec x-6) x-7 x-9)) a-1
+         (pubk b-1)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2 (mul z-0 x-2 (rec y) x-4 x-5 (rec x-6) x-7 x-9))
+          (exp (gen) x-3) b-1 (pubk a-1))))
+    ((recv
+       (enc (exp h2 (mul x-2 (rec y) x-4 x-5 (rec x-6))) a-2
+         (pubk b-2)))
+      (send
+        (enc (exp (gen) x-7)
+          (exp h2 (mul x-2 (rec y) x-4 x-5 (rec x-6) x-7)) (exp (gen) z)
+          b-2 (pubk a-2)))))
+  (label 35)
+  (parent 13)
+  (unrealized (0 1) (3 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 name) (h3 base)
+    (x z x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 expn))
+  (defstrand init 3 (a a) (b b)
+    (h2 (exp (gen) (mul x-0 x-0 (rec x-1) (rec x-2) (rec x-3) x-5 x-7)))
+    (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp (gen) (mul x-0 x-4 (rec x-6) x-7))) (x x-0))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp (gen) (mul x-0 x-7)))
+    (y x-4) (z z))
+  (precedes ((0 0) (2 0)) ((1 0) (2 0)) ((1 2) (0 1)) ((2 1) (1 1)))
+  (ind-zero-in (x-4 (exp (gen) (mul x-0 x-7)))
+    (z (exp (gen) (mul x-0 x-7))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-0 x-1 x-4)
+  (operation nonce-test
+    (algebra-contracted
+      (h2 (exp (gen) (mul x-0 x-0 (rec x-1) (rec x-2) (rec x-3) x-7))))
+    (exp (gen) (mul x-0 x-7)) (2 0))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv
+        (enc
+          (exp (gen)
+            (mul x-0 x-0 (rec x-1) (rec x-2) (rec x-3) x-5 x-7))
+          (exp (gen) (mul x-0 x-0 (rec x-2) (rec x-3) x-5 x-7)) h3 b
+          (pubk a))) (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-0))
+          (exp (gen) (mul x-0 x-4 (rec x-6) x-7)) b-0 (pubk a-0)))
+      (send
+        (enc (exp (gen) (mul x-0 x-0 x-4 (rec x-6) x-7)) (pubk b-0))))
+    ((recv (enc (exp (gen) (mul x-0 x-7)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-4) (exp (gen) (mul x-0 x-4 x-7)) (exp (gen) z)
+          b-1 (pubk a-1)))))
+  (label 36)
+  (parent 13)
+  (seen 36)
+  (unrealized (0 1))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 h2-4 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-4) x-6))) (x x-4))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 x-4 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-3)
+    (h3 (exp h2-2 (mul x-2 (rec x-3) x-7))) (x x-3))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-4)
+    (h3 (exp h2-3 (mul x-3 x-8 (rec x-9)))) (x x-9))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 0) (5 1))
+    ((4 2) (3 1)) ((5 2) (4 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-3 x-4 x-5 x-6 x-7 x-9)
+  (operation nonce-test (added-strand init 3) (exp h2-3 x-3) (4 1)
+    (exp (gen) x-3))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x x-5 (rec x-6))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-4) (exp h2-0 (mul x-0 (rec x-4) x-6)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) x-7) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-7) (exp h2-1 (mul x-1 x-4 (rec x-7))) b-2
+          (pubk a-2))) (send (enc (exp h2-1 (mul x-1 x-4)) (pubk b-2))))
+    ((send (enc (exp (gen) x-3) a-3 (pubk b-3)))
+      (recv
+        (enc h2-3 (exp h2-3 x-3) (exp h2-2 (mul x-2 (rec x-3) x-7)) b-3
+          (pubk a-3))) (send (enc (exp h2-2 (mul x-2 x-7)) (pubk b-3))))
+    ((send (enc (exp (gen) x-9) a-4 (pubk b-4)))
+      (recv
+        (enc h2-4 (exp h2-4 x-9) (exp h2-3 (mul x-3 x-8 (rec x-9))) b-4
+          (pubk a-4)))
+      (send (enc (exp h2-3 (mul x-3 x-8)) (pubk b-4)))))
+  (label 37)
+  (parent 15)
+  (unrealized (1 1) (2 1) (3 1) (4 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 base)
+    (x x-0 x-1 x-2 z x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-4) x-6))) (x x-4))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 x-4 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp h2-3 x-10))
+    (h3 (exp h2-2 (mul x-2 (rec x-3) x-7))) (x x-3))
+  (defstrand resp 2 (b b-4) (a a-4) (h1 (exp h2-3 (mul x-3 x-8)))
+    (y x-9) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 0) (5 0))
+    ((4 2) (3 1)) ((5 1) (4 1)))
+  (ind-zero-in (x-9 (exp h2-3 (mul x-3 x-8)))
+    (z (exp h2-3 (mul x-3 x-8))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-3 x-4 x-5 x-6 x-7 x-9)
+  (operation nonce-test (added-strand resp 2) (exp h2-3 (mul x-3 x-10))
+    (4 1) (exp (gen) x-3))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x x-5 (rec x-6))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-4) (exp h2-0 (mul x-0 (rec x-4) x-6)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) x-7) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-7) (exp h2-1 (mul x-1 x-4 (rec x-7))) b-2
+          (pubk a-2))) (send (enc (exp h2-1 (mul x-1 x-4)) (pubk b-2))))
+    ((send (enc (exp (gen) x-3) a-3 (pubk b-3)))
+      (recv
+        (enc (exp h2-3 x-10) (exp h2-3 (mul x-3 x-10))
+          (exp h2-2 (mul x-2 (rec x-3) x-7)) b-3 (pubk a-3)))
+      (send (enc (exp h2-2 (mul x-2 x-7)) (pubk b-3))))
+    ((recv (enc (exp h2-3 (mul x-3 x-8)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) x-9) (exp h2-3 (mul x-3 x-8 x-9)) (exp (gen) z)
+          b-4 (pubk a-4)))))
+  (label 38)
+  (parent 15)
+  (unrealized (1 1) (2 1) (3 1) (4 1) (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-3 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 (rec x-2) x-5))) (x x-2))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp (gen) x-8))
+    (h3 (exp h2-2 (mul x-2 x-6 (rec x-7)))) (x x-7))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 2) (3 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-2 x-3 x-4 x-5 x-7)
+  (operation nonce-test (algebra-contracted (h2-3 (exp (gen) x-8)))
+    (exp (gen) (mul x-7 x-8)) (4 1) (exp (gen) x-7))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x (rec x-3) x-4)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-5) (exp h2-0 (mul x-0 x-3 (rec x-5))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-2) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-2) (exp h2-1 (mul x-1 (rec x-2) x-5)) b-2
+          (pubk a-2))) (send (enc (exp h2-1 (mul x-1 x-5)) (pubk b-2))))
+    ((send (enc (exp (gen) x-7) a-3 (pubk b-3)))
+      (recv
+        (enc (exp (gen) x-8) (exp (gen) (mul x-7 x-8))
+          (exp h2-2 (mul x-2 x-6 (rec x-7))) b-3 (pubk a-3)))
+      (send (enc (exp h2-2 (mul x-2 x-6)) (pubk b-3)))))
+  (label 39)
+  (parent 15)
+  (unrealized (1 1) (2 1) (3 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 base)
+    (x x-0 x-1 x-2 z x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-4 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-3) x-5))) (x x-3))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-2 x-2))
+    (h3 (exp h2-1 (mul x-1 x-3 (rec x-6)))) (x x-6))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-2 (mul x-6 x-8))) (y z)
+    (z x-7))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-3)
+    (h3 (exp h2-2 (mul x-6 x-8 x-9 (rec x-10)))) (x x-10))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (5 1)) ((3 2) (2 1)) ((4 1) (3 1))
+    ((5 2) (4 0)))
+  (ind-zero-in (z (exp h2-2 (mul x-6 x-8)))
+    (x-7 (exp h2-2 (mul x-6 x-8))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-3 x-4 x-5 x-6 x-7 x-10)
+  (operation nonce-test (added-strand init 3) (exp h2-2 (mul x-6 x-8))
+    (4 0) (exp (gen) x-6))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-5) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-5) (exp h2 (mul x x-4 (rec x-5))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-3) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-3) (exp h2-0 (mul x-0 (rec x-3) x-5)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-5)) (pubk b-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-2 x-2) (exp h2-2 (mul x-2 x-6))
+          (exp h2-1 (mul x-1 x-3 (rec x-6))) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-3)) (pubk b-2))))
+    ((recv (enc (exp h2-2 (mul x-6 x-8)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) z) (exp h2-2 (mul z x-6 x-8)) (exp (gen) x-7)
+          b-3 (pubk a-3))))
+    ((send (enc (exp (gen) x-10) a-4 (pubk b-4)))
+      (recv
+        (enc h2-3 (exp h2-3 x-10)
+          (exp h2-2 (mul x-6 x-8 x-9 (rec x-10))) b-4 (pubk a-4)))
+      (send (enc (exp h2-2 (mul x-6 x-8 x-9)) (pubk b-4)))))
+  (label 40)
+  (parent 16)
+  (unrealized (1 1) (2 1) (3 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 z z-0 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12
+      expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-4 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-3) x-5))) (x x-3))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-2 (mul x-2 x-11)))
+    (h3 (exp h2-1 (mul x-1 x-3 (rec x-6)))) (x x-6))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-2 (mul x-6 x-8 x-9 x-10 (rec x-12)))) (y z-0) (z x-7))
+  (defstrand resp 2 (b b-4) (a a-4) (h1 (exp h2-2 (mul x-6 x-8 x-9)))
+    (y x-10) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (5 0)) ((3 2) (2 1)) ((4 1) (3 1))
+    ((5 1) (4 0)))
+  (ind-zero-in (x-10 (exp h2-2 (mul x-6 x-8 x-9)))
+    (z (exp h2-2 (mul x-6 x-8 x-9)))
+    (z-0 (exp h2-2 (mul x-6 x-8 x-9 x-10 (rec x-12))))
+    (x-7 (exp h2-2 (mul x-6 x-8 x-9 x-10 (rec x-12)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-3 x-4 x-5 x-6 x-7 x-10)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-2 (mul x-6 x-8 x-9 x-10 (rec x-12))) (4 0) (exp (gen) x-6))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-5) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-5) (exp h2 (mul x x-4 (rec x-5))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-3) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-3) (exp h2-0 (mul x-0 (rec x-3) x-5)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-5)) (pubk b-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-2 (mul x-2 x-11)) (exp h2-2 (mul x-2 x-6 x-11))
+          (exp h2-1 (mul x-1 x-3 (rec x-6))) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-3)) (pubk b-2))))
+    ((recv
+       (enc (exp h2-2 (mul x-6 x-8 x-9 x-10 (rec x-12))) a-3
+         (pubk b-3)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-2 (mul z-0 x-6 x-8 x-9 x-10 (rec x-12)))
+          (exp (gen) x-7) b-3 (pubk a-3))))
+    ((recv (enc (exp h2-2 (mul x-6 x-8 x-9)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) x-10) (exp h2-2 (mul x-6 x-8 x-9 x-10))
+          (exp (gen) z) b-4 (pubk a-4)))))
+  (label 41)
+  (parent 16)
+  (unrealized (1 1) (2 1) (3 1) (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-3 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2)
+    (h2 (exp (gen) (mul (rec x-6) x-8 x-9)))
+    (h3 (exp h2-1 (mul x-1 (rec x-2) x-5))) (x x-2))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp (gen) (mul x-2 x-9)))
+    (y x-7) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 0)) ((3 2) (2 1)) ((4 1) (3 1)))
+  (ind-zero-in (x-7 (exp (gen) (mul x-2 x-9)))
+    (z (exp (gen) (mul x-2 x-9))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-5 x-7)
+  (operation nonce-test
+    (algebra-contracted (h2-2 (exp (gen) (mul (rec x-6) x-9))))
+    (exp (gen) (mul x-2 x-9)) (4 0) (exp (gen) x-2))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x (rec x-3) x-4)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-5) (exp h2-0 (mul x-0 x-3 (rec x-5))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-2) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) (mul (rec x-6) x-8 x-9))
+          (exp (gen) (mul x-2 (rec x-6) x-8 x-9))
+          (exp h2-1 (mul x-1 (rec x-2) x-5)) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-5)) (pubk b-2))))
+    ((recv (enc (exp (gen) (mul x-2 x-9)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-7) (exp (gen) (mul x-2 x-7 x-9)) (exp (gen) z)
+          b-3 (pubk a-3)))))
+  (label 42)
+  (parent 16)
+  (unrealized (1 1) (2 1) (3 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-3 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-1))
+    (h3 (exp h2-1 (mul (rec x-2) x-5 x-6))) (x x-2))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-2)
+    (h3 (exp h2-1 (mul (rec x-2) x-5 x-6 x-7 (rec x-8)))) (x x-8))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 2) (3 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-2 x-3 x-4 x-5 x-8)
+  (operation nonce-test (added-strand init 3)
+    (exp h2-1 (mul (rec x-2) x-5 x-6)) (3 1))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x (rec x-3) x-4)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-5) (exp h2-0 (mul x-0 x-3 (rec x-5))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-2) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-1) (exp (gen) (mul x-1 x-2))
+          (exp h2-1 (mul (rec x-2) x-5 x-6)) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-5 x-6)) (pubk b-2))))
+    ((send (enc (exp (gen) x-8) a-3 (pubk b-3)))
+      (recv
+        (enc h2-2 (exp h2-2 x-8)
+          (exp h2-1 (mul (rec x-2) x-5 x-6 x-7 (rec x-8))) b-3
+          (pubk a-3)))
+      (send (enc (exp h2-1 (mul (rec x-2) x-5 x-6 x-7)) (pubk b-3)))))
+  (label 43)
+  (parent 17)
+  (unrealized (1 1) (2 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 x-9))
+    (h3 (exp h2-0 (mul x-0 x-3 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-1))
+    (h3 (exp h2-1 (mul (rec x-2) x-5 x-6 x-7 x-8 (rec x-10)))) (x x-2))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-1 (mul (rec x-2) x-5 x-6 x-7))) (y x-8) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 0))
+    ((2 2) (1 1)) ((3 0) (4 0)) ((3 2) (2 1)) ((4 1) (3 1)))
+  (ind-zero-in (x-8 (exp h2-1 (mul (rec x-2) x-5 x-6 x-7)))
+    (z (exp h2-1 (mul (rec x-2) x-5 x-6 x-7))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-5 x-8)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-1 (mul (rec x-2) x-5 x-6 x-7 x-8 (rec x-10))) (3 1))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x (rec x-3) x-4)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 x-9) (exp h2-1 (mul x-5 x-9))
+          (exp h2-0 (mul x-0 x-3 (rec x-5))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-2) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-1) (exp (gen) (mul x-1 x-2))
+          (exp h2-1 (mul (rec x-2) x-5 x-6 x-7 x-8 (rec x-10))) b-2
+          (pubk a-2)))
+      (send
+        (enc (exp h2-1 (mul x-5 x-6 x-7 x-8 (rec x-10))) (pubk b-2))))
+    ((recv (enc (exp h2-1 (mul (rec x-2) x-5 x-6 x-7)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-8) (exp h2-1 (mul (rec x-2) x-5 x-6 x-7 x-8))
+          (exp (gen) z) b-3 (pubk a-3)))))
+  (label 44)
+  (parent 17)
+  (unrealized (1 1) (2 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-2 (rec x-3)))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1)
+    (h2 (exp (gen) (mul (rec x-1) (rec x-4) x-5 x-5 x-7)))
+    (h3 (exp h2-0 (mul x-0 (rec x-1) x-3))) (x x-1))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-6))
+    (h3 (exp (gen) (mul x-5 x-7))) (x x-5))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 2) (2 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-1 x-2 x-3 x-5)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-1 (exp (gen) (mul (rec x-1) (rec x-4) x-5 x-5 x-7))))
+    (exp (gen) (mul x-5 x-7)) (3 1))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc h2 (exp h2 x-2) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x x-2 (rec x-3))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) (mul (rec x-1) (rec x-4) x-5 x-5 x-7))
+          (exp (gen) (mul (rec x-4) x-5 x-5 x-7))
+          (exp h2-0 (mul x-0 (rec x-1) x-3)) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-5) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-6) (exp (gen) (mul x-5 x-6))
+          (exp (gen) (mul x-5 x-7)) b-2 (pubk a-2)))
+      (send (enc (exp (gen) (mul x-5 x-5 x-7)) (pubk b-2)))))
+  (label 45)
+  (parent 17)
+  (unrealized (1 1) (2 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 a-3 b-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 base)
+    (x x-0 x-1 x-2 x-3 z x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-6))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-6 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 x-1))
+    (h3 (exp h2-0 (mul x-0 (rec x-5) x-7))) (x x-5))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-1 (mul x-2 x-5)))
+    (y x-8) (z x-4))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-2 x-3 (rec z) x-5))) (x z))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-3)
+    (h3 (exp h2-2 (mul z x-9 (rec x-10)))) (x x-10))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 1))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 0) (5 1)) ((4 2) (3 0))
+    ((5 2) (4 1)))
+  (ind-zero-in (x-8 (exp h2-1 (mul x-2 x-5)))
+    (x-4 (exp h2-1 (mul x-2 x-5))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-4 x-5 x-6 x-7 x-8 x-10)
+  (operation nonce-test (added-strand init 3) (exp h2-2 z) (4 1)
+    (exp (gen) z))
+  (traces
+    ((send (enc (exp (gen) x-6) a (pubk b)))
+      (recv (enc h2 (exp h2 x-6) h3 b (pubk a)))
+      (send (enc (exp h3 x-6) (pubk b))))
+    ((send (enc (exp (gen) x-7) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-7) (exp h2 (mul x x-6 (rec x-7))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-6)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 x-1) (exp h2-1 (mul x-1 x-5))
+          (exp h2-0 (mul x-0 (rec x-5) x-7)) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-7)) (pubk b-1))))
+    ((recv (enc (exp h2-1 (mul x-2 x-5)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-8) (exp h2-1 (mul x-2 x-5 x-8))
+          (exp (gen) x-4) b-2 (pubk a-2))))
+    ((send (enc (exp (gen) z) a-3 (pubk b-3)))
+      (recv
+        (enc h2-2 (exp h2-2 z) (exp h2-1 (mul x-2 x-3 (rec z) x-5)) b-3
+          (pubk a-3)))
+      (send (enc (exp h2-1 (mul x-2 x-3 x-5)) (pubk b-3))))
+    ((send (enc (exp (gen) x-10) a-4 (pubk b-4)))
+      (recv
+        (enc h2-3 (exp h2-3 x-10) (exp h2-2 (mul z x-9 (rec x-10))) b-4
+          (pubk a-4))) (send (enc (exp h2-2 (mul z x-9)) (pubk b-4)))))
+  (label 46)
+  (parent 18)
+  (unrealized (1 1) (2 1) (4 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 a-3 b-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 z z-0 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-6))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-6 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 x-1))
+    (h3 (exp h2-0 (mul x-0 (rec x-5) x-7))) (x x-5))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-1 (mul x-2 x-5)))
+    (y x-8) (z x-4))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp h2-2 x-11))
+    (h3 (exp h2-1 (mul x-2 x-3 (rec z-0) x-5))) (x z-0))
+  (defstrand resp 2 (b b-4) (a a-4) (h1 (exp h2-2 (mul z-0 x-9)))
+    (y x-10) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 1))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 0) (5 0)) ((4 2) (3 0))
+    ((5 1) (4 1)))
+  (ind-zero-in (x-10 (exp h2-2 (mul z-0 x-9)))
+    (z (exp h2-2 (mul z-0 x-9))) (x-8 (exp h2-1 (mul x-2 x-5)))
+    (x-4 (exp h2-1 (mul x-2 x-5))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-4 x-5 x-6 x-7 x-8 x-10)
+  (operation nonce-test (added-strand resp 2) (exp h2-2 (mul z-0 x-11))
+    (4 1) (exp (gen) z-0))
+  (traces
+    ((send (enc (exp (gen) x-6) a (pubk b)))
+      (recv (enc h2 (exp h2 x-6) h3 b (pubk a)))
+      (send (enc (exp h3 x-6) (pubk b))))
+    ((send (enc (exp (gen) x-7) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-7) (exp h2 (mul x x-6 (rec x-7))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-6)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 x-1) (exp h2-1 (mul x-1 x-5))
+          (exp h2-0 (mul x-0 (rec x-5) x-7)) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-7)) (pubk b-1))))
+    ((recv (enc (exp h2-1 (mul x-2 x-5)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-8) (exp h2-1 (mul x-2 x-5 x-8))
+          (exp (gen) x-4) b-2 (pubk a-2))))
+    ((send (enc (exp (gen) z-0) a-3 (pubk b-3)))
+      (recv
+        (enc (exp h2-2 x-11) (exp h2-2 (mul z-0 x-11))
+          (exp h2-1 (mul x-2 x-3 (rec z-0) x-5)) b-3 (pubk a-3)))
+      (send (enc (exp h2-1 (mul x-2 x-3 x-5)) (pubk b-3))))
+    ((recv (enc (exp h2-2 (mul z-0 x-9)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) x-10) (exp h2-2 (mul z-0 x-9 x-10))
+          (exp (gen) z) b-4 (pubk a-4)))))
+  (label 47)
+  (parent 18)
+  (unrealized (1 1) (2 1) (4 1) (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-3))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-2) x-3))) (x x-2))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 x-1))
+    (h3 (exp h2-0 (mul x-0 x-2 (rec x-4)))) (x x-4))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-1 (mul x-4 x-6))) (y z)
+    (z x-5))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp (gen) x-9))
+    (h3 (exp h2-1 (mul x-4 x-6 x-7 (rec x-8)))) (x x-8))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 1))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 2) (3 0)))
+  (ind-zero-in (z (exp h2-1 (mul x-4 x-6)))
+    (x-5 (exp h2-1 (mul x-4 x-6))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-5 x-8)
+  (operation nonce-test (algebra-contracted (h2-2 (exp (gen) x-9)))
+    (exp (gen) (mul x-8 x-9)) (4 1) (exp (gen) x-8))
+  (traces
+    ((send (enc (exp (gen) x-3) a (pubk b)))
+      (recv (enc h2 (exp h2 x-3) h3 b (pubk a)))
+      (send (enc (exp h3 x-3) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-2) (exp h2 (mul x (rec x-2) x-3)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-3)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 x-1) (exp h2-1 (mul x-1 x-4))
+          (exp h2-0 (mul x-0 x-2 (rec x-4))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-2)) (pubk b-1))))
+    ((recv (enc (exp h2-1 (mul x-4 x-6)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) z) (exp h2-1 (mul z x-4 x-6)) (exp (gen) x-5)
+          b-2 (pubk a-2))))
+    ((send (enc (exp (gen) x-8) a-3 (pubk b-3)))
+      (recv
+        (enc (exp (gen) x-9) (exp (gen) (mul x-8 x-9))
+          (exp h2-1 (mul x-4 x-6 x-7 (rec x-8))) b-3 (pubk a-3)))
+      (send (enc (exp h2-1 (mul x-4 x-6 x-7)) (pubk b-3)))))
+  (label 48)
+  (parent 18)
+  (unrealized (1 1) (2 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 b-3 a-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 z z-0 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12
+      expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 (mul x-1 x-2)))
+    (h3 (exp h2-0 (mul x-0 (rec x-4) x-6))) (x x-4))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2-1 (mul (rec x-3) z x-4 x-9 x-10))) (y x-7) (z z-0))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-1 (mul x-4 x-9 x-10)))
+    (y z) (z x-8))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-4 x-9 x-10 x-11 (rec x-12)))) (x x-12))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (5 1))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 1) (3 0)) ((5 2) (4 0)))
+  (ind-zero-in (z (exp h2-1 (mul x-4 x-9 x-10)))
+    (x-8 (exp h2-1 (mul x-4 x-9 x-10)))
+    (x-7 (exp h2-1 (mul (rec x-3) z x-4 x-9 x-10)))
+    (z-0 (exp h2-1 (mul (rec x-3) z x-4 x-9 x-10))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-4 x-5 x-6 x-7 x-8 x-12)
+  (operation nonce-test (added-strand init 3)
+    (exp h2-1 (mul x-4 x-9 x-10)) (4 0) (exp (gen) x-4))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x x-5 (rec x-6))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 (mul x-1 x-2)) (exp h2-1 (mul x-1 x-2 x-4))
+          (exp h2-0 (mul x-0 (rec x-4) x-6)) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((recv
+       (enc (exp h2-1 (mul (rec x-3) z x-4 x-9 x-10)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-7)
+          (exp h2-1 (mul (rec x-3) z x-4 x-7 x-9 x-10)) (exp (gen) z-0)
+          b-2 (pubk a-2))))
+    ((recv (enc (exp h2-1 (mul x-4 x-9 x-10)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) z) (exp h2-1 (mul z x-4 x-9 x-10))
+          (exp (gen) x-8) b-3 (pubk a-3))))
+    ((send (enc (exp (gen) x-12) a-4 (pubk b-4)))
+      (recv
+        (enc h2-2 (exp h2-2 x-12)
+          (exp h2-1 (mul x-4 x-9 x-10 x-11 (rec x-12))) b-4 (pubk a-4)))
+      (send (enc (exp h2-1 (mul x-4 x-9 x-10 x-11)) (pubk b-4)))))
+  (label 49)
+  (parent 19)
+  (unrealized (1 1) (2 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 b-3 a-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 z z-0 z-1 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12
+      x-13 x-14 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 (mul x-1 x-2 x-13)))
+    (h3 (exp h2-0 (mul x-0 (rec x-4) x-6))) (x x-4))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1
+      (exp h2-1 (mul (rec x-3) z-0 x-4 x-9 x-10 x-11 x-12 (rec x-14))))
+    (y x-7) (z z-1))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-1 (mul x-4 x-9 x-10 x-11 x-12 (rec x-14)))) (y z-0)
+    (z x-8))
+  (defstrand resp 2 (b b-4) (a a-4)
+    (h1 (exp h2-1 (mul x-4 x-9 x-10 x-11))) (y x-12) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (5 0))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 1) (3 0)) ((5 1) (4 0)))
+  (ind-zero-in (x-12 (exp h2-1 (mul x-4 x-9 x-10 x-11)))
+    (z (exp h2-1 (mul x-4 x-9 x-10 x-11)))
+    (z-0 (exp h2-1 (mul x-4 x-9 x-10 x-11 x-12 (rec x-14))))
+    (x-8 (exp h2-1 (mul x-4 x-9 x-10 x-11 x-12 (rec x-14))))
+    (x-7
+      (exp h2-1 (mul (rec x-3) z-0 x-4 x-9 x-10 x-11 x-12 (rec x-14))))
+    (z-1
+      (exp h2-1 (mul (rec x-3) z-0 x-4 x-9 x-10 x-11 x-12 (rec x-14)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 z-1 x-4 x-5 x-6 x-7 x-8 x-12)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-1 (mul x-4 x-9 x-10 x-11 x-12 (rec x-14))) (4 0)
+    (exp (gen) x-4))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x x-5 (rec x-6))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 (mul x-1 x-2 x-13))
+          (exp h2-1 (mul x-1 x-2 x-4 x-13))
+          (exp h2-0 (mul x-0 (rec x-4) x-6)) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((recv
+       (enc
+         (exp h2-1
+           (mul (rec x-3) z-0 x-4 x-9 x-10 x-11 x-12 (rec x-14))) a-2
+         (pubk b-2)))
+      (send
+        (enc (exp (gen) x-7)
+          (exp h2-1
+            (mul (rec x-3) z-0 x-4 x-7 x-9 x-10 x-11 x-12 (rec x-14)))
+          (exp (gen) z-1) b-2 (pubk a-2))))
+    ((recv
+       (enc (exp h2-1 (mul x-4 x-9 x-10 x-11 x-12 (rec x-14))) a-3
+         (pubk b-3)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-1 (mul z-0 x-4 x-9 x-10 x-11 x-12 (rec x-14)))
+          (exp (gen) x-8) b-3 (pubk a-3))))
+    ((recv (enc (exp h2-1 (mul x-4 x-9 x-10 x-11)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) x-12) (exp h2-1 (mul x-4 x-9 x-10 x-11 x-12))
+          (exp (gen) z) b-4 (pubk a-4)))))
+  (label 50)
+  (parent 19)
+  (unrealized (1 1) (2 1) (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 b-3 a-3 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 z z-0 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-3))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-2) x-3))) (x x-2))
+  (defstrand init 3 (a a-1) (b b-1)
+    (h2 (exp (gen) (mul x-1 (rec x-6) (rec x-7) x-9 x-11)))
+    (h3 (exp h2-0 (mul x-0 x-2 (rec x-4)))) (x x-4))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp (gen) (mul x-4 x-8 (rec x-10) x-11))) (y z-0) (z x-5))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp (gen) (mul x-4 x-11)))
+    (y x-8) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 0))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 1) (3 0)))
+  (ind-zero-in (x-8 (exp (gen) (mul x-4 x-11)))
+    (z (exp (gen) (mul x-4 x-11)))
+    (z-0 (exp (gen) (mul x-4 x-8 (rec x-10) x-11)))
+    (x-5 (exp (gen) (mul x-4 x-8 (rec x-10) x-11))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-2 x-3 x-4 x-5 x-8)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-1 (exp (gen) (mul (rec x-6) (rec x-7) x-11))))
+    (exp (gen) (mul x-4 x-11)) (4 0) (exp (gen) x-4))
+  (traces
+    ((send (enc (exp (gen) x-3) a (pubk b)))
+      (recv (enc h2 (exp h2 x-3) h3 b (pubk a)))
+      (send (enc (exp h3 x-3) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-2) (exp h2 (mul x (rec x-2) x-3)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-3)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) (mul x-1 (rec x-6) (rec x-7) x-9 x-11))
+          (exp (gen) (mul x-1 x-4 (rec x-6) (rec x-7) x-9 x-11))
+          (exp h2-0 (mul x-0 x-2 (rec x-4))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-2)) (pubk b-1))))
+    ((recv
+       (enc (exp (gen) (mul x-4 x-8 (rec x-10) x-11)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp (gen) (mul z-0 x-4 x-8 (rec x-10) x-11)) (exp (gen) x-5)
+          b-2 (pubk a-2))))
+    ((recv (enc (exp (gen) (mul x-4 x-11)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-8) (exp (gen) (mul x-4 x-8 x-11))
+          (exp (gen) z) b-3 (pubk a-3)))))
+  (label 51)
+  (parent 19)
+  (unrealized (1 1) (2 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 name) (h2 h3 base)
+    (x x-0 z x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0)
+    (h2 (exp (gen) (mul (rec x-0) x-1 (rec x-3) x-5 x-8)))
+    (h3 (exp h2 (mul x x-2 (rec x-3)))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1)
+    (h2 (exp (gen) (mul (rec x-4) x-6 x-7)))
+    (h3 (exp (gen) (mul x-5 x-8))) (x x-1))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp (gen) (mul x-1 x-7)))
+    (y x-5) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 0))
+    ((2 2) (1 1)) ((3 1) (2 1)))
+  (ind-zero-in (x-5 (exp (gen) (mul x-1 x-7)))
+    (z (exp (gen) (mul x-1 x-7))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-1 x-2 x-3 x-5)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-0 (exp (gen) (mul (rec x-0) x-1 (rec x-3) x-5 x-8))))
+    (exp (gen) (mul x-5 x-8)) (2 1))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc h2 (exp h2 x-2) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) (mul (rec x-0) x-1 (rec x-3) x-5 x-8))
+          (exp (gen) (mul (rec x-0) x-1 x-5 x-8))
+          (exp h2 (mul x x-2 (rec x-3))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) (mul (rec x-4) x-6 x-7))
+          (exp (gen) (mul x-1 (rec x-4) x-6 x-7))
+          (exp (gen) (mul x-5 x-8)) b-1 (pubk a-1)))
+      (send (enc (exp (gen) (mul x-1 x-5 x-8)) (pubk b-1))))
+    ((recv (enc (exp (gen) (mul x-1 x-7)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-5) (exp (gen) (mul x-1 x-5 x-7)) (exp (gen) z)
+          b-2 (pubk a-2)))))
+  (label 52)
+  (parent 20)
+  (seen 52)
+  (unrealized (1 1))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-4) x-5))) (x x-4))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-0))
+    (h3 (exp h2-0 (mul x-1 x-4 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-1 x-2 (rec x-3) x-4 (rec x-6)))) (x x-3))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-3 x-7 (rec x-8)))) (x x-8))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 2) (3 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-3 x-4 x-5 x-6 x-8)
+  (operation nonce-test (added-strand init 3) (exp h2-1 x-3) (3 1)
+    (exp (gen) x-3))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-4) (exp h2 (mul x (rec x-4) x-5)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-6) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul x-0 x-6))
+          (exp h2-0 (mul x-1 x-4 (rec x-6))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-1 x-4)) (pubk b-1))))
+    ((send (enc (exp (gen) x-3) a-2 (pubk b-2)))
+      (recv
+        (enc h2-1 (exp h2-1 x-3)
+          (exp h2-0 (mul x-1 x-2 (rec x-3) x-4 (rec x-6))) b-2
+          (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-1 x-2 x-4 (rec x-6))) (pubk b-2))))
+    ((send (enc (exp (gen) x-8) a-3 (pubk b-3)))
+      (recv
+        (enc h2-2 (exp h2-2 x-8) (exp h2-1 (mul x-3 x-7 (rec x-8))) b-3
+          (pubk a-3)))
+      (send (enc (exp h2-1 (mul x-3 x-7)) (pubk b-3)))))
+  (label 53)
+  (parent 21)
+  (unrealized (1 1) (3 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 z x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-4) x-5))) (x x-4))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-0))
+    (h3 (exp h2-0 (mul x-1 x-4 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-1 x-9))
+    (h3 (exp h2-0 (mul x-1 x-2 (rec x-3) x-4 (rec x-6)))) (x x-3))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-1 (mul x-3 x-7)))
+    (y x-8) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 0)) ((3 2) (2 1)) ((4 1) (3 1)))
+  (ind-zero-in (x-8 (exp h2-1 (mul x-3 x-7)))
+    (z (exp h2-1 (mul x-3 x-7))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-3 x-4 x-5 x-6 x-8)
+  (operation nonce-test (added-strand resp 2) (exp h2-1 (mul x-3 x-9))
+    (3 1) (exp (gen) x-3))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-4) (exp h2 (mul x (rec x-4) x-5)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-6) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul x-0 x-6))
+          (exp h2-0 (mul x-1 x-4 (rec x-6))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-1 x-4)) (pubk b-1))))
+    ((send (enc (exp (gen) x-3) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-1 x-9) (exp h2-1 (mul x-3 x-9))
+          (exp h2-0 (mul x-1 x-2 (rec x-3) x-4 (rec x-6))) b-2
+          (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-1 x-2 x-4 (rec x-6))) (pubk b-2))))
+    ((recv (enc (exp h2-1 (mul x-3 x-7)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-8) (exp h2-1 (mul x-3 x-7 x-8)) (exp (gen) z)
+          b-3 (pubk a-3)))))
+  (label 54)
+  (parent 21)
+  (unrealized (1 1) (3 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-2 (rec x-3)))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-0))
+    (h3 (exp h2-0 (mul (rec x-1) x-3 x-4))) (x x-1))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-7))
+    (h3 (exp h2-0 (mul (rec x-1) x-3 x-4 x-5 (rec x-6)))) (x x-6))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 2) (2 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-1 x-2 x-3 x-6)
+  (operation nonce-test (algebra-contracted (h2-1 (exp (gen) x-7)))
+    (exp (gen) (mul x-6 x-7)) (3 1) (exp (gen) x-6))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc h2 (exp h2 x-2) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x x-2 (rec x-3))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul x-0 x-1))
+          (exp h2-0 (mul (rec x-1) x-3 x-4)) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-3 x-4)) (pubk b-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-7) (exp (gen) (mul x-6 x-7))
+          (exp h2-0 (mul (rec x-1) x-3 x-4 x-5 (rec x-6))) b-2
+          (pubk a-2)))
+      (send (enc (exp h2-0 (mul (rec x-1) x-3 x-4 x-5)) (pubk b-2)))))
+  (label 55)
+  (parent 21)
+  (unrealized (1 1) (3 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 z x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-1))
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-0))
+    (h3 (exp h2-0 (mul (rec x-2) z x-3 (rec x-5) x-7 x-8))) (x x-5))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2-0 (mul x-3 (rec x-5) x-7 x-8))) (y z) (z x-6))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-3 (rec x-5) x-7 x-8 (rec x-9) (rec x-10))))
+    (x x-10))
+  (precedes ((0 0) (1 1)) ((1 0) (4 1)) ((1 2) (0 1)) ((2 0) (4 1))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 2) (3 0)))
+  (ind-zero-in (z (exp h2-0 (mul x-3 (rec x-5) x-7 x-8)))
+    (x-6 (exp h2-0 (mul x-3 (rec x-5) x-7 x-8))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-3 x-4 x-5 x-6 x-10)
+  (operation nonce-test (added-strand init 3)
+    (exp h2-0 (mul x-3 (rec x-5) x-7 x-8)) (3 0))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-1) (exp h2-0 (mul x-1 x-3))
+          (exp h2 (mul x (rec x-3) x-4)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul x-0 x-5))
+          (exp h2-0 (mul (rec x-2) z x-3 (rec x-5) x-7 x-8)) b-1
+          (pubk a-1)))
+      (send (enc (exp h2-0 (mul (rec x-2) z x-3 x-7 x-8)) (pubk b-1))))
+    ((recv (enc (exp h2-0 (mul x-3 (rec x-5) x-7 x-8)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) z) (exp h2-0 (mul z x-3 (rec x-5) x-7 x-8))
+          (exp (gen) x-6) b-2 (pubk a-2))))
+    ((send (enc (exp (gen) x-10) a-3 (pubk b-3)))
+      (recv
+        (enc h2-1 (exp h2-1 x-10)
+          (exp h2-0 (mul x-3 (rec x-5) x-7 x-8 (rec x-9) (rec x-10)))
+          b-3 (pubk a-3)))
+      (send
+        (enc (exp h2-0 (mul x-3 (rec x-5) x-7 x-8 (rec x-9)))
+          (pubk b-3)))))
+  (label 56)
+  (parent 22)
+  (unrealized (1 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 b-3 a-3 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 z z-0 x-3 x-4 y x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 (mul x-1 x-10)))
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-0))
+    (h3
+      (exp h2-0
+        (mul (rec x-2) z-0 x-3 (rec y) x-6 x-7 (rec x-8) x-9 x-11)))
+    (x y))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2-0 (mul x-3 (rec y) x-6 x-7 (rec x-8) x-9 x-11))) (y z-0)
+    (z x-5))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-0 (mul x-3 (rec y) x-6 x-7 (rec x-8)))) (y x-9) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (4 0)) ((1 2) (0 1)) ((2 0) (4 0))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 1) (3 0)))
+  (ind-zero-in (x-9 (exp h2-0 (mul x-3 (rec y) x-6 x-7 (rec x-8))))
+    (z (exp h2-0 (mul x-3 (rec y) x-6 x-7 (rec x-8))))
+    (z-0 (exp h2-0 (mul x-3 (rec y) x-6 x-7 (rec x-8) x-9 x-11)))
+    (x-5 (exp h2-0 (mul x-3 (rec y) x-6 x-7 (rec x-8) x-9 x-11))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-3 x-4 y x-5 x-9)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-0 (mul x-3 (rec y) x-6 x-7 (rec x-8) x-9 x-11)) (3 0))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 (mul x-1 x-10)) (exp h2-0 (mul x-1 x-3 x-10))
+          (exp h2 (mul x (rec x-3) x-4)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) y) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul x-0 y))
+          (exp h2-0
+            (mul (rec x-2) z-0 x-3 (rec y) x-6 x-7 (rec x-8) x-9 x-11))
+          b-1 (pubk a-1)))
+      (send
+        (enc
+          (exp h2-0 (mul (rec x-2) z-0 x-3 x-6 x-7 (rec x-8) x-9 x-11))
+          (pubk b-1))))
+    ((recv
+       (enc (exp h2-0 (mul x-3 (rec y) x-6 x-7 (rec x-8) x-9 x-11)) a-2
+         (pubk b-2)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-0 (mul z-0 x-3 (rec y) x-6 x-7 (rec x-8) x-9 x-11))
+          (exp (gen) x-5) b-2 (pubk a-2))))
+    ((recv
+       (enc (exp h2-0 (mul x-3 (rec y) x-6 x-7 (rec x-8))) a-3
+         (pubk b-3)))
+      (send
+        (enc (exp (gen) x-9)
+          (exp h2-0 (mul x-3 (rec y) x-6 x-7 (rec x-8) x-9))
+          (exp (gen) z) b-3 (pubk a-3)))))
+  (label 57)
+  (parent 22)
+  (unrealized (1 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 name) (h2 h3 base)
+    (x x-0 z x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0)
+    (h2 (exp (gen) (mul x-1 (rec x-4) (rec x-5) x-7 x-9)))
+    (h3 (exp h2 (mul x x-2 (rec x-3)))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-0))
+    (h3 (exp (gen) (mul x-3 x-6 (rec x-8) x-9))) (x x-1))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp (gen) (mul x-3 x-9)))
+    (y x-6) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (3 0)) ((1 2) (0 1)) ((2 0) (3 0))
+    ((2 2) (1 1)) ((3 1) (2 1)))
+  (ind-zero-in (x-6 (exp (gen) (mul x-3 x-9)))
+    (z (exp (gen) (mul x-3 x-9))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-1 x-2 x-3 x-6)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-0 (exp (gen) (mul x-1 (rec x-4) (rec x-5) x-9))))
+    (exp (gen) (mul x-3 x-9)) (3 0))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc h2 (exp h2 x-2) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) (mul x-1 (rec x-4) (rec x-5) x-7 x-9))
+          (exp (gen) (mul x-1 x-3 (rec x-4) (rec x-5) x-7 x-9))
+          (exp h2 (mul x x-2 (rec x-3))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-2)) (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul x-0 x-1))
+          (exp (gen) (mul x-3 x-6 (rec x-8) x-9)) b-1 (pubk a-1)))
+      (send
+        (enc (exp (gen) (mul x-1 x-3 x-6 (rec x-8) x-9)) (pubk b-1))))
+    ((recv (enc (exp (gen) (mul x-3 x-9)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-6) (exp (gen) (mul x-3 x-6 x-9)) (exp (gen) z)
+          b-2 (pubk a-2)))))
+  (label 58)
+  (parent 22)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 name) (h2 h3 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-0))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) (mul x-2 x-5)))
+    (h3 (exp h2 (mul x x-0 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-1))
+    (h3 (exp (gen) (mul x-3 x-4))) (x x-4))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 2) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-0 x-4 x-5)
+  (operation nonce-test
+    (algebra-contracted (x-6 x-5)
+      (x-7 (mul (rec x-2) x-3 x-4 x-4 (rec x-5) (rec x-5))) (x-8 x-4)
+      (x-9 x-3) (x-10 x-2)) (exp (gen) (mul x-2 x-5)) (1 1))
+  (traces
+    ((send (enc (exp (gen) x-0) a (pubk b)))
+      (recv (enc h2 (exp h2 x-0) h3 b (pubk a)))
+      (send (enc (exp h3 x-0) (pubk b))))
+    ((send (enc (exp (gen) x-5) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) (mul x-2 x-5)) (exp (gen) (mul x-2 x-5 x-5))
+          (exp h2 (mul x x-0 (rec x-5))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-0)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-1) (exp (gen) (mul x-1 x-4))
+          (exp (gen) (mul x-3 x-4)) b-1 (pubk a-1)))
+      (send (enc (exp (gen) (mul x-3 x-4 x-4)) (pubk b-1)))))
+  (label 59)
+  (parent 23)
+  (seen 59)
+  (unrealized (1 1))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 a-3 b-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 base)
+    (x x-0 x-1 x-2 x-3 z x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-0))
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-1 x-6)))
+    (y x-4) (z x-7))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-1 x-2 x-6 (rec x-8)))) (x x-8))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-3 (rec z) x-8))) (x z))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-3)
+    (h3 (exp h2-2 (mul z x-9 (rec x-10)))) (x x-10))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (4 1)) ((3 2) (2 0)) ((4 0) (5 1)) ((4 2) (3 1))
+    ((5 2) (4 1)))
+  (ind-zero-in (x-4 (exp h2-0 (mul x-1 x-6)))
+    (x-7 (exp h2-0 (mul x-1 x-6))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-4 x-5 x-6 x-7 x-8 x-10)
+  (operation nonce-test (added-strand init 3) (exp h2-2 z) (4 1)
+    (exp (gen) z))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-0) (exp h2-0 (mul x-0 x-6))
+          (exp h2 (mul x x-5 (rec x-6))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-1 x-6)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-4) (exp h2-0 (mul x-1 x-4 x-6))
+          (exp (gen) x-7) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) x-8) a-2 (pubk b-2)))
+      (recv
+        (enc h2-1 (exp h2-1 x-8) (exp h2-0 (mul x-1 x-2 x-6 (rec x-8)))
+          b-2 (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-1 x-2 x-6)) (pubk b-2))))
+    ((send (enc (exp (gen) z) a-3 (pubk b-3)))
+      (recv
+        (enc h2-2 (exp h2-2 z) (exp h2-1 (mul x-3 (rec z) x-8)) b-3
+          (pubk a-3))) (send (enc (exp h2-1 (mul x-3 x-8)) (pubk b-3))))
+    ((send (enc (exp (gen) x-10) a-4 (pubk b-4)))
+      (recv
+        (enc h2-3 (exp h2-3 x-10) (exp h2-2 (mul z x-9 (rec x-10))) b-4
+          (pubk a-4))) (send (enc (exp h2-2 (mul z x-9)) (pubk b-4)))))
+  (label 60)
+  (parent 24)
+  (unrealized (1 1) (3 1) (4 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 a-3 b-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 z z-0 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-0))
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-1 x-6)))
+    (y x-4) (z x-7))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-1 x-2 x-6 (rec x-8)))) (x x-8))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp h2-2 x-11))
+    (h3 (exp h2-1 (mul x-3 (rec z-0) x-8))) (x z-0))
+  (defstrand resp 2 (b b-4) (a a-4) (h1 (exp h2-2 (mul z-0 x-9)))
+    (y x-10) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (4 1)) ((3 2) (2 0)) ((4 0) (5 0)) ((4 2) (3 1))
+    ((5 1) (4 1)))
+  (ind-zero-in (x-10 (exp h2-2 (mul z-0 x-9)))
+    (z (exp h2-2 (mul z-0 x-9))) (x-4 (exp h2-0 (mul x-1 x-6)))
+    (x-7 (exp h2-0 (mul x-1 x-6))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-4 x-5 x-6 x-7 x-8 x-10)
+  (operation nonce-test (added-strand resp 2) (exp h2-2 (mul z-0 x-11))
+    (4 1) (exp (gen) z-0))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-0) (exp h2-0 (mul x-0 x-6))
+          (exp h2 (mul x x-5 (rec x-6))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-1 x-6)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-4) (exp h2-0 (mul x-1 x-4 x-6))
+          (exp (gen) x-7) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) x-8) a-2 (pubk b-2)))
+      (recv
+        (enc h2-1 (exp h2-1 x-8) (exp h2-0 (mul x-1 x-2 x-6 (rec x-8)))
+          b-2 (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-1 x-2 x-6)) (pubk b-2))))
+    ((send (enc (exp (gen) z-0) a-3 (pubk b-3)))
+      (recv
+        (enc (exp h2-2 x-11) (exp h2-2 (mul z-0 x-11))
+          (exp h2-1 (mul x-3 (rec z-0) x-8)) b-3 (pubk a-3)))
+      (send (enc (exp h2-1 (mul x-3 x-8)) (pubk b-3))))
+    ((recv (enc (exp h2-2 (mul z-0 x-9)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) x-10) (exp h2-2 (mul z-0 x-9 x-10))
+          (exp (gen) z) b-4 (pubk a-4)))))
+  (label 61)
+  (parent 24)
+  (unrealized (1 1) (3 1) (4 1) (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 z x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-0))
+    (h3 (exp h2 (mul x (rec x-4) x-5))) (x x-4))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-1 x-4)))
+    (y x-6) (z x-3))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-1 x-2 (rec z) x-4))) (x z))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp (gen) x-9))
+    (h3 (exp h2-1 (mul z x-7 (rec x-8)))) (x x-8))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (4 1)) ((3 2) (2 0)) ((4 2) (3 1)))
+  (ind-zero-in (x-6 (exp h2-0 (mul x-1 x-4)))
+    (x-3 (exp h2-0 (mul x-1 x-4))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-3 x-4 x-5 x-6 x-8)
+  (operation nonce-test (algebra-contracted (h2-2 (exp (gen) x-9)))
+    (exp (gen) (mul x-8 x-9)) (4 1) (exp (gen) x-8))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-0) (exp h2-0 (mul x-0 x-4))
+          (exp h2 (mul x (rec x-4) x-5)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-1 x-4)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-6) (exp h2-0 (mul x-1 x-4 x-6))
+          (exp (gen) x-3) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) z) a-2 (pubk b-2)))
+      (recv
+        (enc h2-1 (exp h2-1 z) (exp h2-0 (mul x-1 x-2 (rec z) x-4)) b-2
+          (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-1 x-2 x-4)) (pubk b-2))))
+    ((send (enc (exp (gen) x-8) a-3 (pubk b-3)))
+      (recv
+        (enc (exp (gen) x-9) (exp (gen) (mul x-8 x-9))
+          (exp h2-1 (mul z x-7 (rec x-8))) b-3 (pubk a-3)))
+      (send (enc (exp h2-1 (mul z x-7)) (pubk b-3)))))
+  (label 62)
+  (parent 24)
+  (unrealized (1 1) (3 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 b-3 a-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 z z-0 x-4 x-5 x-6 x-7 x-8 z-1 x-9 z-2 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-0))
+    (h3 (exp h2 (mul x x-4 (rec x-5)))) (x x-5))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-1 x-5)))
+    (y z-0) (z x-6))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-1 x-3))
+    (h3 (exp h2-0 (mul x-1 x-2 x-5 (rec x-7)))) (x x-7))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-1 (mul x-7 z-1))) (y z)
+    (z x-8))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-7 z-1 x-9 (rec z-2)))) (x z-2))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (5 1)) ((3 2) (2 0)) ((4 1) (3 1)) ((5 2) (4 0)))
+  (ind-zero-in (z (exp h2-1 (mul x-7 z-1)))
+    (x-8 (exp h2-1 (mul x-7 z-1))) (z-0 (exp h2-0 (mul x-1 x-5)))
+    (x-6 (exp h2-0 (mul x-1 x-5))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-4 x-5 x-6 x-7 x-8 z-2)
+  (operation nonce-test (added-strand init 3) (exp h2-1 (mul x-7 z-1))
+    (4 0) (exp (gen) x-7))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-5) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-0) (exp h2-0 (mul x-0 x-5))
+          (exp h2 (mul x x-4 (rec x-5))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-1 x-5)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z-0) (exp h2-0 (mul x-1 z-0 x-5))
+          (exp (gen) x-6) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) x-7) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-1 x-3) (exp h2-1 (mul x-3 x-7))
+          (exp h2-0 (mul x-1 x-2 x-5 (rec x-7))) b-2 (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-1 x-2 x-5)) (pubk b-2))))
+    ((recv (enc (exp h2-1 (mul x-7 z-1)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) z) (exp h2-1 (mul z x-7 z-1)) (exp (gen) x-8)
+          b-3 (pubk a-3))))
+    ((send (enc (exp (gen) z-2) a-4 (pubk b-4)))
+      (recv
+        (enc h2-2 (exp h2-2 z-2) (exp h2-1 (mul x-7 z-1 x-9 (rec z-2)))
+          b-4 (pubk a-4)))
+      (send (enc (exp h2-1 (mul x-7 z-1 x-9)) (pubk b-4)))))
+  (label 63)
+  (parent 25)
+  (unrealized (1 1) (3 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 b-3 a-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 z z-0 z-1 x-4 x-5 x-6 x-7 x-8 z-2 x-9 z-3 z-4
+      x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-0))
+    (h3 (exp h2 (mul x x-4 (rec x-5)))) (x x-5))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-1 x-5)))
+    (y z-1) (z x-6))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-1 (mul x-3 z-4)))
+    (h3 (exp h2-0 (mul x-1 x-2 x-5 (rec x-7)))) (x x-7))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-1 (mul x-7 z-2 x-9 z-3 (rec x-10)))) (y z-0) (z x-8))
+  (defstrand resp 2 (b b-4) (a a-4) (h1 (exp h2-1 (mul x-7 z-2 x-9)))
+    (y z-3) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (5 0)) ((3 2) (2 0)) ((4 1) (3 1)) ((5 1) (4 0)))
+  (ind-zero-in (z-3 (exp h2-1 (mul x-7 z-2 x-9)))
+    (z (exp h2-1 (mul x-7 z-2 x-9)))
+    (z-0 (exp h2-1 (mul x-7 z-2 x-9 z-3 (rec x-10))))
+    (x-8 (exp h2-1 (mul x-7 z-2 x-9 z-3 (rec x-10))))
+    (z-1 (exp h2-0 (mul x-1 x-5))) (x-6 (exp h2-0 (mul x-1 x-5))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 z-1 x-4 x-5 x-6 x-7 x-8 z-3)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-1 (mul x-7 z-2 x-9 z-3 (rec x-10))) (4 0) (exp (gen) x-7))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-5) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-0) (exp h2-0 (mul x-0 x-5))
+          (exp h2 (mul x x-4 (rec x-5))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-1 x-5)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z-1) (exp h2-0 (mul x-1 z-1 x-5))
+          (exp (gen) x-6) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) x-7) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-1 (mul x-3 z-4)) (exp h2-1 (mul x-3 x-7 z-4))
+          (exp h2-0 (mul x-1 x-2 x-5 (rec x-7))) b-2 (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-1 x-2 x-5)) (pubk b-2))))
+    ((recv
+       (enc (exp h2-1 (mul x-7 z-2 x-9 z-3 (rec x-10))) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-1 (mul z-0 x-7 z-2 x-9 z-3 (rec x-10)))
+          (exp (gen) x-8) b-3 (pubk a-3))))
+    ((recv (enc (exp h2-1 (mul x-7 z-2 x-9)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) z-3) (exp h2-1 (mul x-7 z-2 x-9 z-3))
+          (exp (gen) z) b-4 (pubk a-4)))))
+  (label 64)
+  (parent 25)
+  (unrealized (1 1) (3 1) (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 b-3 a-3 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 z z-0 x-3 x-4 x-5 x-6 x-7 x-8 x-9 z-1 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-0))
+    (h3 (exp h2 (mul x (rec x-4) x-5))) (x x-4))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-1 x-4)))
+    (y x-6) (z x-3))
+  (defstrand init 3 (a a-2) (b b-2)
+    (h2 (exp (gen) (mul (rec x-7) x-9 z-1)))
+    (h3 (exp h2-0 (mul x-1 x-2 (rec z-0) x-4))) (x z-0))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp (gen) (mul z-0 z-1)))
+    (y x-8) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (4 0)) ((3 2) (2 0)) ((4 1) (3 1)))
+  (ind-zero-in (x-8 (exp (gen) (mul z-0 z-1)))
+    (z (exp (gen) (mul z-0 z-1))) (x-6 (exp h2-0 (mul x-1 x-4)))
+    (x-3 (exp h2-0 (mul x-1 x-4))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-3 x-4 x-5 x-6 x-8)
+  (operation nonce-test
+    (algebra-contracted (h2-1 (exp (gen) (mul (rec x-7) z-1))))
+    (exp (gen) (mul z-0 z-1)) (4 0) (exp (gen) z-0))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-0) (exp h2-0 (mul x-0 x-4))
+          (exp h2 (mul x (rec x-4) x-5)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-1 x-4)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-6) (exp h2-0 (mul x-1 x-4 x-6))
+          (exp (gen) x-3) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) z-0) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) (mul (rec x-7) x-9 z-1))
+          (exp (gen) (mul z-0 (rec x-7) x-9 z-1))
+          (exp h2-0 (mul x-1 x-2 (rec z-0) x-4)) b-2 (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-1 x-2 x-4)) (pubk b-2))))
+    ((recv (enc (exp (gen) (mul z-0 z-1)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-8) (exp (gen) (mul z-0 x-8 z-1)) (exp (gen) z)
+          b-3 (pubk a-3)))))
+  (label 65)
+  (parent 25)
+  (unrealized (1 1) (3 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 x-0))
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp h2-0 (mul x-3 x-6)))
+    (y x-5) (z x-2))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-1))
+    (h3 (exp h2-0 (mul (rec z) x-3 x-6 x-7))) (x z))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-1)
+    (h3 (exp h2-0 (mul (rec z) x-3 x-6 x-7 x-8 (rec x-9)))) (x x-9))
+  (precedes ((0 0) (1 1)) ((1 0) (4 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (4 1)) ((3 2) (2 0)) ((4 2) (3 1)))
+  (ind-zero-in (x-5 (exp h2-0 (mul x-3 x-6)))
+    (x-2 (exp h2-0 (mul x-3 x-6))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-5 x-9)
+  (operation nonce-test (added-strand init 3)
+    (exp h2-0 (mul (rec z) x-3 x-6 x-7)) (3 1))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 x-0) (exp h2-0 (mul x-0 x-3))
+          (exp h2 (mul x (rec x-3) x-4)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((recv (enc (exp h2-0 (mul x-3 x-6)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-5) (exp h2-0 (mul x-3 x-5 x-6))
+          (exp (gen) x-2) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) z) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-1) (exp (gen) (mul x-1 z))
+          (exp h2-0 (mul (rec z) x-3 x-6 x-7)) b-2 (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-3 x-6 x-7)) (pubk b-2))))
+    ((send (enc (exp (gen) x-9) a-3 (pubk b-3)))
+      (recv
+        (enc h2-1 (exp h2-1 x-9)
+          (exp h2-0 (mul (rec z) x-3 x-6 x-7 x-8 (rec x-9))) b-3
+          (pubk a-3)))
+      (send (enc (exp h2-0 (mul (rec z) x-3 x-6 x-7 x-8)) (pubk b-3)))))
+  (label 66)
+  (parent 26)
+  (unrealized (1 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 b-3 a-3 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 z z-0 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12
+      expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 (mul x-0 x-10)))
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2-0 (mul x-3 x-6 x-7 x-8 x-9 (rec x-11) (rec x-12))))
+    (y x-5) (z x-2))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-1))
+    (h3 (exp h2-0 (mul (rec z-0) x-3 x-6 x-7 x-8 x-9 (rec x-11))))
+    (x z-0))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-0 (mul (rec z-0) x-3 x-6 x-7 x-8))) (y x-9) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (4 0)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (4 0)) ((3 2) (2 0)) ((4 1) (3 1)))
+  (ind-zero-in (x-9 (exp h2-0 (mul (rec z-0) x-3 x-6 x-7 x-8)))
+    (z (exp h2-0 (mul (rec z-0) x-3 x-6 x-7 x-8)))
+    (x-5 (exp h2-0 (mul x-3 x-6 x-7 x-8 x-9 (rec x-11) (rec x-12))))
+    (x-2 (exp h2-0 (mul x-3 x-6 x-7 x-8 x-9 (rec x-11) (rec x-12)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-2 x-3 x-4 x-5 x-9)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-0 (mul (rec z-0) x-3 x-6 x-7 x-8 x-9 (rec x-11))) (3 1))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 (mul x-0 x-10)) (exp h2-0 (mul x-0 x-3 x-10))
+          (exp h2 (mul x (rec x-3) x-4)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((recv
+       (enc (exp h2-0 (mul x-3 x-6 x-7 x-8 x-9 (rec x-11) (rec x-12)))
+         a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-5)
+          (exp h2-0 (mul x-3 x-5 x-6 x-7 x-8 x-9 (rec x-11) (rec x-12)))
+          (exp (gen) x-2) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) z-0) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-1) (exp (gen) (mul x-1 z-0))
+          (exp h2-0 (mul (rec z-0) x-3 x-6 x-7 x-8 x-9 (rec x-11))) b-2
+          (pubk a-2)))
+      (send
+        (enc (exp h2-0 (mul x-3 x-6 x-7 x-8 x-9 (rec x-11)))
+          (pubk b-2))))
+    ((recv
+       (enc (exp h2-0 (mul (rec z-0) x-3 x-6 x-7 x-8)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-9)
+          (exp h2-0 (mul (rec z-0) x-3 x-6 x-7 x-8 x-9)) (exp (gen) z)
+          b-3 (pubk a-3)))))
+  (label 67)
+  (parent 26)
+  (unrealized (1 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 name) (h2 h3 base)
+    (x x-0 z x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0)
+    (h2 (exp (gen) (mul x-0 (rec x-2) (rec x-4) (rec x-5) x-6 x-6 x-8)))
+    (h3 (exp h2 (mul x x-1 (rec x-2)))) (x x-2))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp (gen) (mul (rec x-5) x-6 x-6 x-8))) (y z) (z x-3))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-7))
+    (h3 (exp (gen) (mul x-6 x-8))) (x x-6))
+  (precedes ((0 0) (1 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 2) (2 0)))
+  (ind-zero-in (z (exp (gen) (mul (rec x-5) x-6 x-6 x-8)))
+    (x-3 (exp (gen) (mul (rec x-5) x-6 x-6 x-8))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-1 x-2 x-3 x-6)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-0
+        (exp (gen) (mul (rec x-2) (rec x-4) (rec x-5) x-6 x-6 x-8))))
+    (exp (gen) (mul x-6 x-8)) (3 1))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc
+          (exp (gen)
+            (mul x-0 (rec x-2) (rec x-4) (rec x-5) x-6 x-6 x-8))
+          (exp (gen) (mul x-0 (rec x-4) (rec x-5) x-6 x-6 x-8))
+          (exp h2 (mul x x-1 (rec x-2))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-1)) (pubk b-0))))
+    ((recv (enc (exp (gen) (mul (rec x-5) x-6 x-6 x-8)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z) (exp (gen) (mul z (rec x-5) x-6 x-6 x-8))
+          (exp (gen) x-3) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-7) (exp (gen) (mul x-6 x-7))
+          (exp (gen) (mul x-6 x-8)) b-2 (pubk a-2)))
+      (send (enc (exp (gen) (mul x-6 x-6 x-8)) (pubk b-2)))))
+  (label 68)
+  (parent 26)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 a-3 b-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 z z-0 x-6 x-7 x-8 x-9 x-10 x-11 x-12
+      expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-7))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 (mul x-0 x-1)))
+    (h3 (exp h2 (mul x x-7 (rec x-8)))) (x x-8))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2-0 (mul (rec x-2) x-3 x-4 x-8 x-10))) (y x-6) (z x-9))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-0 (mul x-3 x-4 x-8)))
+    (y x-10) (z z-0))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-3 x-4 x-5 (rec z) x-8))) (x z))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-2)
+    (h3 (exp h2-1 (mul z x-11 (rec x-12)))) (x x-12))
+  (precedes ((0 0) (1 1)) ((1 0) (4 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)) ((4 0) (5 1)) ((4 2) (3 0)) ((5 2) (4 1)))
+  (ind-zero-in (x-10 (exp h2-0 (mul x-3 x-4 x-8)))
+    (z-0 (exp h2-0 (mul x-3 x-4 x-8)))
+    (x-6 (exp h2-0 (mul (rec x-2) x-3 x-4 x-8 x-10)))
+    (x-9 (exp h2-0 (mul (rec x-2) x-3 x-4 x-8 x-10))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-6 x-7 x-8 x-9 x-10 x-12)
+  (operation nonce-test (added-strand init 3) (exp h2-1 z) (4 1)
+    (exp (gen) z))
+  (traces
+    ((send (enc (exp (gen) x-7) a (pubk b)))
+      (recv (enc h2 (exp h2 x-7) h3 b (pubk a)))
+      (send (enc (exp h3 x-7) (pubk b))))
+    ((send (enc (exp (gen) x-8) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 (mul x-0 x-1)) (exp h2-0 (mul x-0 x-1 x-8))
+          (exp h2 (mul x x-7 (rec x-8))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-7)) (pubk b-0))))
+    ((recv
+       (enc (exp h2-0 (mul (rec x-2) x-3 x-4 x-8 x-10)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-6)
+          (exp h2-0 (mul (rec x-2) x-3 x-4 x-6 x-8 x-10))
+          (exp (gen) x-9) b-1 (pubk a-1))))
+    ((recv (enc (exp h2-0 (mul x-3 x-4 x-8)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-10) (exp h2-0 (mul x-3 x-4 x-8 x-10))
+          (exp (gen) z-0) b-2 (pubk a-2))))
+    ((send (enc (exp (gen) z) a-3 (pubk b-3)))
+      (recv
+        (enc h2-1 (exp h2-1 z) (exp h2-0 (mul x-3 x-4 x-5 (rec z) x-8))
+          b-3 (pubk a-3)))
+      (send (enc (exp h2-0 (mul x-3 x-4 x-5 x-8)) (pubk b-3))))
+    ((send (enc (exp (gen) x-12) a-4 (pubk b-4)))
+      (recv
+        (enc h2-2 (exp h2-2 x-12) (exp h2-1 (mul z x-11 (rec x-12))) b-4
+          (pubk a-4))) (send (enc (exp h2-1 (mul z x-11)) (pubk b-4)))))
+  (label 69)
+  (parent 27)
+  (unrealized (1 1) (4 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 a-3 b-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 z z-0 z-1 x-6 x-7 x-8 x-9 x-10 x-11 x-12
+      x-13 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-7))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 (mul x-0 x-1)))
+    (h3 (exp h2 (mul x x-7 (rec x-8)))) (x x-8))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2-0 (mul (rec x-2) x-3 x-4 x-8 x-10))) (y x-6) (z x-9))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-0 (mul x-3 x-4 x-8)))
+    (y x-10) (z z-1))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp h2-1 x-13))
+    (h3 (exp h2-0 (mul x-3 x-4 x-5 (rec z-0) x-8))) (x z-0))
+  (defstrand resp 2 (b b-4) (a a-4) (h1 (exp h2-1 (mul z-0 x-11)))
+    (y x-12) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (4 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)) ((4 0) (5 0)) ((4 2) (3 0)) ((5 1) (4 1)))
+  (ind-zero-in (x-12 (exp h2-1 (mul z-0 x-11)))
+    (z (exp h2-1 (mul z-0 x-11))) (x-10 (exp h2-0 (mul x-3 x-4 x-8)))
+    (z-1 (exp h2-0 (mul x-3 x-4 x-8)))
+    (x-6 (exp h2-0 (mul (rec x-2) x-3 x-4 x-8 x-10)))
+    (x-9 (exp h2-0 (mul (rec x-2) x-3 x-4 x-8 x-10))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 z-1 x-6 x-7 x-8 x-9 x-10 x-12)
+  (operation nonce-test (added-strand resp 2) (exp h2-1 (mul z-0 x-13))
+    (4 1) (exp (gen) z-0))
+  (traces
+    ((send (enc (exp (gen) x-7) a (pubk b)))
+      (recv (enc h2 (exp h2 x-7) h3 b (pubk a)))
+      (send (enc (exp h3 x-7) (pubk b))))
+    ((send (enc (exp (gen) x-8) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 (mul x-0 x-1)) (exp h2-0 (mul x-0 x-1 x-8))
+          (exp h2 (mul x x-7 (rec x-8))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-7)) (pubk b-0))))
+    ((recv
+       (enc (exp h2-0 (mul (rec x-2) x-3 x-4 x-8 x-10)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-6)
+          (exp h2-0 (mul (rec x-2) x-3 x-4 x-6 x-8 x-10))
+          (exp (gen) x-9) b-1 (pubk a-1))))
+    ((recv (enc (exp h2-0 (mul x-3 x-4 x-8)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-10) (exp h2-0 (mul x-3 x-4 x-8 x-10))
+          (exp (gen) z-1) b-2 (pubk a-2))))
+    ((send (enc (exp (gen) z-0) a-3 (pubk b-3)))
+      (recv
+        (enc (exp h2-1 x-13) (exp h2-1 (mul z-0 x-13))
+          (exp h2-0 (mul x-3 x-4 x-5 (rec z-0) x-8)) b-3 (pubk a-3)))
+      (send (enc (exp h2-0 (mul x-3 x-4 x-5 x-8)) (pubk b-3))))
+    ((recv (enc (exp h2-1 (mul z-0 x-11)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) x-12) (exp h2-1 (mul z-0 x-11 x-12))
+          (exp (gen) z) b-4 (pubk a-4)))))
+  (label 70)
+  (parent 27)
+  (unrealized (1 1) (4 1) (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 a-3 b-3 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 z z-0 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 (mul x-0 x-1)))
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2-0 (mul (rec x-2) z x-3 x-7 x-8))) (y x-5) (z z-0))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-0 (mul x-3 x-7 x-8)))
+    (y z) (z x-6))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp (gen) x-11))
+    (h3 (exp h2-0 (mul x-3 x-7 x-8 x-9 (rec x-10)))) (x x-10))
+  (precedes ((0 0) (1 1)) ((1 0) (4 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)) ((4 2) (3 0)))
+  (ind-zero-in (z (exp h2-0 (mul x-3 x-7 x-8)))
+    (x-6 (exp h2-0 (mul x-3 x-7 x-8)))
+    (x-5 (exp h2-0 (mul (rec x-2) z x-3 x-7 x-8)))
+    (z-0 (exp h2-0 (mul (rec x-2) z x-3 x-7 x-8))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-3 x-4 x-5 x-6 x-10)
+  (operation nonce-test (algebra-contracted (h2-1 (exp (gen) x-11)))
+    (exp (gen) (mul x-10 x-11)) (4 1) (exp (gen) x-10))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 (mul x-0 x-1)) (exp h2-0 (mul x-0 x-1 x-3))
+          (exp h2 (mul x (rec x-3) x-4)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((recv
+       (enc (exp h2-0 (mul (rec x-2) z x-3 x-7 x-8)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-5)
+          (exp h2-0 (mul (rec x-2) z x-3 x-5 x-7 x-8)) (exp (gen) z-0)
+          b-1 (pubk a-1))))
+    ((recv (enc (exp h2-0 (mul x-3 x-7 x-8)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) z) (exp h2-0 (mul z x-3 x-7 x-8))
+          (exp (gen) x-6) b-2 (pubk a-2))))
+    ((send (enc (exp (gen) x-10) a-3 (pubk b-3)))
+      (recv
+        (enc (exp (gen) x-11) (exp (gen) (mul x-10 x-11))
+          (exp h2-0 (mul x-3 x-7 x-8 x-9 (rec x-10))) b-3 (pubk a-3)))
+      (send (enc (exp h2-0 (mul x-3 x-7 x-8 x-9)) (pubk b-3)))))
+  (label 71)
+  (parent 27)
+  (unrealized (1 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 b-3 a-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 x-4 z z-0 z-1 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12
+      x-13 x-14 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp h2-0 (mul x-0 x-1 x-3)))
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2-0 (mul (rec x-2) (rec x-4) z x-6 x-8 x-10 x-11 x-12)))
+    (y z-1) (z x-7))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2-0 (mul (rec x-4) z x-6 x-10 x-11 x-12))) (y x-8)
+    (z z-0))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-0 (mul x-6 x-10 x-11 x-12))) (y z) (z x-9))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13 (rec x-14)))) (x x-14))
+  (precedes ((0 0) (1 1)) ((1 0) (5 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)) ((4 1) (3 0)) ((5 2) (4 0)))
+  (ind-zero-in (z (exp h2-0 (mul x-6 x-10 x-11 x-12)))
+    (x-9 (exp h2-0 (mul x-6 x-10 x-11 x-12)))
+    (x-8 (exp h2-0 (mul (rec x-4) z x-6 x-10 x-11 x-12)))
+    (z-0 (exp h2-0 (mul (rec x-4) z x-6 x-10 x-11 x-12)))
+    (z-1 (exp h2-0 (mul (rec x-2) (rec x-4) z x-6 x-8 x-10 x-11 x-12)))
+    (x-7 (exp h2-0 (mul (rec x-2) (rec x-4) z x-6 x-8 x-10 x-11 x-12))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 z-1 x-5 x-6 x-7 x-8 x-9 x-14)
+  (operation nonce-test (added-strand init 3)
+    (exp h2-0 (mul x-6 x-10 x-11 x-12)) (4 0) (exp (gen) x-6))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 (mul x-0 x-1 x-3))
+          (exp h2-0 (mul x-0 x-1 x-3 x-6))
+          (exp h2 (mul x x-5 (rec x-6))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((recv
+       (enc
+         (exp h2-0 (mul (rec x-2) (rec x-4) z x-6 x-8 x-10 x-11 x-12))
+         a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z-1)
+          (exp h2-0
+            (mul (rec x-2) (rec x-4) z z-1 x-6 x-8 x-10 x-11 x-12))
+          (exp (gen) x-7) b-1 (pubk a-1))))
+    ((recv
+       (enc (exp h2-0 (mul (rec x-4) z x-6 x-10 x-11 x-12)) a-2
+         (pubk b-2)))
+      (send
+        (enc (exp (gen) x-8)
+          (exp h2-0 (mul (rec x-4) z x-6 x-8 x-10 x-11 x-12))
+          (exp (gen) z-0) b-2 (pubk a-2))))
+    ((recv (enc (exp h2-0 (mul x-6 x-10 x-11 x-12)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) z) (exp h2-0 (mul z x-6 x-10 x-11 x-12))
+          (exp (gen) x-9) b-3 (pubk a-3))))
+    ((send (enc (exp (gen) x-14) a-4 (pubk b-4)))
+      (recv
+        (enc h2-1 (exp h2-1 x-14)
+          (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13 (rec x-14))) b-4
+          (pubk a-4)))
+      (send (enc (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13)) (pubk b-4)))))
+  (label 72)
+  (parent 28)
+  (unrealized (1 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 b-3 a-3 b-4 a-4 name)
+    (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 x-3 x-4 z z-0 z-1 z-2 x-5 x-6 x-7 x-8 x-9 x-10 x-11
+      x-12 x-13 x-14 x-15 x-16 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0)
+    (h2 (exp h2-0 (mul x-0 x-1 x-3 x-15)))
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1
+      (exp h2-0
+        (mul (rec x-2) (rec x-4) z-0 x-6 x-8 x-10 x-11 x-12 x-13 x-14
+          (rec x-16)))) (y z-2) (z x-7))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1
+      (exp h2-0
+        (mul (rec x-4) z-0 x-6 x-10 x-11 x-12 x-13 x-14 (rec x-16))))
+    (y x-8) (z z-1))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13 x-14 (rec x-16))))
+    (y z-0) (z x-9))
+  (defstrand resp 2 (b b-4) (a a-4)
+    (h1 (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13))) (y x-14) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (5 0)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)) ((4 1) (3 0)) ((5 1) (4 0)))
+  (ind-zero-in (x-14 (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13)))
+    (z (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13)))
+    (z-0 (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13 x-14 (rec x-16))))
+    (x-9 (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13 x-14 (rec x-16))))
+    (x-8
+      (exp h2-0
+        (mul (rec x-4) z-0 x-6 x-10 x-11 x-12 x-13 x-14 (rec x-16))))
+    (z-1
+      (exp h2-0
+        (mul (rec x-4) z-0 x-6 x-10 x-11 x-12 x-13 x-14 (rec x-16))))
+    (z-2
+      (exp h2-0
+        (mul (rec x-2) (rec x-4) z-0 x-6 x-8 x-10 x-11 x-12 x-13 x-14
+          (rec x-16))))
+    (x-7
+      (exp h2-0
+        (mul (rec x-2) (rec x-4) z-0 x-6 x-8 x-10 x-11 x-12 x-13 x-14
+          (rec x-16)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 z-1 z-2 x-5 x-6 x-7 x-8 x-9 x-14)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13 x-14 (rec x-16))) (4 0)
+    (exp (gen) x-6))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc (exp h2-0 (mul x-0 x-1 x-3 x-15))
+          (exp h2-0 (mul x-0 x-1 x-3 x-6 x-15))
+          (exp h2 (mul x x-5 (rec x-6))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((recv
+       (enc
+         (exp h2-0
+           (mul (rec x-2) (rec x-4) z-0 x-6 x-8 x-10 x-11 x-12 x-13 x-14
+             (rec x-16))) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z-2)
+          (exp h2-0
+            (mul (rec x-2) (rec x-4) z-0 z-2 x-6 x-8 x-10 x-11 x-12 x-13
+              x-14 (rec x-16))) (exp (gen) x-7) b-1 (pubk a-1))))
+    ((recv
+       (enc
+         (exp h2-0
+           (mul (rec x-4) z-0 x-6 x-10 x-11 x-12 x-13 x-14 (rec x-16)))
+         a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-8)
+          (exp h2-0
+            (mul (rec x-4) z-0 x-6 x-8 x-10 x-11 x-12 x-13 x-14
+              (rec x-16))) (exp (gen) z-1) b-2 (pubk a-2))))
+    ((recv
+       (enc (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13 x-14 (rec x-16))) a-3
+         (pubk b-3)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-0 (mul z-0 x-6 x-10 x-11 x-12 x-13 x-14 (rec x-16)))
+          (exp (gen) x-9) b-3 (pubk a-3))))
+    ((recv
+       (enc (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) x-14)
+          (exp h2-0 (mul x-6 x-10 x-11 x-12 x-13 x-14)) (exp (gen) z)
+          b-4 (pubk a-4)))))
+  (label 73)
+  (parent 28)
+  (unrealized (1 1) (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 b-3 a-3 name) (h2 h3 base)
+    (x x-0 x-1 x-2 z z-0 z-1 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12
+      x-13 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0)
+    (h2
+      (exp (gen) (mul x-0 x-1 (rec x-7) (rec x-8) (rec x-9) x-11 x-13)))
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp (gen) (mul (rec x-2) z-0 x-3 x-10 (rec x-12) x-13)))
+    (y x-5) (z z-1))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp (gen) (mul x-3 x-10 (rec x-12) x-13))) (y z-0) (z x-6))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp (gen) (mul x-3 x-13)))
+    (y x-10) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (4 0)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)) ((4 1) (3 0)))
+  (ind-zero-in (x-10 (exp (gen) (mul x-3 x-13)))
+    (z (exp (gen) (mul x-3 x-13)))
+    (z-0 (exp (gen) (mul x-3 x-10 (rec x-12) x-13)))
+    (x-6 (exp (gen) (mul x-3 x-10 (rec x-12) x-13)))
+    (x-5 (exp (gen) (mul (rec x-2) z-0 x-3 x-10 (rec x-12) x-13)))
+    (z-1 (exp (gen) (mul (rec x-2) z-0 x-3 x-10 (rec x-12) x-13))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 z-1 x-3 x-4 x-5 x-6 x-10)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-0 (exp (gen) (mul (rec x-7) (rec x-8) (rec x-9) x-13))))
+    (exp (gen) (mul x-3 x-13)) (4 0) (exp (gen) x-3))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc
+          (exp (gen)
+            (mul x-0 x-1 (rec x-7) (rec x-8) (rec x-9) x-11 x-13))
+          (exp (gen)
+            (mul x-0 x-1 x-3 (rec x-7) (rec x-8) (rec x-9) x-11 x-13))
+          (exp h2 (mul x (rec x-3) x-4)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((recv
+       (enc (exp (gen) (mul (rec x-2) z-0 x-3 x-10 (rec x-12) x-13)) a-1
+         (pubk b-1)))
+      (send
+        (enc (exp (gen) x-5)
+          (exp (gen) (mul (rec x-2) z-0 x-3 x-5 x-10 (rec x-12) x-13))
+          (exp (gen) z-1) b-1 (pubk a-1))))
+    ((recv
+       (enc (exp (gen) (mul x-3 x-10 (rec x-12) x-13)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp (gen) (mul z-0 x-3 x-10 (rec x-12) x-13)) (exp (gen) x-6)
+          b-2 (pubk a-2))))
+    ((recv (enc (exp (gen) (mul x-3 x-13)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-10) (exp (gen) (mul x-3 x-10 x-13))
+          (exp (gen) z) b-3 (pubk a-3)))))
+  (label 74)
+  (parent 28)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 name) (h3 base)
+    (x x-0 z z-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b)
+    (h2 (exp (gen) (mul (rec x) (rec x-1) x-2 x-6 x-10))) (h3 h3)
+    (x x-1))
+  (defstrand init 3 (a a-0) (b b-0)
+    (h2 (exp (gen) (mul x-0 (rec x-4) (rec x-5) x-7 x-9)))
+    (h3 (exp (gen) (mul x-6 x-10))) (x x-2))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp (gen) (mul x-2 x-6 (rec x-8) x-9))) (y z-0) (z x-3))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp (gen) (mul x-2 x-9)))
+    (y x-6) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (3 0)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)))
+  (ind-zero-in (x-6 (exp (gen) (mul x-2 x-9)))
+    (z (exp (gen) (mul x-2 x-9)))
+    (z-0 (exp (gen) (mul x-2 x-6 (rec x-8) x-9)))
+    (x-3 (exp (gen) (mul x-2 x-6 (rec x-8) x-9))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-1 x-2 x-3 x-6)
+  (operation nonce-test
+    (algebra-contracted
+      (h2 (exp (gen) (mul (rec x) (rec x-1) x-2 x-6 x-10))))
+    (exp (gen) (mul x-6 x-10)) (1 1))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv
+        (enc (exp (gen) (mul (rec x) (rec x-1) x-2 x-6 x-10))
+          (exp (gen) (mul (rec x) x-2 x-6 x-10)) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) (mul x-0 (rec x-4) (rec x-5) x-7 x-9))
+          (exp (gen) (mul x-0 x-2 (rec x-4) (rec x-5) x-7 x-9))
+          (exp (gen) (mul x-6 x-10)) b-0 (pubk a-0)))
+      (send (enc (exp (gen) (mul x-2 x-6 x-10)) (pubk b-0))))
+    ((recv (enc (exp (gen) (mul x-2 x-6 (rec x-8) x-9)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z-0) (exp (gen) (mul z-0 x-2 x-6 (rec x-8) x-9))
+          (exp (gen) x-3) b-1 (pubk a-1))))
+    ((recv (enc (exp (gen) (mul x-2 x-9)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-6) (exp (gen) (mul x-2 x-6 x-9)) (exp (gen) z)
+          b-2 (pubk a-2)))))
+  (label 75)
+  (parent 29)
+  (seen 75)
+  (unrealized (0 1))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul x-0 (rec x-4) x-5))) (x x-4))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-0)
+    (h3 (exp h2 (mul x-0 x-1 (rec x-4) x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-2 (rec x-3) x-6))) (x x-3))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-3 x-7 (rec x-8)))) (x x-8))
+  (precedes ((0 0) (2 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 2) (3 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-3 x-4 x-5 x-6 x-8)
+  (operation nonce-test (added-strand init 3) (exp h2-1 x-3) (3 1)
+    (exp (gen) x-3))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-4))
+          (exp h2 (mul x-0 (rec x-4) x-5)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x-0 x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-6) a-1 (pubk b-1)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6)
+          (exp h2 (mul x-0 x-1 (rec x-4) x-5 (rec x-6))) b-1
+          (pubk a-1)))
+      (send (enc (exp h2 (mul x-0 x-1 (rec x-4) x-5)) (pubk b-1))))
+    ((send (enc (exp (gen) x-3) a-2 (pubk b-2)))
+      (recv
+        (enc h2-1 (exp h2-1 x-3) (exp h2-0 (mul x-2 (rec x-3) x-6)) b-2
+          (pubk a-2))) (send (enc (exp h2-0 (mul x-2 x-6)) (pubk b-2))))
+    ((send (enc (exp (gen) x-8) a-3 (pubk b-3)))
+      (recv
+        (enc h2-2 (exp h2-2 x-8) (exp h2-1 (mul x-3 x-7 (rec x-8))) b-3
+          (pubk a-3)))
+      (send (enc (exp h2-1 (mul x-3 x-7)) (pubk b-3)))))
+  (label 76)
+  (parent 31)
+  (unrealized (2 1) (3 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 z x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul x-0 (rec x-4) x-5))) (x x-4))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-0)
+    (h3 (exp h2 (mul x-0 x-1 (rec x-4) x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-1 x-9))
+    (h3 (exp h2-0 (mul x-2 (rec x-3) x-6))) (x x-3))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-1 (mul x-3 x-7)))
+    (y x-8) (z z))
+  (precedes ((0 0) (2 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 0)) ((3 2) (2 1)) ((4 1) (3 1)))
+  (ind-zero-in (x-8 (exp h2-1 (mul x-3 x-7)))
+    (z (exp h2-1 (mul x-3 x-7))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-3 x-4 x-5 x-6 x-8)
+  (operation nonce-test (added-strand resp 2) (exp h2-1 (mul x-3 x-9))
+    (3 1) (exp (gen) x-3))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-4))
+          (exp h2 (mul x-0 (rec x-4) x-5)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x-0 x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-6) a-1 (pubk b-1)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6)
+          (exp h2 (mul x-0 x-1 (rec x-4) x-5 (rec x-6))) b-1
+          (pubk a-1)))
+      (send (enc (exp h2 (mul x-0 x-1 (rec x-4) x-5)) (pubk b-1))))
+    ((send (enc (exp (gen) x-3) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-1 x-9) (exp h2-1 (mul x-3 x-9))
+          (exp h2-0 (mul x-2 (rec x-3) x-6)) b-2 (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-2 x-6)) (pubk b-2))))
+    ((recv (enc (exp h2-1 (mul x-3 x-7)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-8) (exp h2-1 (mul x-3 x-7 x-8)) (exp (gen) z)
+          b-3 (pubk a-3)))))
+  (label 77)
+  (parent 31)
+  (unrealized (2 1) (3 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-3))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul x-0 x-3 (rec x-4)))) (x x-4))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-0)
+    (h3 (exp h2 (mul x-0 x-1 (rec x-2) x-3 (rec x-4)))) (x x-2))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-7))
+    (h3 (exp h2-0 (mul x-2 x-5 (rec x-6)))) (x x-6))
+  (precedes ((0 0) (2 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 2) (2 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-2 x-3 x-4 x-6)
+  (operation nonce-test (algebra-contracted (h2-1 (exp (gen) x-7)))
+    (exp (gen) (mul x-6 x-7)) (3 1) (exp (gen) x-6))
+  (traces
+    ((send (enc (exp (gen) x-3) a (pubk b)))
+      (recv (enc h2 (exp h2 x-3) h3 b (pubk a)))
+      (send (enc (exp h3 x-3) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-4))
+          (exp h2 (mul x-0 x-3 (rec x-4))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x-0 x-3)) (pubk b-0))))
+    ((send (enc (exp (gen) x-2) a-1 (pubk b-1)))
+      (recv
+        (enc h2-0 (exp h2-0 x-2)
+          (exp h2 (mul x-0 x-1 (rec x-2) x-3 (rec x-4))) b-1
+          (pubk a-1)))
+      (send (enc (exp h2 (mul x-0 x-1 x-3 (rec x-4))) (pubk b-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-7) (exp (gen) (mul x-6 x-7))
+          (exp h2-0 (mul x-2 x-5 (rec x-6))) b-2 (pubk a-2)))
+      (send (enc (exp h2-0 (mul x-2 x-5)) (pubk b-2)))))
+  (label 78)
+  (parent 31)
+  (unrealized (2 1) (3 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 z x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul x-0 (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-0 x-2))
+    (h3 (exp h2 (mul x-0 x-1 (rec x-3) x-4 (rec x-5)))) (x x-5))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-0 (mul x-5 x-7))) (y z)
+    (z x-6))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-5 x-7 x-8 (rec x-9)))) (x x-9))
+  (precedes ((0 0) (2 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 1))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 2) (3 0)))
+  (ind-zero-in (z (exp h2-0 (mul x-5 x-7)))
+    (x-6 (exp h2-0 (mul x-5 x-7))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-3 x-4 x-5 x-6 x-9)
+  (operation nonce-test (added-strand init 3) (exp h2-0 (mul x-5 x-7))
+    (3 0) (exp (gen) x-5))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-3))
+          (exp h2 (mul x-0 (rec x-3) x-4)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x-0 x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-0 x-2) (exp h2-0 (mul x-2 x-5))
+          (exp h2 (mul x-0 x-1 (rec x-3) x-4 (rec x-5))) b-1
+          (pubk a-1)))
+      (send (enc (exp h2 (mul x-0 x-1 (rec x-3) x-4)) (pubk b-1))))
+    ((recv (enc (exp h2-0 (mul x-5 x-7)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) z) (exp h2-0 (mul z x-5 x-7)) (exp (gen) x-6)
+          b-2 (pubk a-2))))
+    ((send (enc (exp (gen) x-9) a-3 (pubk b-3)))
+      (recv
+        (enc h2-1 (exp h2-1 x-9) (exp h2-0 (mul x-5 x-7 x-8 (rec x-9)))
+          b-3 (pubk a-3)))
+      (send (enc (exp h2-0 (mul x-5 x-7 x-8)) (pubk b-3)))))
+  (label 79)
+  (parent 32)
+  (unrealized (2 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 b-3 a-3 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 z z-0 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul x-0 (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-0 (mul x-2 x-10)))
+    (h3 (exp h2 (mul x-0 x-1 (rec x-3) x-4 (rec x-5)))) (x x-5))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2-0 (mul x-5 x-7 x-8 x-9 (rec x-11)))) (y z-0) (z x-6))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-0 (mul x-5 x-7 x-8)))
+    (y x-9) (z z))
+  (precedes ((0 0) (2 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 0))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 1) (3 0)))
+  (ind-zero-in (x-9 (exp h2-0 (mul x-5 x-7 x-8)))
+    (z (exp h2-0 (mul x-5 x-7 x-8)))
+    (z-0 (exp h2-0 (mul x-5 x-7 x-8 x-9 (rec x-11))))
+    (x-6 (exp h2-0 (mul x-5 x-7 x-8 x-9 (rec x-11)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-3 x-4 x-5 x-6 x-9)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-0 (mul x-5 x-7 x-8 x-9 (rec x-11))) (3 0) (exp (gen) x-5))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-3))
+          (exp h2 (mul x-0 (rec x-3) x-4)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x-0 x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-0 (mul x-2 x-10)) (exp h2-0 (mul x-2 x-5 x-10))
+          (exp h2 (mul x-0 x-1 (rec x-3) x-4 (rec x-5))) b-1
+          (pubk a-1)))
+      (send (enc (exp h2 (mul x-0 x-1 (rec x-3) x-4)) (pubk b-1))))
+    ((recv
+       (enc (exp h2-0 (mul x-5 x-7 x-8 x-9 (rec x-11))) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-0 (mul z-0 x-5 x-7 x-8 x-9 (rec x-11)))
+          (exp (gen) x-6) b-2 (pubk a-2))))
+    ((recv (enc (exp h2-0 (mul x-5 x-7 x-8)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-9) (exp h2-0 (mul x-5 x-7 x-8 x-9))
+          (exp (gen) z) b-3 (pubk a-3)))))
+  (label 80)
+  (parent 32)
+  (unrealized (2 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 name) (h2 h3 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 x-8 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-3))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul x-0 x-3 (rec x-4)))) (x x-4))
+  (defstrand init 3 (a a-1) (b b-1)
+    (h2 (exp (gen) (mul (rec x-5) x-7 x-8)))
+    (h3 (exp h2 (mul x-0 x-1 (rec x-2) x-3 (rec x-4)))) (x x-2))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp (gen) (mul x-2 x-8)))
+    (y x-6) (z z))
+  (precedes ((0 0) (2 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 0))
+    ((2 2) (1 1)) ((3 1) (2 1)))
+  (ind-zero-in (x-6 (exp (gen) (mul x-2 x-8)))
+    (z (exp (gen) (mul x-2 x-8))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-6)
+  (operation nonce-test
+    (algebra-contracted (h2-0 (exp (gen) (mul (rec x-5) x-8))))
+    (exp (gen) (mul x-2 x-8)) (3 0) (exp (gen) x-2))
+  (traces
+    ((send (enc (exp (gen) x-3) a (pubk b)))
+      (recv (enc h2 (exp h2 x-3) h3 b (pubk a)))
+      (send (enc (exp h3 x-3) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-4))
+          (exp h2 (mul x-0 x-3 (rec x-4))) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x-0 x-3)) (pubk b-0))))
+    ((send (enc (exp (gen) x-2) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) (mul (rec x-5) x-7 x-8))
+          (exp (gen) (mul x-2 (rec x-5) x-7 x-8))
+          (exp h2 (mul x-0 x-1 (rec x-2) x-3 (rec x-4))) b-1
+          (pubk a-1)))
+      (send (enc (exp h2 (mul x-0 x-1 x-3 (rec x-4))) (pubk b-1))))
+    ((recv (enc (exp (gen) (mul x-2 x-8)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-6) (exp (gen) (mul x-2 x-6 x-8)) (exp (gen) z)
+          b-2 (pubk a-2)))))
+  (label 81)
+  (parent 32)
+  (unrealized (2 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul x-2 (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-0))
+    (h3 (exp h2 (mul (rec x-1) x-2 (rec x-3) x-4 x-5))) (x x-1))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-0)
+    (h3
+      (exp h2
+        (mul (rec x-1) x-2 (rec x-3) x-4 x-5 (rec x-6) (rec x-7))))
+    (x x-7))
+  (precedes ((0 0) (3 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 2) (2 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-1 x-2 x-3 x-7)
+  (operation nonce-test (added-strand init 3)
+    (exp h2 (mul (rec x-1) x-2 (rec x-3) x-4 x-5)) (2 1))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc h2 (exp h2 x-2) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-3))
+          (exp h2 (mul x-2 (rec x-3) x-4)) b-0 (pubk a-0)))
+      (send (enc (exp h2 (mul x-2 x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul x-0 x-1))
+          (exp h2 (mul (rec x-1) x-2 (rec x-3) x-4 x-5)) b-1
+          (pubk a-1)))
+      (send (enc (exp h2 (mul x-2 (rec x-3) x-4 x-5)) (pubk b-1))))
+    ((send (enc (exp (gen) x-7) a-2 (pubk b-2)))
+      (recv
+        (enc h2-0 (exp h2-0 x-7)
+          (exp h2
+            (mul (rec x-1) x-2 (rec x-3) x-4 x-5 (rec x-6) (rec x-7)))
+          b-2 (pubk a-2)))
+      (send
+        (enc (exp h2 (mul (rec x-1) x-2 (rec x-3) x-4 x-5 (rec x-6)))
+          (pubk b-2)))))
+  (label 82)
+  (parent 33)
+  (unrealized (3 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 name) (h2 h3 base)
+    (x x-0 z x-1 y x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp h2 x-7)) (h3 h3) (x y))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul y (rec x-2) x-3 x-4 (rec x-5) x-6 x-8 (rec x-9))))
+    (x x-2))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-0))
+    (h3 (exp h2 (mul (rec x-1) y (rec x-2) x-3 x-4 (rec x-5) x-6 x-8)))
+    (x x-1))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2 (mul (rec x-1) y (rec x-2) x-3 x-4 (rec x-5)))) (y x-6)
+    (z z))
+  (precedes ((0 0) (3 0)) ((1 0) (3 0)) ((1 2) (0 1)) ((2 0) (3 0))
+    ((2 2) (1 1)) ((3 1) (2 1)))
+  (ind-zero-in
+    (x-6 (exp h2 (mul (rec x-1) y (rec x-2) x-3 x-4 (rec x-5))))
+    (z (exp h2 (mul (rec x-1) y (rec x-2) x-3 x-4 (rec x-5)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-1 y x-2 x-6)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2 (mul (rec x-1) y (rec x-2) x-3 x-4 (rec x-5) x-6 x-8))
+    (2 1))
+  (traces
+    ((send (enc (exp (gen) y) a (pubk b)))
+      (recv (enc (exp h2 x-7) (exp h2 (mul y x-7)) h3 b (pubk a)))
+      (send (enc (exp h3 y) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-2))
+          (exp h2 (mul y (rec x-2) x-3 x-4 (rec x-5) x-6 x-8 (rec x-9)))
+          b-0 (pubk a-0)))
+      (send
+        (enc (exp h2 (mul y x-3 x-4 (rec x-5) x-6 x-8 (rec x-9)))
+          (pubk b-0))))
+    ((send (enc (exp (gen) x-1) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul x-0 x-1))
+          (exp h2 (mul (rec x-1) y (rec x-2) x-3 x-4 (rec x-5) x-6 x-8))
+          b-1 (pubk a-1)))
+      (send
+        (enc (exp h2 (mul y (rec x-2) x-3 x-4 (rec x-5) x-6 x-8))
+          (pubk b-1))))
+    ((recv
+       (enc (exp h2 (mul (rec x-1) y (rec x-2) x-3 x-4 (rec x-5))) a-2
+         (pubk b-2)))
+      (send
+        (enc (exp (gen) x-6)
+          (exp h2 (mul (rec x-1) y (rec x-2) x-3 x-4 (rec x-5) x-6))
+          (exp (gen) z) b-2 (pubk a-2)))))
+  (label 83)
+  (parent 33)
+  (unrealized (0 1) (3 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 name) (h3 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 expn))
+  (defstrand init 3 (a a) (b b)
+    (h2 (exp (gen) (mul x-0 (rec x-1) (rec x-2) (rec x-3) x-4 x-4 x-6)))
+    (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp (gen) (mul (rec x-3) x-4 x-4 x-6))) (x x-0))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) x-5))
+    (h3 (exp (gen) (mul x-4 x-6))) (x x-4))
+  (precedes ((0 0) (2 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 2) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-0 x-1 x-4)
+  (operation nonce-test
+    (algebra-contracted
+      (h2
+        (exp (gen)
+          (mul x-0 (rec x-1) (rec x-2) (rec x-3) x-4 x-4 x-6))))
+    (exp (gen) (mul x-4 x-6)) (2 1))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv
+        (enc
+          (exp (gen)
+            (mul x-0 (rec x-1) (rec x-2) (rec x-3) x-4 x-4 x-6))
+          (exp (gen) (mul x-0 (rec x-2) (rec x-3) x-4 x-4 x-6)) h3 b
+          (pubk a))) (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-0))
+          (exp (gen) (mul (rec x-3) x-4 x-4 x-6)) b-0 (pubk a-0)))
+      (send
+        (enc (exp (gen) (mul x-0 (rec x-3) x-4 x-4 x-6)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-5) (exp (gen) (mul x-4 x-5))
+          (exp (gen) (mul x-4 x-6)) b-1 (pubk a-1)))
+      (send (enc (exp (gen) (mul x-4 x-4 x-6)) (pubk b-1)))))
+  (label 84)
+  (parent 33)
+  (seen 84)
+  (unrealized (0 1))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 x-4 z x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp h2 x-0)) (h3 h3) (x x-7))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul (rec x-1) x-2 x-3 (rec x-6) x-7 x-8))) (x x-6))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2 (mul x-2 x-3 (rec x-6) x-7))) (y x-8) (z x-5))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-0)
+    (h3 (exp h2 (mul x-2 x-3 (rec x-4) (rec z) (rec x-6) x-7))) (x z))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-1)
+    (h3 (exp h2-0 (mul z x-9 (rec x-10)))) (x x-10))
+  (precedes ((0 0) (3 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (4 1)) ((3 2) (2 0)) ((4 2) (3 1)))
+  (ind-zero-in (x-8 (exp h2 (mul x-2 x-3 (rec x-6) x-7)))
+    (x-5 (exp h2 (mul x-2 x-3 (rec x-6) x-7))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-5 x-6 x-7 x-8 x-10)
+  (operation nonce-test (added-strand init 3) (exp h2-0 z) (3 1)
+    (exp (gen) z))
+  (traces
+    ((send (enc (exp (gen) x-7) a (pubk b)))
+      (recv (enc (exp h2 x-0) (exp h2 (mul x-0 x-7)) h3 b (pubk a)))
+      (send (enc (exp h3 x-7) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-6))
+          (exp h2 (mul (rec x-1) x-2 x-3 (rec x-6) x-7 x-8)) b-0
+          (pubk a-0)))
+      (send (enc (exp h2 (mul (rec x-1) x-2 x-3 x-7 x-8)) (pubk b-0))))
+    ((recv (enc (exp h2 (mul x-2 x-3 (rec x-6) x-7)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-8) (exp h2 (mul x-2 x-3 (rec x-6) x-7 x-8))
+          (exp (gen) x-5) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) z) a-2 (pubk b-2)))
+      (recv
+        (enc h2-0 (exp h2-0 z)
+          (exp h2 (mul x-2 x-3 (rec x-4) (rec z) (rec x-6) x-7)) b-2
+          (pubk a-2)))
+      (send
+        (enc (exp h2 (mul x-2 x-3 (rec x-4) (rec x-6) x-7))
+          (pubk b-2))))
+    ((send (enc (exp (gen) x-10) a-3 (pubk b-3)))
+      (recv
+        (enc h2-1 (exp h2-1 x-10) (exp h2-0 (mul z x-9 (rec x-10))) b-3
+          (pubk a-3))) (send (enc (exp h2-0 (mul z x-9)) (pubk b-3)))))
+  (label 85)
+  (parent 34)
+  (unrealized (0 1) (3 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 b-3 a-3 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 x-3 x-4 z z-0 x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp h2 x-0)) (h3 h3) (x x-7))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul (rec x-1) x-2 x-3 (rec x-6) x-7 x-8))) (x x-6))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2 (mul x-2 x-3 (rec x-6) x-7))) (y x-8) (z x-5))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-0 x-11))
+    (h3 (exp h2 (mul x-2 x-3 (rec x-4) (rec z-0) (rec x-6) x-7)))
+    (x z-0))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-0 (mul z-0 x-9)))
+    (y x-10) (z z))
+  (precedes ((0 0) (3 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 0) (4 0)) ((3 2) (2 0)) ((4 1) (3 1)))
+  (ind-zero-in (x-10 (exp h2-0 (mul z-0 x-9)))
+    (z (exp h2-0 (mul z-0 x-9)))
+    (x-8 (exp h2 (mul x-2 x-3 (rec x-6) x-7)))
+    (x-5 (exp h2 (mul x-2 x-3 (rec x-6) x-7))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-5 x-6 x-7 x-8 x-10)
+  (operation nonce-test (added-strand resp 2) (exp h2-0 (mul z-0 x-11))
+    (3 1) (exp (gen) z-0))
+  (traces
+    ((send (enc (exp (gen) x-7) a (pubk b)))
+      (recv (enc (exp h2 x-0) (exp h2 (mul x-0 x-7)) h3 b (pubk a)))
+      (send (enc (exp h3 x-7) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-6))
+          (exp h2 (mul (rec x-1) x-2 x-3 (rec x-6) x-7 x-8)) b-0
+          (pubk a-0)))
+      (send (enc (exp h2 (mul (rec x-1) x-2 x-3 x-7 x-8)) (pubk b-0))))
+    ((recv (enc (exp h2 (mul x-2 x-3 (rec x-6) x-7)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-8) (exp h2 (mul x-2 x-3 (rec x-6) x-7 x-8))
+          (exp (gen) x-5) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) z-0) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-0 x-11) (exp h2-0 (mul z-0 x-11))
+          (exp h2 (mul x-2 x-3 (rec x-4) (rec z-0) (rec x-6) x-7)) b-2
+          (pubk a-2)))
+      (send
+        (enc (exp h2 (mul x-2 x-3 (rec x-4) (rec x-6) x-7))
+          (pubk b-2))))
+    ((recv (enc (exp h2-0 (mul z-0 x-9)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-10) (exp h2-0 (mul z-0 x-9 x-10))
+          (exp (gen) z) b-3 (pubk a-3)))))
+  (label 86)
+  (parent 34)
+  (unrealized (0 1) (3 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 a-2 b-2 name) (h2 h3 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp h2 x-0)) (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp h2 (mul (rec x-1) z x-2 (rec x-3) x-5 x-6))) (x x-3))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2 (mul x-2 (rec x-3) x-5 x-6))) (y z) (z x-4))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-9))
+    (h3 (exp h2 (mul x-2 (rec x-3) x-5 x-6 (rec x-7) (rec x-8))))
+    (x x-8))
+  (precedes ((0 0) (3 1)) ((1 0) (3 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 2) (2 0)))
+  (ind-zero-in (z (exp h2 (mul x-2 (rec x-3) x-5 x-6)))
+    (x-4 (exp h2 (mul x-2 (rec x-3) x-5 x-6))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-8)
+  (operation nonce-test (algebra-contracted (h2-0 (exp (gen) x-9)))
+    (exp (gen) (mul x-8 x-9)) (3 1) (exp (gen) x-8))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv (enc (exp h2 x-0) (exp h2 (mul x-0 x-2)) h3 b (pubk a)))
+      (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-3))
+          (exp h2 (mul (rec x-1) z x-2 (rec x-3) x-5 x-6)) b-0
+          (pubk a-0)))
+      (send (enc (exp h2 (mul (rec x-1) z x-2 x-5 x-6)) (pubk b-0))))
+    ((recv (enc (exp h2 (mul x-2 (rec x-3) x-5 x-6)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z) (exp h2 (mul z x-2 (rec x-3) x-5 x-6))
+          (exp (gen) x-4) b-1 (pubk a-1))))
+    ((send (enc (exp (gen) x-8) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-9) (exp (gen) (mul x-8 x-9))
+          (exp h2 (mul x-2 (rec x-3) x-5 x-6 (rec x-7) (rec x-8))) b-2
+          (pubk a-2)))
+      (send
+        (enc (exp h2 (mul x-2 (rec x-3) x-5 x-6 (rec x-7)))
+          (pubk b-2)))))
+  (label 87)
+  (parent 34)
+  (unrealized (0 1) (3 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 a-3 b-3 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 x-3 z z-0 x-4 x-5 x-6 x-7 x-8 y x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp h2 (mul x-0 x-2))) (h3 h3)
+    (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3
+      (exp h2 (mul (rec x-1) x-3 z (rec x-4) x-5 x-6 x-8 y (rec x-9))))
+    (x x-4))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1 (exp h2 (mul x-3 z (rec x-4) x-5 x-8 y (rec x-9)))) (y x-6)
+    (z z-0))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2 (mul (rec x-4) x-5 x-8 y (rec x-9)))) (y z) (z x-7))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-0)
+    (h3 (exp h2 (mul (rec x-4) x-5 x-8 y (rec x-9) x-10 (rec x-11))))
+    (x x-11))
+  (precedes ((0 0) (4 1)) ((1 0) (4 1)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)) ((4 2) (3 0)))
+  (ind-zero-in (z (exp h2 (mul (rec x-4) x-5 x-8 y (rec x-9))))
+    (x-7 (exp h2 (mul (rec x-4) x-5 x-8 y (rec x-9))))
+    (x-6 (exp h2 (mul x-3 z (rec x-4) x-5 x-8 y (rec x-9))))
+    (z-0 (exp h2 (mul x-3 z (rec x-4) x-5 x-8 y (rec x-9)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-4 x-5 x-6 x-7 x-11)
+  (operation nonce-test (added-strand init 3)
+    (exp h2 (mul (rec x-4) x-5 x-8 y (rec x-9))) (3 0))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv
+        (enc (exp h2 (mul x-0 x-2)) (exp h2 (mul x-0 x-2 x-5)) h3 b
+          (pubk a))) (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-4))
+          (exp h2
+            (mul (rec x-1) x-3 z (rec x-4) x-5 x-6 x-8 y (rec x-9))) b-0
+          (pubk a-0)))
+      (send
+        (enc (exp h2 (mul (rec x-1) x-3 z x-5 x-6 x-8 y (rec x-9)))
+          (pubk b-0))))
+    ((recv
+       (enc (exp h2 (mul x-3 z (rec x-4) x-5 x-8 y (rec x-9))) a-1
+         (pubk b-1)))
+      (send
+        (enc (exp (gen) x-6)
+          (exp h2 (mul x-3 z (rec x-4) x-5 x-6 x-8 y (rec x-9)))
+          (exp (gen) z-0) b-1 (pubk a-1))))
+    ((recv
+       (enc (exp h2 (mul (rec x-4) x-5 x-8 y (rec x-9))) a-2
+         (pubk b-2)))
+      (send
+        (enc (exp (gen) z)
+          (exp h2 (mul z (rec x-4) x-5 x-8 y (rec x-9))) (exp (gen) x-7)
+          b-2 (pubk a-2))))
+    ((send (enc (exp (gen) x-11) a-3 (pubk b-3)))
+      (recv
+        (enc h2-0 (exp h2-0 x-11)
+          (exp h2 (mul (rec x-4) x-5 x-8 y (rec x-9) x-10 (rec x-11)))
+          b-3 (pubk a-3)))
+      (send
+        (enc (exp h2 (mul (rec x-4) x-5 x-8 y (rec x-9) x-10))
+          (pubk b-3)))))
+  (label 88)
+  (parent 35)
+  (unrealized (0 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 b-3 a-3 name) (h2 h3 base)
+    (x x-0 x-1 x-2 x-3 z z-0 z-1 x-4 y x-5 x-6 x-7 y-0 x-8 x-9 x-10 x-11
+      y-1 expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp h2 (mul x-0 x-2 x-11))) (h3 h3)
+    (x y))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3
+      (exp h2
+        (mul (rec x-1) x-3 z-0 (rec x-4) y x-5 x-7 y-0 (rec x-8) x-9
+          x-10 (rec y-1)))) (x x-4))
+  (defstrand resp 2 (b b-1) (a a-1)
+    (h1
+      (exp h2
+        (mul x-3 z-0 (rec x-4) y x-7 y-0 (rec x-8) x-9 x-10 (rec y-1))))
+    (y x-5) (z z-1))
+  (defstrand resp 2 (b b-2) (a a-2)
+    (h1 (exp h2 (mul (rec x-4) y x-7 y-0 (rec x-8) x-9 x-10 (rec y-1))))
+    (y z-0) (z x-6))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2 (mul (rec x-4) y x-7 y-0 (rec x-8) x-9))) (y x-10)
+    (z z))
+  (precedes ((0 0) (4 0)) ((1 0) (4 0)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)) ((4 1) (3 0)))
+  (ind-zero-in (x-10 (exp h2 (mul (rec x-4) y x-7 y-0 (rec x-8) x-9)))
+    (z (exp h2 (mul (rec x-4) y x-7 y-0 (rec x-8) x-9)))
+    (z-0
+      (exp h2 (mul (rec x-4) y x-7 y-0 (rec x-8) x-9 x-10 (rec y-1))))
+    (x-6
+      (exp h2 (mul (rec x-4) y x-7 y-0 (rec x-8) x-9 x-10 (rec y-1))))
+    (x-5
+      (exp h2
+        (mul x-3 z-0 (rec x-4) y x-7 y-0 (rec x-8) x-9 x-10 (rec y-1))))
+    (z-1
+      (exp h2
+        (mul x-3 z-0 (rec x-4) y x-7 y-0 (rec x-8) x-9 x-10
+          (rec y-1)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 z-1 x-4 y x-5 x-6 x-10)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2 (mul (rec x-4) y x-7 y-0 (rec x-8) x-9 x-10 (rec y-1)))
+    (3 0))
+  (traces
+    ((send (enc (exp (gen) y) a (pubk b)))
+      (recv
+        (enc (exp h2 (mul x-0 x-2 x-11)) (exp h2 (mul x-0 x-2 y x-11))
+          h3 b (pubk a))) (send (enc (exp h3 y) (pubk b))))
+    ((send (enc (exp (gen) x-4) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x x-4))
+          (exp h2
+            (mul (rec x-1) x-3 z-0 (rec x-4) y x-5 x-7 y-0 (rec x-8) x-9
+              x-10 (rec y-1))) b-0 (pubk a-0)))
+      (send
+        (enc
+          (exp h2
+            (mul (rec x-1) x-3 z-0 y x-5 x-7 y-0 (rec x-8) x-9 x-10
+              (rec y-1))) (pubk b-0))))
+    ((recv
+       (enc
+         (exp h2
+           (mul x-3 z-0 (rec x-4) y x-7 y-0 (rec x-8) x-9 x-10
+             (rec y-1))) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) x-5)
+          (exp h2
+            (mul x-3 z-0 (rec x-4) y x-5 x-7 y-0 (rec x-8) x-9 x-10
+              (rec y-1))) (exp (gen) z-1) b-1 (pubk a-1))))
+    ((recv
+       (enc
+         (exp h2 (mul (rec x-4) y x-7 y-0 (rec x-8) x-9 x-10 (rec y-1)))
+         a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2
+            (mul z-0 (rec x-4) y x-7 y-0 (rec x-8) x-9 x-10 (rec y-1)))
+          (exp (gen) x-6) b-2 (pubk a-2))))
+    ((recv
+       (enc (exp h2 (mul (rec x-4) y x-7 y-0 (rec x-8) x-9)) a-3
+         (pubk b-3)))
+      (send
+        (enc (exp (gen) x-10)
+          (exp h2 (mul (rec x-4) y x-7 y-0 (rec x-8) x-9 x-10))
+          (exp (gen) z) b-3 (pubk a-3)))))
+  (label 89)
+  (parent 35)
+  (unrealized (0 1) (4 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 b-1 a-1 b-2 a-2 name) (h3 base)
+    (x x-0 x-1 z z-0 x-2 y x-3 x-4 x-5 x-6 x-7 x-8 x-9 y-0 expn))
+  (defstrand init 3 (a a) (b b)
+    (h2
+      (exp (gen)
+        (mul x-0 (rec x-2) y y (rec x-4) (rec x-5) x-6 x-8 y-0)))
+    (h3 h3) (x x-2))
+  (defstrand init 3 (a a-0) (b b-0) (h2 (exp (gen) x))
+    (h3 (exp (gen) (mul (rec x-1) z-0 y x-7 x-9 y-0))) (x y))
+  (defstrand resp 2 (b b-1) (a a-1) (h1 (exp (gen) (mul y x-7 x-9 y-0)))
+    (y z-0) (z x-3))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp (gen) (mul y y-0))) (y x-7)
+    (z z))
+  (precedes ((0 0) (3 0)) ((1 0) (3 0)) ((1 2) (0 1)) ((2 1) (1 1))
+    ((3 1) (2 0)))
+  (ind-zero-in (x-7 (exp (gen) (mul y y-0))) (z (exp (gen) (mul y y-0)))
+    (z-0 (exp (gen) (mul y x-7 x-9 y-0)))
+    (x-3 (exp (gen) (mul y x-7 x-9 y-0))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-2 y x-3 x-7)
+  (operation nonce-test
+    (algebra-contracted
+      (h2 (exp (gen) (mul (rec x-2) y y (rec x-4) (rec x-5) x-6 y-0))))
+    (exp (gen) (mul y y-0)) (3 0))
+  (traces
+    ((send (enc (exp (gen) x-2) a (pubk b)))
+      (recv
+        (enc
+          (exp (gen)
+            (mul x-0 (rec x-2) y y (rec x-4) (rec x-5) x-6 x-8 y-0))
+          (exp (gen) (mul x-0 y y (rec x-4) (rec x-5) x-6 x-8 y-0)) h3 b
+          (pubk a))) (send (enc (exp h3 x-2) (pubk b))))
+    ((send (enc (exp (gen) y) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x) (exp (gen) (mul x y))
+          (exp (gen) (mul (rec x-1) z-0 y x-7 x-9 y-0)) b-0 (pubk a-0)))
+      (send
+        (enc (exp (gen) (mul (rec x-1) z-0 y y x-7 x-9 y-0))
+          (pubk b-0))))
+    ((recv (enc (exp (gen) (mul y x-7 x-9 y-0)) a-1 (pubk b-1)))
+      (send
+        (enc (exp (gen) z-0) (exp (gen) (mul z-0 y x-7 x-9 y-0))
+          (exp (gen) x-3) b-1 (pubk a-1))))
+    ((recv (enc (exp (gen) (mul y y-0)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-7) (exp (gen) (mul y x-7 y-0)) (exp (gen) z)
+          b-2 (pubk a-2)))))
+  (label 90)
+  (parent 35)
+  (unrealized (0 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 a-4 b-4 a-5 b-5 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 h2-4 h2-5 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-7))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-6) x-7))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-6 (rec x-8)))) (x x-8))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 (rec x-5) x-8))) (x x-5))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-3)
+    (h3 (exp h2-2 (mul x-2 x-5 (rec x-9)))) (x x-9))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-4)
+    (h3 (exp h2-3 (mul x-3 (rec x-4) x-9))) (x x-4))
+  (defstrand init 3 (a a-5) (b b-5) (h2 h2-5)
+    (h3 (exp h2-4 (mul x-4 x-10 (rec x-11)))) (x x-11))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 0) (5 1))
+    ((4 2) (3 1)) ((5 0) (6 1)) ((5 2) (4 1)) ((6 2) (5 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-4 x-5 x-6 x-7 x-8 x-9 x-11)
+  (operation nonce-test (added-strand init 3) (exp h2-4 x-4) (5 1)
+    (exp (gen) x-4))
+  (traces
+    ((send (enc (exp (gen) x-7) a (pubk b)))
+      (recv (enc h2 (exp h2 x-7) h3 b (pubk a)))
+      (send (enc (exp h3 x-7) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x (rec x-6) x-7)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-7)) (pubk b-0))))
+    ((send (enc (exp (gen) x-8) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-8) (exp h2-0 (mul x-0 x-6 (rec x-8))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) x-5) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-5) (exp h2-1 (mul x-1 (rec x-5) x-8)) b-2
+          (pubk a-2))) (send (enc (exp h2-1 (mul x-1 x-8)) (pubk b-2))))
+    ((send (enc (exp (gen) x-9) a-3 (pubk b-3)))
+      (recv
+        (enc h2-3 (exp h2-3 x-9) (exp h2-2 (mul x-2 x-5 (rec x-9))) b-3
+          (pubk a-3))) (send (enc (exp h2-2 (mul x-2 x-5)) (pubk b-3))))
+    ((send (enc (exp (gen) x-4) a-4 (pubk b-4)))
+      (recv
+        (enc h2-4 (exp h2-4 x-4) (exp h2-3 (mul x-3 (rec x-4) x-9)) b-4
+          (pubk a-4))) (send (enc (exp h2-3 (mul x-3 x-9)) (pubk b-4))))
+    ((send (enc (exp (gen) x-11) a-5 (pubk b-5)))
+      (recv
+        (enc h2-5 (exp h2-5 x-11) (exp h2-4 (mul x-4 x-10 (rec x-11)))
+          b-5 (pubk a-5)))
+      (send (enc (exp h2-4 (mul x-4 x-10)) (pubk b-5)))))
+  (label 91)
+  (parent 37)
+  (unrealized (1 1) (2 1) (3 1) (4 1) (5 1) (6 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 a-4 b-4 b-5 a-5 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 h2-4 base)
+    (x x-0 x-1 x-2 x-3 z x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-7))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-6) x-7))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-6 (rec x-8)))) (x x-8))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 (rec x-5) x-8))) (x x-5))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-3)
+    (h3 (exp h2-2 (mul x-2 x-5 (rec x-9)))) (x x-9))
+  (defstrand init 3 (a a-4) (b b-4) (h2 (exp h2-4 x-12))
+    (h3 (exp h2-3 (mul x-3 (rec x-4) x-9))) (x x-4))
+  (defstrand resp 2 (b b-5) (a a-5) (h1 (exp h2-4 (mul x-4 x-10)))
+    (y x-11) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 0) (5 1))
+    ((4 2) (3 1)) ((5 0) (6 0)) ((5 2) (4 1)) ((6 1) (5 1)))
+  (ind-zero-in (x-11 (exp h2-4 (mul x-4 x-10)))
+    (z (exp h2-4 (mul x-4 x-10))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-4 x-5 x-6 x-7 x-8 x-9 x-11)
+  (operation nonce-test (added-strand resp 2) (exp h2-4 (mul x-4 x-12))
+    (5 1) (exp (gen) x-4))
+  (traces
+    ((send (enc (exp (gen) x-7) a (pubk b)))
+      (recv (enc h2 (exp h2 x-7) h3 b (pubk a)))
+      (send (enc (exp h3 x-7) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x (rec x-6) x-7)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-7)) (pubk b-0))))
+    ((send (enc (exp (gen) x-8) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-8) (exp h2-0 (mul x-0 x-6 (rec x-8))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) x-5) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-5) (exp h2-1 (mul x-1 (rec x-5) x-8)) b-2
+          (pubk a-2))) (send (enc (exp h2-1 (mul x-1 x-8)) (pubk b-2))))
+    ((send (enc (exp (gen) x-9) a-3 (pubk b-3)))
+      (recv
+        (enc h2-3 (exp h2-3 x-9) (exp h2-2 (mul x-2 x-5 (rec x-9))) b-3
+          (pubk a-3))) (send (enc (exp h2-2 (mul x-2 x-5)) (pubk b-3))))
+    ((send (enc (exp (gen) x-4) a-4 (pubk b-4)))
+      (recv
+        (enc (exp h2-4 x-12) (exp h2-4 (mul x-4 x-12))
+          (exp h2-3 (mul x-3 (rec x-4) x-9)) b-4 (pubk a-4)))
+      (send (enc (exp h2-3 (mul x-3 x-9)) (pubk b-4))))
+    ((recv (enc (exp h2-4 (mul x-4 x-10)) a-5 (pubk b-5)))
+      (send
+        (enc (exp (gen) x-11) (exp h2-4 (mul x-4 x-10 x-11))
+          (exp (gen) z) b-5 (pubk a-5)))))
+  (label 92)
+  (parent 37)
+  (unrealized (1 1) (2 1) (3 1) (4 1) (5 1) (6 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-4) x-6))) (x x-4))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 x-4 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-3)
+    (h3 (exp h2-2 (mul x-2 (rec x-3) x-7))) (x x-3))
+  (defstrand init 3 (a a-4) (b b-4) (h2 (exp (gen) x-10))
+    (h3 (exp h2-3 (mul x-3 x-8 (rec x-9)))) (x x-9))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 0) (5 1))
+    ((4 2) (3 1)) ((5 2) (4 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-3 x-4 x-5 x-6 x-7 x-9)
+  (operation nonce-test (algebra-contracted (h2-4 (exp (gen) x-10)))
+    (exp (gen) (mul x-9 x-10)) (5 1) (exp (gen) x-9))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x x-5 (rec x-6))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-4) (exp h2-0 (mul x-0 (rec x-4) x-6)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) x-7) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-7) (exp h2-1 (mul x-1 x-4 (rec x-7))) b-2
+          (pubk a-2))) (send (enc (exp h2-1 (mul x-1 x-4)) (pubk b-2))))
+    ((send (enc (exp (gen) x-3) a-3 (pubk b-3)))
+      (recv
+        (enc h2-3 (exp h2-3 x-3) (exp h2-2 (mul x-2 (rec x-3) x-7)) b-3
+          (pubk a-3))) (send (enc (exp h2-2 (mul x-2 x-7)) (pubk b-3))))
+    ((send (enc (exp (gen) x-9) a-4 (pubk b-4)))
+      (recv
+        (enc (exp (gen) x-10) (exp (gen) (mul x-9 x-10))
+          (exp h2-3 (mul x-3 x-8 (rec x-9))) b-4 (pubk a-4)))
+      (send (enc (exp h2-3 (mul x-3 x-8)) (pubk b-4)))))
+  (label 93)
+  (parent 37)
+  (unrealized (1 1) (2 1) (3 1) (4 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 b-4 a-4 a-5 b-5 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 h2-4 base)
+    (x x-0 x-1 x-2 x-3 z x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-6))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-5) x-6))) (x x-5))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-5 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 (rec x-4) x-7))) (x x-4))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp h2-3 x-3))
+    (h3 (exp h2-2 (mul x-2 x-4 (rec x-8)))) (x x-8))
+  (defstrand resp 2 (b b-4) (a a-4) (h1 (exp h2-3 (mul x-8 x-10))) (y z)
+    (z x-9))
+  (defstrand init 3 (a a-5) (b b-5) (h2 h2-4)
+    (h3 (exp h2-3 (mul x-8 x-10 x-11 (rec x-12)))) (x x-12))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 0) (6 1))
+    ((4 2) (3 1)) ((5 1) (4 1)) ((6 2) (5 0)))
+  (ind-zero-in (z (exp h2-3 (mul x-8 x-10)))
+    (x-9 (exp h2-3 (mul x-8 x-10))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-4 x-5 x-6 x-7 x-8 x-9 x-12)
+  (operation nonce-test (added-strand init 3) (exp h2-3 (mul x-8 x-10))
+    (5 0) (exp (gen) x-8))
+  (traces
+    ((send (enc (exp (gen) x-6) a (pubk b)))
+      (recv (enc h2 (exp h2 x-6) h3 b (pubk a)))
+      (send (enc (exp h3 x-6) (pubk b))))
+    ((send (enc (exp (gen) x-5) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-5) (exp h2 (mul x (rec x-5) x-6)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-6)) (pubk b-0))))
+    ((send (enc (exp (gen) x-7) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-7) (exp h2-0 (mul x-0 x-5 (rec x-7))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-5)) (pubk b-1))))
+    ((send (enc (exp (gen) x-4) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-4) (exp h2-1 (mul x-1 (rec x-4) x-7)) b-2
+          (pubk a-2))) (send (enc (exp h2-1 (mul x-1 x-7)) (pubk b-2))))
+    ((send (enc (exp (gen) x-8) a-3 (pubk b-3)))
+      (recv
+        (enc (exp h2-3 x-3) (exp h2-3 (mul x-3 x-8))
+          (exp h2-2 (mul x-2 x-4 (rec x-8))) b-3 (pubk a-3)))
+      (send (enc (exp h2-2 (mul x-2 x-4)) (pubk b-3))))
+    ((recv (enc (exp h2-3 (mul x-8 x-10)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) z) (exp h2-3 (mul z x-8 x-10)) (exp (gen) x-9)
+          b-4 (pubk a-4))))
+    ((send (enc (exp (gen) x-12) a-5 (pubk b-5)))
+      (recv
+        (enc h2-4 (exp h2-4 x-12)
+          (exp h2-3 (mul x-8 x-10 x-11 (rec x-12))) b-5 (pubk a-5)))
+      (send (enc (exp h2-3 (mul x-8 x-10 x-11)) (pubk b-5)))))
+  (label 94)
+  (parent 38)
+  (unrealized (1 1) (2 1) (3 1) (4 1) (6 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 b-4 a-4 b-5 a-5 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 base)
+    (x x-0 x-1 x-2 x-3 z z-0 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12 x-13
+      x-14 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-6))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-5) x-6))) (x x-5))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-5 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 (rec x-4) x-7))) (x x-4))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp h2-3 (mul x-3 x-13)))
+    (h3 (exp h2-2 (mul x-2 x-4 (rec x-8)))) (x x-8))
+  (defstrand resp 2 (b b-4) (a a-4)
+    (h1 (exp h2-3 (mul x-8 x-10 x-11 x-12 (rec x-14)))) (y z-0) (z x-9))
+  (defstrand resp 2 (b b-5) (a a-5) (h1 (exp h2-3 (mul x-8 x-10 x-11)))
+    (y x-12) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 0) (6 0))
+    ((4 2) (3 1)) ((5 1) (4 1)) ((6 1) (5 0)))
+  (ind-zero-in (x-12 (exp h2-3 (mul x-8 x-10 x-11)))
+    (z (exp h2-3 (mul x-8 x-10 x-11)))
+    (z-0 (exp h2-3 (mul x-8 x-10 x-11 x-12 (rec x-14))))
+    (x-9 (exp h2-3 (mul x-8 x-10 x-11 x-12 (rec x-14)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-4 x-5 x-6 x-7 x-8 x-9 x-12)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-3 (mul x-8 x-10 x-11 x-12 (rec x-14))) (5 0)
+    (exp (gen) x-8))
+  (traces
+    ((send (enc (exp (gen) x-6) a (pubk b)))
+      (recv (enc h2 (exp h2 x-6) h3 b (pubk a)))
+      (send (enc (exp h3 x-6) (pubk b))))
+    ((send (enc (exp (gen) x-5) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-5) (exp h2 (mul x (rec x-5) x-6)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-6)) (pubk b-0))))
+    ((send (enc (exp (gen) x-7) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-7) (exp h2-0 (mul x-0 x-5 (rec x-7))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-5)) (pubk b-1))))
+    ((send (enc (exp (gen) x-4) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-4) (exp h2-1 (mul x-1 (rec x-4) x-7)) b-2
+          (pubk a-2))) (send (enc (exp h2-1 (mul x-1 x-7)) (pubk b-2))))
+    ((send (enc (exp (gen) x-8) a-3 (pubk b-3)))
+      (recv
+        (enc (exp h2-3 (mul x-3 x-13)) (exp h2-3 (mul x-3 x-8 x-13))
+          (exp h2-2 (mul x-2 x-4 (rec x-8))) b-3 (pubk a-3)))
+      (send (enc (exp h2-2 (mul x-2 x-4)) (pubk b-3))))
+    ((recv
+       (enc (exp h2-3 (mul x-8 x-10 x-11 x-12 (rec x-14))) a-4
+         (pubk b-4)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-3 (mul z-0 x-8 x-10 x-11 x-12 (rec x-14)))
+          (exp (gen) x-9) b-4 (pubk a-4))))
+    ((recv (enc (exp h2-3 (mul x-8 x-10 x-11)) a-5 (pubk b-5)))
+      (send
+        (enc (exp (gen) x-12) (exp h2-3 (mul x-8 x-10 x-11 x-12))
+          (exp (gen) z) b-5 (pubk a-5)))))
+  (label 95)
+  (parent 38)
+  (unrealized (1 1) (2 1) (3 1) (4 1) (6 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 z x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-4) x-6))) (x x-4))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 x-4 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-3) (b b-3)
+    (h2 (exp (gen) (mul (rec x-8) x-10 x-11)))
+    (h3 (exp h2-2 (mul x-2 (rec x-3) x-7))) (x x-3))
+  (defstrand resp 2 (b b-4) (a a-4) (h1 (exp (gen) (mul x-3 x-11)))
+    (y x-9) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 0) (5 0))
+    ((4 2) (3 1)) ((5 1) (4 1)))
+  (ind-zero-in (x-9 (exp (gen) (mul x-3 x-11)))
+    (z (exp (gen) (mul x-3 x-11))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-3 x-4 x-5 x-6 x-7 x-9)
+  (operation nonce-test
+    (algebra-contracted (h2-3 (exp (gen) (mul (rec x-8) x-11))))
+    (exp (gen) (mul x-3 x-11)) (5 0) (exp (gen) x-3))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x x-5 (rec x-6))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-4) (exp h2-0 (mul x-0 (rec x-4) x-6)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) x-7) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-7) (exp h2-1 (mul x-1 x-4 (rec x-7))) b-2
+          (pubk a-2))) (send (enc (exp h2-1 (mul x-1 x-4)) (pubk b-2))))
+    ((send (enc (exp (gen) x-3) a-3 (pubk b-3)))
+      (recv
+        (enc (exp (gen) (mul (rec x-8) x-10 x-11))
+          (exp (gen) (mul x-3 (rec x-8) x-10 x-11))
+          (exp h2-2 (mul x-2 (rec x-3) x-7)) b-3 (pubk a-3)))
+      (send (enc (exp h2-2 (mul x-2 x-7)) (pubk b-3))))
+    ((recv (enc (exp (gen) (mul x-3 x-11)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) x-9) (exp (gen) (mul x-3 x-9 x-11))
+          (exp (gen) z) b-4 (pubk a-4)))))
+  (label 96)
+  (parent 38)
+  (unrealized (1 1) (2 1) (3 1) (4 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-4) x-6))) (x x-4))
+  (defstrand init 3 (a a-2) (b b-2) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-1 x-4 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp (gen) x-2))
+    (h3 (exp h2-2 (mul (rec x-3) x-7 x-8))) (x x-3))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-3)
+    (h3 (exp h2-2 (mul (rec x-3) x-7 x-8 x-9 (rec x-10)))) (x x-10))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (5 1)) ((3 2) (2 1)) ((4 0) (5 1))
+    ((4 2) (3 1)) ((5 2) (4 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-3 x-4 x-5 x-6 x-7 x-10)
+  (operation nonce-test (added-strand init 3)
+    (exp h2-2 (mul (rec x-3) x-7 x-8)) (4 1))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x x-5 (rec x-6))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-4) (exp h2-0 (mul x-0 (rec x-4) x-6)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) x-7) a-2 (pubk b-2)))
+      (recv
+        (enc h2-2 (exp h2-2 x-7) (exp h2-1 (mul x-1 x-4 (rec x-7))) b-2
+          (pubk a-2))) (send (enc (exp h2-1 (mul x-1 x-4)) (pubk b-2))))
+    ((send (enc (exp (gen) x-3) a-3 (pubk b-3)))
+      (recv
+        (enc (exp (gen) x-2) (exp (gen) (mul x-2 x-3))
+          (exp h2-2 (mul (rec x-3) x-7 x-8)) b-3 (pubk a-3)))
+      (send (enc (exp h2-2 (mul x-7 x-8)) (pubk b-3))))
+    ((send (enc (exp (gen) x-10) a-4 (pubk b-4)))
+      (recv
+        (enc h2-3 (exp h2-3 x-10)
+          (exp h2-2 (mul (rec x-3) x-7 x-8 x-9 (rec x-10))) b-4
+          (pubk a-4)))
+      (send (enc (exp h2-2 (mul (rec x-3) x-7 x-8 x-9)) (pubk b-4)))))
+  (label 97)
+  (parent 39)
+  (unrealized (1 1) (2 1) (3 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 z x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-4) x-6))) (x x-4))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-2 x-11))
+    (h3 (exp h2-1 (mul x-1 x-4 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp (gen) x-2))
+    (h3 (exp h2-2 (mul (rec x-3) x-7 x-8 x-9 x-10 (rec x-12)))) (x x-3))
+  (defstrand resp 2 (b b-4) (a a-4)
+    (h1 (exp h2-2 (mul (rec x-3) x-7 x-8 x-9))) (y x-10) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (5 0)) ((3 2) (2 1)) ((4 0) (5 0))
+    ((4 2) (3 1)) ((5 1) (4 1)))
+  (ind-zero-in (x-10 (exp h2-2 (mul (rec x-3) x-7 x-8 x-9)))
+    (z (exp h2-2 (mul (rec x-3) x-7 x-8 x-9))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-3 x-4 x-5 x-6 x-7 x-10)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-2 (mul (rec x-3) x-7 x-8 x-9 x-10 (rec x-12))) (4 1))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x x-5 (rec x-6))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-4) (exp h2-0 (mul x-0 (rec x-4) x-6)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) x-7) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-2 x-11) (exp h2-2 (mul x-7 x-11))
+          (exp h2-1 (mul x-1 x-4 (rec x-7))) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-4)) (pubk b-2))))
+    ((send (enc (exp (gen) x-3) a-3 (pubk b-3)))
+      (recv
+        (enc (exp (gen) x-2) (exp (gen) (mul x-2 x-3))
+          (exp h2-2 (mul (rec x-3) x-7 x-8 x-9 x-10 (rec x-12))) b-3
+          (pubk a-3)))
+      (send
+        (enc (exp h2-2 (mul x-7 x-8 x-9 x-10 (rec x-12))) (pubk b-3))))
+    ((recv (enc (exp h2-2 (mul (rec x-3) x-7 x-8 x-9)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) x-10)
+          (exp h2-2 (mul (rec x-3) x-7 x-8 x-9 x-10)) (exp (gen) z) b-4
+          (pubk a-4)))))
+  (label 98)
+  (parent 39)
+  (unrealized (1 1) (2 1) (3 1) (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-3 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2)
+    (h2 (exp (gen) (mul (rec x-2) (rec x-6) x-7 x-7 x-9)))
+    (h3 (exp h2-1 (mul x-1 (rec x-2) x-5))) (x x-2))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp (gen) x-8))
+    (h3 (exp (gen) (mul x-7 x-9))) (x x-7))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 2) (3 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-2 x-3 x-4 x-5 x-7)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-2 (exp (gen) (mul (rec x-2) (rec x-6) x-7 x-7 x-9))))
+    (exp (gen) (mul x-7 x-9)) (4 1))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x (rec x-3) x-4)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-5) (exp h2-0 (mul x-0 x-3 (rec x-5))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-2) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) (mul (rec x-2) (rec x-6) x-7 x-7 x-9))
+          (exp (gen) (mul (rec x-6) x-7 x-7 x-9))
+          (exp h2-1 (mul x-1 (rec x-2) x-5)) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-5)) (pubk b-2))))
+    ((send (enc (exp (gen) x-7) a-3 (pubk b-3)))
+      (recv
+        (enc (exp (gen) x-8) (exp (gen) (mul x-7 x-8))
+          (exp (gen) (mul x-7 x-9)) b-3 (pubk a-3)))
+      (send (enc (exp (gen) (mul x-7 x-7 x-9)) (pubk b-3)))))
+  (label 99)
+  (parent 39)
+  (unrealized (1 1) (2 1) (3 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 a-4 b-4 a-5 b-5 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 h2-4 base)
+    (x x-0 x-1 x-2 x-3 x-4 z x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-8))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-7) x-8))) (x x-7))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-7 (rec x-9)))) (x x-9))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-2 x-2))
+    (h3 (exp h2-1 (mul x-1 (rec x-6) x-9))) (x x-6))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-2 (mul x-3 x-6)))
+    (y x-10) (z x-5))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-3)
+    (h3 (exp h2-2 (mul x-3 x-4 (rec z) x-6))) (x z))
+  (defstrand init 3 (a a-5) (b b-5) (h2 h2-4)
+    (h3 (exp h2-3 (mul z x-11 (rec x-12)))) (x x-12))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (5 1)) ((3 2) (2 1)) ((4 1) (3 1))
+    ((5 0) (6 1)) ((5 2) (4 0)) ((6 2) (5 1)))
+  (ind-zero-in (x-10 (exp h2-2 (mul x-3 x-6)))
+    (x-5 (exp h2-2 (mul x-3 x-6))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-5 x-6 x-7 x-8 x-9 x-10 x-12)
+  (operation nonce-test (added-strand init 3) (exp h2-3 z) (5 1)
+    (exp (gen) z))
+  (traces
+    ((send (enc (exp (gen) x-8) a (pubk b)))
+      (recv (enc h2 (exp h2 x-8) h3 b (pubk a)))
+      (send (enc (exp h3 x-8) (pubk b))))
+    ((send (enc (exp (gen) x-7) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-7) (exp h2 (mul x (rec x-7) x-8)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-8)) (pubk b-0))))
+    ((send (enc (exp (gen) x-9) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-9) (exp h2-0 (mul x-0 x-7 (rec x-9))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-7)) (pubk b-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-2 x-2) (exp h2-2 (mul x-2 x-6))
+          (exp h2-1 (mul x-1 (rec x-6) x-9)) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-9)) (pubk b-2))))
+    ((recv (enc (exp h2-2 (mul x-3 x-6)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-10) (exp h2-2 (mul x-3 x-6 x-10))
+          (exp (gen) x-5) b-3 (pubk a-3))))
+    ((send (enc (exp (gen) z) a-4 (pubk b-4)))
+      (recv
+        (enc h2-3 (exp h2-3 z) (exp h2-2 (mul x-3 x-4 (rec z) x-6)) b-4
+          (pubk a-4)))
+      (send (enc (exp h2-2 (mul x-3 x-4 x-6)) (pubk b-4))))
+    ((send (enc (exp (gen) x-12) a-5 (pubk b-5)))
+      (recv
+        (enc h2-4 (exp h2-4 x-12) (exp h2-3 (mul z x-11 (rec x-12))) b-5
+          (pubk a-5))) (send (enc (exp h2-3 (mul z x-11)) (pubk b-5)))))
+  (label 100)
+  (parent 40)
+  (unrealized (1 1) (2 1) (3 1) (5 1) (6 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 a-4 b-4 b-5 a-5 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 base)
+    (x x-0 x-1 x-2 x-3 x-4 z z-0 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12 x-13
+      expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-8))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-7) x-8))) (x x-7))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-7 (rec x-9)))) (x x-9))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-2 x-2))
+    (h3 (exp h2-1 (mul x-1 (rec x-6) x-9))) (x x-6))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-2 (mul x-3 x-6)))
+    (y x-10) (z x-5))
+  (defstrand init 3 (a a-4) (b b-4) (h2 (exp h2-3 x-13))
+    (h3 (exp h2-2 (mul x-3 x-4 (rec z-0) x-6))) (x z-0))
+  (defstrand resp 2 (b b-5) (a a-5) (h1 (exp h2-3 (mul z-0 x-11)))
+    (y x-12) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (5 1)) ((3 2) (2 1)) ((4 1) (3 1))
+    ((5 0) (6 0)) ((5 2) (4 0)) ((6 1) (5 1)))
+  (ind-zero-in (x-12 (exp h2-3 (mul z-0 x-11)))
+    (z (exp h2-3 (mul z-0 x-11))) (x-10 (exp h2-2 (mul x-3 x-6)))
+    (x-5 (exp h2-2 (mul x-3 x-6))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-5 x-6 x-7 x-8 x-9 x-10 x-12)
+  (operation nonce-test (added-strand resp 2) (exp h2-3 (mul z-0 x-13))
+    (5 1) (exp (gen) z-0))
+  (traces
+    ((send (enc (exp (gen) x-8) a (pubk b)))
+      (recv (enc h2 (exp h2 x-8) h3 b (pubk a)))
+      (send (enc (exp h3 x-8) (pubk b))))
+    ((send (enc (exp (gen) x-7) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-7) (exp h2 (mul x (rec x-7) x-8)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-8)) (pubk b-0))))
+    ((send (enc (exp (gen) x-9) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-9) (exp h2-0 (mul x-0 x-7 (rec x-9))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-7)) (pubk b-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-2 x-2) (exp h2-2 (mul x-2 x-6))
+          (exp h2-1 (mul x-1 (rec x-6) x-9)) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-9)) (pubk b-2))))
+    ((recv (enc (exp h2-2 (mul x-3 x-6)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-10) (exp h2-2 (mul x-3 x-6 x-10))
+          (exp (gen) x-5) b-3 (pubk a-3))))
+    ((send (enc (exp (gen) z-0) a-4 (pubk b-4)))
+      (recv
+        (enc (exp h2-3 x-13) (exp h2-3 (mul z-0 x-13))
+          (exp h2-2 (mul x-3 x-4 (rec z-0) x-6)) b-4 (pubk a-4)))
+      (send (enc (exp h2-2 (mul x-3 x-4 x-6)) (pubk b-4))))
+    ((recv (enc (exp h2-3 (mul z-0 x-11)) a-5 (pubk b-5)))
+      (send
+        (enc (exp (gen) x-12) (exp h2-3 (mul z-0 x-11 x-12))
+          (exp (gen) z) b-5 (pubk a-5)))))
+  (label 101)
+  (parent 40)
+  (unrealized (1 1) (2 1) (3 1) (5 1) (6 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 z x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-4 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-3) x-5))) (x x-3))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-2 x-2))
+    (h3 (exp h2-1 (mul x-1 x-3 (rec x-6)))) (x x-6))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp h2-2 (mul x-6 x-8))) (y z)
+    (z x-7))
+  (defstrand init 3 (a a-4) (b b-4) (h2 (exp (gen) x-11))
+    (h3 (exp h2-2 (mul x-6 x-8 x-9 (rec x-10)))) (x x-10))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (5 1)) ((3 2) (2 1)) ((4 1) (3 1))
+    ((5 2) (4 0)))
+  (ind-zero-in (z (exp h2-2 (mul x-6 x-8)))
+    (x-7 (exp h2-2 (mul x-6 x-8))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-3 x-4 x-5 x-6 x-7 x-10)
+  (operation nonce-test (algebra-contracted (h2-3 (exp (gen) x-11)))
+    (exp (gen) (mul x-10 x-11)) (5 1) (exp (gen) x-10))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-5) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-5) (exp h2 (mul x x-4 (rec x-5))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-3) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-3) (exp h2-0 (mul x-0 (rec x-3) x-5)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-5)) (pubk b-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-2 x-2) (exp h2-2 (mul x-2 x-6))
+          (exp h2-1 (mul x-1 x-3 (rec x-6))) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-3)) (pubk b-2))))
+    ((recv (enc (exp h2-2 (mul x-6 x-8)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) z) (exp h2-2 (mul z x-6 x-8)) (exp (gen) x-7)
+          b-3 (pubk a-3))))
+    ((send (enc (exp (gen) x-10) a-4 (pubk b-4)))
+      (recv
+        (enc (exp (gen) x-11) (exp (gen) (mul x-10 x-11))
+          (exp h2-2 (mul x-6 x-8 x-9 (rec x-10))) b-4 (pubk a-4)))
+      (send (enc (exp h2-2 (mul x-6 x-8 x-9)) (pubk b-4)))))
+  (label 102)
+  (parent 40)
+  (unrealized (1 1) (2 1) (3 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 b-4 a-4 a-5 b-5 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 base)
+    (x x-0 x-1 x-2 x-3 x-4 z z-0 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12 x-13
+      x-14 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-7))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-6) x-7))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-6 (rec x-8)))) (x x-8))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-2 (mul x-2 x-3)))
+    (h3 (exp h2-1 (mul x-1 (rec x-5) x-8))) (x x-5))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-2 (mul (rec x-4) z x-5 x-11 x-12))) (y x-9) (z z-0))
+  (defstrand resp 2 (b b-4) (a a-4) (h1 (exp h2-2 (mul x-5 x-11 x-12)))
+    (y z) (z x-10))
+  (defstrand init 3 (a a-5) (b b-5) (h2 h2-3)
+    (h3 (exp h2-2 (mul x-5 x-11 x-12 x-13 (rec x-14)))) (x x-14))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (6 1)) ((3 2) (2 1)) ((4 1) (3 1))
+    ((5 1) (4 0)) ((6 2) (5 0)))
+  (ind-zero-in (z (exp h2-2 (mul x-5 x-11 x-12)))
+    (x-10 (exp h2-2 (mul x-5 x-11 x-12)))
+    (x-9 (exp h2-2 (mul (rec x-4) z x-5 x-11 x-12)))
+    (z-0 (exp h2-2 (mul (rec x-4) z x-5 x-11 x-12))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-5 x-6 x-7 x-8 x-9 x-10 x-14)
+  (operation nonce-test (added-strand init 3)
+    (exp h2-2 (mul x-5 x-11 x-12)) (5 0) (exp (gen) x-5))
+  (traces
+    ((send (enc (exp (gen) x-7) a (pubk b)))
+      (recv (enc h2 (exp h2 x-7) h3 b (pubk a)))
+      (send (enc (exp h3 x-7) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x (rec x-6) x-7)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-7)) (pubk b-0))))
+    ((send (enc (exp (gen) x-8) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-8) (exp h2-0 (mul x-0 x-6 (rec x-8))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) x-5) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-2 (mul x-2 x-3)) (exp h2-2 (mul x-2 x-3 x-5))
+          (exp h2-1 (mul x-1 (rec x-5) x-8)) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-8)) (pubk b-2))))
+    ((recv
+       (enc (exp h2-2 (mul (rec x-4) z x-5 x-11 x-12)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-9)
+          (exp h2-2 (mul (rec x-4) z x-5 x-9 x-11 x-12)) (exp (gen) z-0)
+          b-3 (pubk a-3))))
+    ((recv (enc (exp h2-2 (mul x-5 x-11 x-12)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) z) (exp h2-2 (mul z x-5 x-11 x-12))
+          (exp (gen) x-10) b-4 (pubk a-4))))
+    ((send (enc (exp (gen) x-14) a-5 (pubk b-5)))
+      (recv
+        (enc h2-3 (exp h2-3 x-14)
+          (exp h2-2 (mul x-5 x-11 x-12 x-13 (rec x-14))) b-5
+          (pubk a-5)))
+      (send (enc (exp h2-2 (mul x-5 x-11 x-12 x-13)) (pubk b-5)))))
+  (label 103)
+  (parent 41)
+  (unrealized (1 1) (2 1) (3 1) (6 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 b-4 a-4 b-5 a-5 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 x-4 z z-0 z-1 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12
+      x-13 x-14 x-15 x-16 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-7))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-6) x-7))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-6 (rec x-8)))) (x x-8))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp h2-2 (mul x-2 x-3 x-15)))
+    (h3 (exp h2-1 (mul x-1 (rec x-5) x-8))) (x x-5))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1
+      (exp h2-2 (mul (rec x-4) z-0 x-5 x-11 x-12 x-13 x-14 (rec x-16))))
+    (y x-9) (z z-1))
+  (defstrand resp 2 (b b-4) (a a-4)
+    (h1 (exp h2-2 (mul x-5 x-11 x-12 x-13 x-14 (rec x-16)))) (y z-0)
+    (z x-10))
+  (defstrand resp 2 (b b-5) (a a-5)
+    (h1 (exp h2-2 (mul x-5 x-11 x-12 x-13))) (y x-14) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (6 0)) ((3 2) (2 1)) ((4 1) (3 1))
+    ((5 1) (4 0)) ((6 1) (5 0)))
+  (ind-zero-in (x-14 (exp h2-2 (mul x-5 x-11 x-12 x-13)))
+    (z (exp h2-2 (mul x-5 x-11 x-12 x-13)))
+    (z-0 (exp h2-2 (mul x-5 x-11 x-12 x-13 x-14 (rec x-16))))
+    (x-10 (exp h2-2 (mul x-5 x-11 x-12 x-13 x-14 (rec x-16))))
+    (x-9
+      (exp h2-2 (mul (rec x-4) z-0 x-5 x-11 x-12 x-13 x-14 (rec x-16))))
+    (z-1
+      (exp h2-2
+        (mul (rec x-4) z-0 x-5 x-11 x-12 x-13 x-14 (rec x-16)))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 z-1 x-5 x-6 x-7 x-8 x-9 x-10 x-14)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-2 (mul x-5 x-11 x-12 x-13 x-14 (rec x-16))) (5 0)
+    (exp (gen) x-5))
+  (traces
+    ((send (enc (exp (gen) x-7) a (pubk b)))
+      (recv (enc h2 (exp h2 x-7) h3 b (pubk a)))
+      (send (enc (exp h3 x-7) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x (rec x-6) x-7)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-7)) (pubk b-0))))
+    ((send (enc (exp (gen) x-8) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-8) (exp h2-0 (mul x-0 x-6 (rec x-8))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) x-5) a-2 (pubk b-2)))
+      (recv
+        (enc (exp h2-2 (mul x-2 x-3 x-15))
+          (exp h2-2 (mul x-2 x-3 x-5 x-15))
+          (exp h2-1 (mul x-1 (rec x-5) x-8)) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-8)) (pubk b-2))))
+    ((recv
+       (enc
+         (exp h2-2
+           (mul (rec x-4) z-0 x-5 x-11 x-12 x-13 x-14 (rec x-16))) a-3
+         (pubk b-3)))
+      (send
+        (enc (exp (gen) x-9)
+          (exp h2-2
+            (mul (rec x-4) z-0 x-5 x-9 x-11 x-12 x-13 x-14 (rec x-16)))
+          (exp (gen) z-1) b-3 (pubk a-3))))
+    ((recv
+       (enc (exp h2-2 (mul x-5 x-11 x-12 x-13 x-14 (rec x-16))) a-4
+         (pubk b-4)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-2 (mul z-0 x-5 x-11 x-12 x-13 x-14 (rec x-16)))
+          (exp (gen) x-10) b-4 (pubk a-4))))
+    ((recv (enc (exp h2-2 (mul x-5 x-11 x-12 x-13)) a-5 (pubk b-5)))
+      (send
+        (enc (exp (gen) x-14) (exp h2-2 (mul x-5 x-11 x-12 x-13 x-14))
+          (exp (gen) z) b-5 (pubk a-5)))))
+  (label 104)
+  (parent 41)
+  (unrealized (1 1) (2 1) (3 1) (6 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 z z-0 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12 x-13
+      expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-4 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-3) x-5))) (x x-3))
+  (defstrand init 3 (a a-2) (b b-2)
+    (h2 (exp (gen) (mul x-2 (rec x-8) (rec x-9) x-11 x-13)))
+    (h3 (exp h2-1 (mul x-1 x-3 (rec x-6)))) (x x-6))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp (gen) (mul x-6 x-10 (rec x-12) x-13))) (y z-0) (z x-7))
+  (defstrand resp 2 (b b-4) (a a-4) (h1 (exp (gen) (mul x-6 x-13)))
+    (y x-10) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (5 0)) ((3 2) (2 1)) ((4 1) (3 1))
+    ((5 1) (4 0)))
+  (ind-zero-in (x-10 (exp (gen) (mul x-6 x-13)))
+    (z (exp (gen) (mul x-6 x-13)))
+    (z-0 (exp (gen) (mul x-6 x-10 (rec x-12) x-13)))
+    (x-7 (exp (gen) (mul x-6 x-10 (rec x-12) x-13))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-3 x-4 x-5 x-6 x-7 x-10)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-2 (exp (gen) (mul (rec x-8) (rec x-9) x-13))))
+    (exp (gen) (mul x-6 x-13)) (5 0) (exp (gen) x-6))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-5) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-5) (exp h2 (mul x x-4 (rec x-5))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-3) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-3) (exp h2-0 (mul x-0 (rec x-3) x-5)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-5)) (pubk b-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) (mul x-2 (rec x-8) (rec x-9) x-11 x-13))
+          (exp (gen) (mul x-2 x-6 (rec x-8) (rec x-9) x-11 x-13))
+          (exp h2-1 (mul x-1 x-3 (rec x-6))) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-1 x-3)) (pubk b-2))))
+    ((recv
+       (enc (exp (gen) (mul x-6 x-10 (rec x-12) x-13)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp (gen) (mul z-0 x-6 x-10 (rec x-12) x-13)) (exp (gen) x-7)
+          b-3 (pubk a-3))))
+    ((recv (enc (exp (gen) (mul x-6 x-13)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) x-10) (exp (gen) (mul x-6 x-10 x-13))
+          (exp (gen) z) b-4 (pubk a-4)))))
+  (label 105)
+  (parent 41)
+  (unrealized (1 1) (2 1) (3 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1)
+    (h2 (exp (gen) (mul (rec x-1) x-2 (rec x-5) x-7 x-10)))
+    (h3 (exp h2-0 (mul x-0 x-3 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2)
+    (h2 (exp (gen) (mul (rec x-6) x-8 x-9)))
+    (h3 (exp (gen) (mul x-7 x-10))) (x x-2))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp (gen) (mul x-2 x-9)))
+    (y x-7) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 0) (4 0)) ((3 2) (2 1)) ((4 1) (3 1)))
+  (ind-zero-in (x-7 (exp (gen) (mul x-2 x-9)))
+    (z (exp (gen) (mul x-2 x-9))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-5 x-7)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-1 (exp (gen) (mul (rec x-1) x-2 (rec x-5) x-7 x-10))))
+    (exp (gen) (mul x-7 x-10)) (3 1))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x (rec x-3) x-4)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) (mul (rec x-1) x-2 (rec x-5) x-7 x-10))
+          (exp (gen) (mul (rec x-1) x-2 x-7 x-10))
+          (exp h2-0 (mul x-0 x-3 (rec x-5))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-2) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) (mul (rec x-6) x-8 x-9))
+          (exp (gen) (mul x-2 (rec x-6) x-8 x-9))
+          (exp (gen) (mul x-7 x-10)) b-2 (pubk a-2)))
+      (send (enc (exp (gen) (mul x-2 x-7 x-10)) (pubk b-2))))
+    ((recv (enc (exp (gen) (mul x-2 x-9)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-7) (exp (gen) (mul x-2 x-7 x-9)) (exp (gen) z)
+          b-3 (pubk a-3)))))
+  (label 106)
+  (parent 42)
+  (seen 106)
+  (unrealized (1 1) (2 1))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-6))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-6 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-5) x-7))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-1))
+    (h3 (exp h2-1 (mul x-2 x-5 (rec x-8)))) (x x-8))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-2 x-3 (rec x-4) x-5 (rec x-8)))) (x x-4))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-3)
+    (h3 (exp h2-2 (mul x-4 x-9 (rec x-10)))) (x x-10))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 0) (5 1))
+    ((4 2) (3 1)) ((5 2) (4 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-4 x-5 x-6 x-7 x-8 x-10)
+  (operation nonce-test (added-strand init 3) (exp h2-2 x-4) (4 1)
+    (exp (gen) x-4))
+  (traces
+    ((send (enc (exp (gen) x-6) a (pubk b)))
+      (recv (enc h2 (exp h2 x-6) h3 b (pubk a)))
+      (send (enc (exp h3 x-6) (pubk b))))
+    ((send (enc (exp (gen) x-7) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-7) (exp h2 (mul x x-6 (rec x-7))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-6)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-5) (exp h2-0 (mul x-0 (rec x-5) x-7)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-7)) (pubk b-1))))
+    ((send (enc (exp (gen) x-8) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-1) (exp (gen) (mul x-1 x-8))
+          (exp h2-1 (mul x-2 x-5 (rec x-8))) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-2 x-5)) (pubk b-2))))
+    ((send (enc (exp (gen) x-4) a-3 (pubk b-3)))
+      (recv
+        (enc h2-2 (exp h2-2 x-4)
+          (exp h2-1 (mul x-2 x-3 (rec x-4) x-5 (rec x-8))) b-3
+          (pubk a-3)))
+      (send (enc (exp h2-1 (mul x-2 x-3 x-5 (rec x-8))) (pubk b-3))))
+    ((send (enc (exp (gen) x-10) a-4 (pubk b-4)))
+      (recv
+        (enc h2-3 (exp h2-3 x-10) (exp h2-2 (mul x-4 x-9 (rec x-10)))
+          b-4 (pubk a-4)))
+      (send (enc (exp h2-2 (mul x-4 x-9)) (pubk b-4)))))
+  (label 107)
+  (parent 43)
+  (unrealized (1 1) (2 1) (4 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 z x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-6))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-6 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 (rec x-5) x-7))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-1))
+    (h3 (exp h2-1 (mul x-2 x-5 (rec x-8)))) (x x-8))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp h2-2 x-11))
+    (h3 (exp h2-1 (mul x-2 x-3 (rec x-4) x-5 (rec x-8)))) (x x-4))
+  (defstrand resp 2 (b b-4) (a a-4) (h1 (exp h2-2 (mul x-4 x-9)))
+    (y x-10) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 0) (5 0))
+    ((4 2) (3 1)) ((5 1) (4 1)))
+  (ind-zero-in (x-10 (exp h2-2 (mul x-4 x-9)))
+    (z (exp h2-2 (mul x-4 x-9))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-4 x-5 x-6 x-7 x-8 x-10)
+  (operation nonce-test (added-strand resp 2) (exp h2-2 (mul x-4 x-11))
+    (4 1) (exp (gen) x-4))
+  (traces
+    ((send (enc (exp (gen) x-6) a (pubk b)))
+      (recv (enc h2 (exp h2 x-6) h3 b (pubk a)))
+      (send (enc (exp h3 x-6) (pubk b))))
+    ((send (enc (exp (gen) x-7) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-7) (exp h2 (mul x x-6 (rec x-7))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-6)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-5) (exp h2-0 (mul x-0 (rec x-5) x-7)) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-7)) (pubk b-1))))
+    ((send (enc (exp (gen) x-8) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-1) (exp (gen) (mul x-1 x-8))
+          (exp h2-1 (mul x-2 x-5 (rec x-8))) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-2 x-5)) (pubk b-2))))
+    ((send (enc (exp (gen) x-4) a-3 (pubk b-3)))
+      (recv
+        (enc (exp h2-2 x-11) (exp h2-2 (mul x-4 x-11))
+          (exp h2-1 (mul x-2 x-3 (rec x-4) x-5 (rec x-8))) b-3
+          (pubk a-3)))
+      (send (enc (exp h2-1 (mul x-2 x-3 x-5 (rec x-8))) (pubk b-3))))
+    ((recv (enc (exp h2-2 (mul x-4 x-9)) a-4 (pubk b-4)))
+      (send
+        (enc (exp (gen) x-10) (exp h2-2 (mul x-4 x-9 x-10))
+          (exp (gen) z) b-4 (pubk a-4)))))
+  (label 108)
+  (parent 43)
+  (unrealized (1 1) (2 1) (4 1) (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1) (h2 h2-1)
+    (h3 (exp h2-0 (mul x-0 x-3 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-1))
+    (h3 (exp h2-1 (mul (rec x-2) x-5 x-6))) (x x-2))
+  (defstrand init 3 (a a-3) (b b-3) (h2 (exp (gen) x-9))
+    (h3 (exp h2-1 (mul (rec x-2) x-5 x-6 x-7 (rec x-8)))) (x x-8))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 1))
+    ((2 2) (1 1)) ((3 0) (4 1)) ((3 2) (2 1)) ((4 2) (3 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-2 x-3 x-4 x-5 x-8)
+  (operation nonce-test (algebra-contracted (h2-2 (exp (gen) x-9)))
+    (exp (gen) (mul x-8 x-9)) (4 1) (exp (gen) x-8))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x (rec x-3) x-4)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc h2-1 (exp h2-1 x-5) (exp h2-0 (mul x-0 x-3 (rec x-5))) b-1
+          (pubk a-1))) (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-2) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-1) (exp (gen) (mul x-1 x-2))
+          (exp h2-1 (mul (rec x-2) x-5 x-6)) b-2 (pubk a-2)))
+      (send (enc (exp h2-1 (mul x-5 x-6)) (pubk b-2))))
+    ((send (enc (exp (gen) x-8) a-3 (pubk b-3)))
+      (recv
+        (enc (exp (gen) x-9) (exp (gen) (mul x-8 x-9))
+          (exp h2-1 (mul (rec x-2) x-5 x-6 x-7 (rec x-8))) b-3
+          (pubk a-3)))
+      (send (enc (exp h2-1 (mul (rec x-2) x-5 x-6 x-7)) (pubk b-3)))))
+  (label 109)
+  (parent 43)
+  (unrealized (1 1) (2 1) (4 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 a-4 b-4 name)
+    (h2 h3 h2-0 h2-1 h2-2 base)
+    (x x-0 x-1 x-2 x-3 z x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 x-2))
+    (h3 (exp h2-0 (mul x-0 (rec x-4) x-6))) (x x-4))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-1))
+    (h3 (exp h2-1 (mul (rec x-3) z x-4 (rec x-7) x-9 x-10))) (x x-7))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-1 (mul x-4 (rec x-7) x-9 x-10))) (y z) (z x-8))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-4 (rec x-7) x-9 x-10 (rec x-11) (rec x-12))))
+    (x x-12))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (5 1))
+    ((2 2) (1 1)) ((3 0) (5 1)) ((3 2) (2 1)) ((4 1) (3 1))
+    ((5 2) (4 0)))
+  (ind-zero-in (z (exp h2-1 (mul x-4 (rec x-7) x-9 x-10)))
+    (x-8 (exp h2-1 (mul x-4 (rec x-7) x-9 x-10))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-4 x-5 x-6 x-7 x-8 x-12)
+  (operation nonce-test (added-strand init 3)
+    (exp h2-1 (mul x-4 (rec x-7) x-9 x-10)) (4 0))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x x-5 (rec x-6))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 x-2) (exp h2-1 (mul x-2 x-4))
+          (exp h2-0 (mul x-0 (rec x-4) x-6)) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) x-7) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-1) (exp (gen) (mul x-1 x-7))
+          (exp h2-1 (mul (rec x-3) z x-4 (rec x-7) x-9 x-10)) b-2
+          (pubk a-2)))
+      (send (enc (exp h2-1 (mul (rec x-3) z x-4 x-9 x-10)) (pubk b-2))))
+    ((recv (enc (exp h2-1 (mul x-4 (rec x-7) x-9 x-10)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) z) (exp h2-1 (mul z x-4 (rec x-7) x-9 x-10))
+          (exp (gen) x-8) b-3 (pubk a-3))))
+    ((send (enc (exp (gen) x-12) a-4 (pubk b-4)))
+      (recv
+        (enc h2-2 (exp h2-2 x-12)
+          (exp h2-1 (mul x-4 (rec x-7) x-9 x-10 (rec x-11) (rec x-12)))
+          b-4 (pubk a-4)))
+      (send
+        (enc (exp h2-1 (mul x-4 (rec x-7) x-9 x-10 (rec x-11)))
+          (pubk b-4)))))
+  (label 110)
+  (parent 44)
+  (unrealized (1 1) (2 1) (5 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 b-4 a-4 name)
+    (h2 h3 h2-0 h2-1 base)
+    (x x-0 x-1 x-2 x-3 z z-0 x-4 x-5 x-6 y x-7 x-8 x-9 x-10 x-11 x-12
+      x-13 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-5))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-5 (rec x-6)))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 (mul x-2 x-12)))
+    (h3 (exp h2-0 (mul x-0 (rec x-4) x-6))) (x x-4))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-1))
+    (h3
+      (exp h2-1
+        (mul (rec x-3) z-0 x-4 (rec y) x-8 x-9 (rec x-10) x-11 x-13)))
+    (x y))
+  (defstrand resp 2 (b b-3) (a a-3)
+    (h1 (exp h2-1 (mul x-4 (rec y) x-8 x-9 (rec x-10) x-11 x-13)))
+    (y z-0) (z x-7))
+  (defstrand resp 2 (b b-4) (a a-4)
+    (h1 (exp h2-1 (mul x-4 (rec y) x-8 x-9 (rec x-10)))) (y x-11) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (5 0))
+    ((2 2) (1 1)) ((3 0) (5 0)) ((3 2) (2 1)) ((4 1) (3 1))
+    ((5 1) (4 0)))
+  (ind-zero-in (x-11 (exp h2-1 (mul x-4 (rec y) x-8 x-9 (rec x-10))))
+    (z (exp h2-1 (mul x-4 (rec y) x-8 x-9 (rec x-10))))
+    (z-0 (exp h2-1 (mul x-4 (rec y) x-8 x-9 (rec x-10) x-11 x-13)))
+    (x-7 (exp h2-1 (mul x-4 (rec y) x-8 x-9 (rec x-10) x-11 x-13))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z z-0 x-4 x-5 x-6 y x-7 x-11)
+  (operation nonce-test (added-strand resp 2)
+    (exp h2-1 (mul x-4 (rec y) x-8 x-9 (rec x-10) x-11 x-13)) (4 0))
+  (traces
+    ((send (enc (exp (gen) x-5) a (pubk b)))
+      (recv (enc h2 (exp h2 x-5) h3 b (pubk a)))
+      (send (enc (exp h3 x-5) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x x-5 (rec x-6))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-5)) (pubk b-0))))
+    ((send (enc (exp (gen) x-4) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 (mul x-2 x-12)) (exp h2-1 (mul x-2 x-4 x-12))
+          (exp h2-0 (mul x-0 (rec x-4) x-6)) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((send (enc (exp (gen) y) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-1) (exp (gen) (mul x-1 y))
+          (exp h2-1
+            (mul (rec x-3) z-0 x-4 (rec y) x-8 x-9 (rec x-10) x-11
+              x-13)) b-2 (pubk a-2)))
+      (send
+        (enc
+          (exp h2-1
+            (mul (rec x-3) z-0 x-4 x-8 x-9 (rec x-10) x-11 x-13))
+          (pubk b-2))))
+    ((recv
+       (enc (exp h2-1 (mul x-4 (rec y) x-8 x-9 (rec x-10) x-11 x-13))
+         a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) z-0)
+          (exp h2-1 (mul z-0 x-4 (rec y) x-8 x-9 (rec x-10) x-11 x-13))
+          (exp (gen) x-7) b-3 (pubk a-3))))
+    ((recv
+       (enc (exp h2-1 (mul x-4 (rec y) x-8 x-9 (rec x-10))) a-4
+         (pubk b-4)))
+      (send
+        (enc (exp (gen) x-11)
+          (exp h2-1 (mul x-4 (rec y) x-8 x-9 (rec x-10) x-11))
+          (exp (gen) z) b-4 (pubk a-4)))))
+  (label 111)
+  (parent 44)
+  (unrealized (1 1) (2 1) (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 b-3 a-3 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 z x-2 x-3 x-4 x-5 x-6 x-7 x-8 x-9 x-10 x-11 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-4))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-3) x-4))) (x x-3))
+  (defstrand init 3 (a a-1) (b b-1)
+    (h2 (exp (gen) (mul x-2 (rec x-6) (rec x-7) x-9 x-11)))
+    (h3 (exp h2-0 (mul x-0 x-3 (rec x-5)))) (x x-5))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-1))
+    (h3 (exp (gen) (mul x-5 x-8 (rec x-10) x-11))) (x x-2))
+  (defstrand resp 2 (b b-3) (a a-3) (h1 (exp (gen) (mul x-5 x-11)))
+    (y x-8) (z z))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 0))
+    ((2 2) (1 1)) ((3 0) (4 0)) ((3 2) (2 1)) ((4 1) (3 1)))
+  (ind-zero-in (x-8 (exp (gen) (mul x-5 x-11)))
+    (z (exp (gen) (mul x-5 x-11))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-2 x-3 x-4 x-5 x-8)
+  (operation nonce-test
+    (algebra-contracted
+      (h2-1 (exp (gen) (mul x-2 (rec x-6) (rec x-7) x-11))))
+    (exp (gen) (mul x-5 x-11)) (4 0))
+  (traces
+    ((send (enc (exp (gen) x-4) a (pubk b)))
+      (recv (enc h2 (exp h2 x-4) h3 b (pubk a)))
+      (send (enc (exp h3 x-4) (pubk b))))
+    ((send (enc (exp (gen) x-3) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-3) (exp h2 (mul x (rec x-3) x-4)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-4)) (pubk b-0))))
+    ((send (enc (exp (gen) x-5) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) (mul x-2 (rec x-6) (rec x-7) x-9 x-11))
+          (exp (gen) (mul x-2 x-5 (rec x-6) (rec x-7) x-9 x-11))
+          (exp h2-0 (mul x-0 x-3 (rec x-5))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-3)) (pubk b-1))))
+    ((send (enc (exp (gen) x-2) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-1) (exp (gen) (mul x-1 x-2))
+          (exp (gen) (mul x-5 x-8 (rec x-10) x-11)) b-2 (pubk a-2)))
+      (send
+        (enc (exp (gen) (mul x-2 x-5 x-8 (rec x-10) x-11)) (pubk b-2))))
+    ((recv (enc (exp (gen) (mul x-5 x-11)) a-3 (pubk b-3)))
+      (send
+        (enc (exp (gen) x-8) (exp (gen) (mul x-5 x-8 x-11))
+          (exp (gen) z) b-3 (pubk a-3)))))
+  (label 112)
+  (parent 44)
+  (unrealized (1 1) (2 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 a-2 b-2 name) (h2 h3 h2-0 base)
+    (x x-0 x-1 x-2 x-3 x-4 x-5 x-6 x-7 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-1))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x x-1 (rec x-2)))) (x x-2))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp (gen) (mul x-4 x-7)))
+    (h3 (exp h2-0 (mul x-0 x-2 (rec x-7)))) (x x-7))
+  (defstrand init 3 (a a-2) (b b-2) (h2 (exp (gen) x-3))
+    (h3 (exp (gen) (mul x-5 x-6))) (x x-6))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (3 1))
+    ((2 2) (1 1)) ((3 2) (2 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-1 x-2 x-6 x-7)
+  (operation nonce-test
+    (algebra-contracted (x-8 x-7)
+      (x-9 (mul (rec x-4) x-5 x-6 x-6 (rec x-7) (rec x-7))) (x-10 x-6)
+      (x-11 x-5) (x-12 x-4)) (exp (gen) (mul x-4 x-7)) (2 1))
+  (traces
+    ((send (enc (exp (gen) x-1) a (pubk b)))
+      (recv (enc h2 (exp h2 x-1) h3 b (pubk a)))
+      (send (enc (exp h3 x-1) (pubk b))))
+    ((send (enc (exp (gen) x-2) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-2) (exp h2 (mul x x-1 (rec x-2))) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-1)) (pubk b-0))))
+    ((send (enc (exp (gen) x-7) a-1 (pubk b-1)))
+      (recv
+        (enc (exp (gen) (mul x-4 x-7)) (exp (gen) (mul x-4 x-7 x-7))
+          (exp h2-0 (mul x-0 x-2 (rec x-7))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-2)) (pubk b-1))))
+    ((send (enc (exp (gen) x-6) a-2 (pubk b-2)))
+      (recv
+        (enc (exp (gen) x-3) (exp (gen) (mul x-3 x-6))
+          (exp (gen) (mul x-5 x-6)) b-2 (pubk a-2)))
+      (send (enc (exp (gen) (mul x-5 x-6 x-6)) (pubk b-2)))))
+  (label 113)
+  (parent 45)
+  (seen 113)
+  (unrealized (1 1) (2 1))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b a-0 b-0 a-1 b-1 b-2 a-2 a-3 b-3 a-4 b-4 a-5 b-5 name)
+    (h2 h3 h2-0 h2-1 h2-2 h2-3 h2-4 base)
+    (x x-0 x-1 x-2 x-3 x-4 z x-5 x-6 x-7 x-8 x-9 x-10 x-11 x-12 expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x-7))
+  (defstrand init 3 (a a-0) (b b-0) (h2 h2-0)
+    (h3 (exp h2 (mul x (rec x-6) x-7))) (x x-6))
+  (defstrand init 3 (a a-1) (b b-1) (h2 (exp h2-1 x-1))
+    (h3 (exp h2-0 (mul x-0 x-6 (rec x-8)))) (x x-8))
+  (defstrand resp 2 (b b-2) (a a-2) (h1 (exp h2-1 (mul x-2 x-8)))
+    (y x-5) (z x-9))
+  (defstrand init 3 (a a-3) (b b-3) (h2 h2-2)
+    (h3 (exp h2-1 (mul x-2 x-3 x-8 (rec x-10)))) (x x-10))
+  (defstrand init 3 (a a-4) (b b-4) (h2 h2-3)
+    (h3 (exp h2-2 (mul x-4 (rec z) x-10))) (x z))
+  (defstrand init 3 (a a-5) (b b-5) (h2 h2-4)
+    (h3 (exp h2-3 (mul z x-11 (rec x-12)))) (x x-12))
+  (precedes ((0 0) (1 1)) ((1 0) (2 1)) ((1 2) (0 1)) ((2 0) (4 1))
+    ((2 2) (1 1)) ((3 1) (2 1)) ((4 0) (5 1)) ((4 2) (3 0))
+    ((5 0) (6 1)) ((5 2) (4 1)) ((6 2) (5 1)))
+  (ind-zero-in (x-5 (exp h2-1 (mul x-2 x-8)))
+    (x-9 (exp h2-1 (mul x-2 x-8))))
+  (non-orig (privk a) (privk b))
+  (uniq-gen z x-5 x-6 x-7 x-8 x-9 x-10 x-12)
+  (operation nonce-test (added-strand init 3) (exp h2-3 z) (5 1)
+    (exp (gen) z))
+  (traces
+    ((send (enc (exp (gen) x-7) a (pubk b)))
+      (recv (enc h2 (exp h2 x-7) h3 b (pubk a)))
+      (send (enc (exp h3 x-7) (pubk b))))
+    ((send (enc (exp (gen) x-6) a-0 (pubk b-0)))
+      (recv
+        (enc h2-0 (exp h2-0 x-6) (exp h2 (mul x (rec x-6) x-7)) b-0
+          (pubk a-0))) (send (enc (exp h2 (mul x x-7)) (pubk b-0))))
+    ((send (enc (exp (gen) x-8) a-1 (pubk b-1)))
+      (recv
+        (enc (exp h2-1 x-1) (exp h2-1 (mul x-1 x-8))
+          (exp h2-0 (mul x-0 x-6 (rec x-8))) b-1 (pubk a-1)))
+      (send (enc (exp h2-0 (mul x-0 x-6)) (pubk b-1))))
+    ((recv (enc (exp h2-1 (mul x-2 x-8)) a-2 (pubk b-2)))
+      (send
+        (enc (exp (gen) x-5) (exp h2-1 (mul x-2 x-5 x-8))
+          (exp (gen) x-9) b-2 (pubk a-2))))
+    ((send (enc (exp (gen) x-10) a-3 (pubk b-3)))
+      (recv
+        (enc h2-2 (exp h2-2 x-10)
+          (exp h2-1 (mul x-2 x-3 x-8 (rec x-10))) b-3 (pubk a-3)))
+      (send (enc (exp h2-1 (mul x-2 x-3 x-8)) (pubk b-3))))
+    ((send (enc (exp (gen) z) a-4 (pubk b-4)))
+      (recv
+        (enc h2-3 (exp h2-3 z) (exp h2-2 (mul x-4 (rec z) x-10)) b-4
+          (pubk a-4)))
+      (send (enc (exp h2-2 (mul x-4 x-10)) (pubk b-4))))
+    ((send (enc (exp (gen) x-12) a-5 (pubk b-5)))
+      (recv
+        (enc h2-4 (exp h2-4 x-12) (exp h2-3 (mul z x-11 (rec x-12))) b-5
+          (pubk a-5))) (send (enc (exp h2-3 (mul z x-11)) (pubk b-5)))))
+  (label 114)
+  (parent 46)
+  (unrealized (1 1) (2 1) (4 1) (5 1) (6 1))
+  (comment "3 in cohort - 3 not yet seen"))
diff --git a/tst/dhnsl_basic.scm b/tst/dhnsl_basic.scm
new file mode 100644
--- /dev/null
+++ b/tst/dhnsl_basic.scm
@@ -0,0 +1,43 @@
+(herald "Diffie-Hellman enhanced Needham-Schroeder-Lowe Protocol"
+;  (limit 1)
+  (algebra diffie-hellman))
+
+(defprotocol dhnsl diffie-hellman
+  (defrole resp
+    (vars (b a name) (h1 base) (y expn))
+    (trace
+     (recv (enc h1 a (pubk b)))
+     (send (enc h1 (exp (gen) y) b (pubk a)))
+     (recv (enc (exp (gen) y) (pubk b)))
+    )
+;    (uniq-gen y)
+    (comment "Y and Z should be assumed to be freshly chosen per role")
+  )
+  (defrole init
+    (vars (a b name) (h2 base) (x expn))
+    (trace
+     (send (enc (exp (gen) x) a (pubk b)))
+     (recv (enc (exp (gen) x) h2 b (pubk a)))
+     (send (enc h2 (pubk b)))
+    )
+;    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role")
+  )
+  (comment "Needham-Schroeder-Lowe DH challenge/responses in place of nonces")
+)
+
+;;; The initiator point-of-view
+(defskeleton dhnsl
+  (vars (a b name) (h2 h3 base) (x expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (x x))
+  (non-orig (privk b) (privk a))
+  (uniq-gen x)
+  (comment "Initiator point-of-view"))
+
+;; The responder point-of-view
+(defskeleton dhnsl
+  (vars (a b name) (h1 base) (y z expn))
+  (defstrand resp 3 (a a) (b b) (h1 h1) (y y))
+  (non-orig (privk a))
+  (uniq-gen y)
+  (comment "Responder point-of-view"))
diff --git a/tst/dhnsl_basic.tst b/tst/dhnsl_basic.tst
new file mode 100644
--- /dev/null
+++ b/tst/dhnsl_basic.tst
@@ -0,0 +1,176 @@
+(herald "Diffie-Hellman enhanced Needham-Schroeder-Lowe Protocol"
+  (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from dhnsl_basic.scm")
+
+(defprotocol dhnsl diffie-hellman
+  (defrole resp
+    (vars (b a name) (h1 base) (y expn))
+    (trace (recv (enc h1 a (pubk b)))
+      (send (enc h1 (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b))))
+    (comment "Y and Z should be assumed to be freshly chosen per role"))
+  (defrole init
+    (vars (a b name) (h2 base) (x expn))
+    (trace (send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 b (pubk a))) (send (enc h2 (pubk b))))
+    (comment "X should be assumed to be freshly chosen per role"))
+  (comment
+    "Needham-Schroeder-Lowe DH challenge/responses in place of nonces"))
+
+(defskeleton dhnsl
+  (vars (a b name) (h2 base) (x expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (x x))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (comment "Initiator point-of-view")
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 b (pubk a)))
+      (send (enc h2 (pubk b)))))
+  (label 0)
+  (unrealized (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b name) (h2 base) (x y expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (x x))
+  (defstrand resp 2 (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (operation nonce-test (added-strand resp 2) (exp (gen) x) (0 1)
+    (enc (exp (gen) x) a (pubk b)))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 b (pubk a))) (send (enc h2 (pubk b))))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a)))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b name) (x y expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (defstrand resp 2 (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (operation nonce-test (contracted (h2 (exp (gen) y))) (exp (gen) x)
+    (0 1) (enc (exp (gen) x) a (pubk b))
+    (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (send (enc (exp (gen) y) (pubk b))))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a)))))
+  (label 2)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (h2 (exp (gen) y)) (x x))))
+  (origs))
+
+(defskeleton dhnsl
+  (vars (a b name) (h2 base) (y expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (x y))
+  (defstrand resp 2 (b b) (a a) (h1 (exp (gen) y)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (operation nonce-test (displaced 2 1 resp 2) (exp (gen) y-0) (0 1)
+    (enc (exp (gen) y-0) a (pubk b))
+    (enc (exp (gen) y-0) (exp (gen) y-1) b (pubk a)))
+  (traces
+    ((send (enc (exp (gen) y) a (pubk b)))
+      (recv (enc (exp (gen) y) h2 b (pubk a))) (send (enc h2 (pubk b))))
+    ((recv (enc (exp (gen) y) a (pubk b)))
+      (send (enc (exp (gen) y) (exp (gen) y) b (pubk a)))))
+  (label 3)
+  (parent 1)
+  (unrealized (0 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b name) (y expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp (gen) y)) (x y))
+  (defstrand resp 2 (b b) (a a) (h1 (exp (gen) y)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (operation nonce-test (contracted (h2 (exp (gen) y))) (exp (gen) y)
+    (0 1) (enc (exp (gen) y) a (pubk b))
+    (enc (exp (gen) y) (exp (gen) y) b (pubk a)))
+  (traces
+    ((send (enc (exp (gen) y) a (pubk b)))
+      (recv (enc (exp (gen) y) (exp (gen) y) b (pubk a)))
+      (send (enc (exp (gen) y) (pubk b))))
+    ((recv (enc (exp (gen) y) a (pubk b)))
+      (send (enc (exp (gen) y) (exp (gen) y) b (pubk a)))))
+  (label 4)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (h2 (exp (gen) y)) (x y))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol dhnsl diffie-hellman
+  (defrole resp
+    (vars (b a name) (h1 base) (y expn))
+    (trace (recv (enc h1 a (pubk b)))
+      (send (enc h1 (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b))))
+    (comment "Y and Z should be assumed to be freshly chosen per role"))
+  (defrole init
+    (vars (a b name) (h2 base) (x expn))
+    (trace (send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 b (pubk a))) (send (enc h2 (pubk b))))
+    (comment "X should be assumed to be freshly chosen per role"))
+  (comment
+    "Needham-Schroeder-Lowe DH challenge/responses in place of nonces"))
+
+(defskeleton dhnsl
+  (vars (a b name) (h1 base) (y expn))
+  (defstrand resp 3 (b b) (a a) (h1 h1) (y y))
+  (non-orig (privk a))
+  (uniq-gen y)
+  (comment "Responder point-of-view")
+  (traces
+    ((recv (enc h1 a (pubk b))) (send (enc h1 (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))))
+  (label 5)
+  (unrealized (0 2))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (a b name) (y x expn))
+  (defstrand resp 3 (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (privk a))
+  (uniq-gen y)
+  (operation nonce-test (added-strand init 3) (exp (gen) y) (0 2)
+    (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+  (traces
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b))))
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (send (enc (exp (gen) y) (pubk b)))))
+  (label 6)
+  (parent 5)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (h1 (exp (gen) x)) (y y))))
+  (origs))
+
+(comment "Nothing left to do")
diff --git a/tst/dhnsl_use.scm b/tst/dhnsl_use.scm
new file mode 100644
--- /dev/null
+++ b/tst/dhnsl_use.scm
@@ -0,0 +1,95 @@
+(herald "Diffie-Hellman enhanced Needham-Schroeder-Lowe Protocol"
+  ;(limit 4)
+  (algebra diffie-hellman))
+
+(defprotocol dhnsl diffie-hellman
+  (defrole resp
+    (vars (b a name) (h1 base) (y expn) (n text))
+    (trace
+     (recv (enc h1 a (pubk b)))
+     (send (enc h1 (exp (gen) y) b (pubk a)))
+     (recv (enc (exp (gen) y) (pubk b)))
+     (send (enc n (exp h1 y)))
+     (recv n)
+    )
+     (uniq-orig n)
+    (uniq-gen y)
+    (comment "Y should be assumed to be freshly chosen per role")
+  )
+  (defrole init
+    (vars (a b name) (h2 base) (x expn) (n text))
+    (trace
+     (send (enc (exp (gen) x) a (pubk b)))
+     (recv (enc (exp (gen) x) h2 b (pubk a)))
+     (send (enc h2 (pubk b)))
+     (recv (enc n (exp h2 x)))
+     (send n)
+    )
+    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role")
+  )
+  (comment "Needham-Schroeder-Lowe DH challenge/responses in place of nonces")
+)
+
+;;; The initiator point-of-view
+(defskeleton dhnsl
+  (vars (a b name) (h2 h3 base) (x expn))
+  (defstrand init 5 (a a) (b b) (h2 h2) (x x))
+  (non-orig (privk b) (privk a))
+;  (uniq-gen x)
+  (comment "Initiator point-of-view"))
+
+;; The responder point-of-view
+(defskeleton dhnsl
+  (vars (a b name) (h1 base) (y z expn))
+  (defstrand resp 5 (a a) (b b) (h1 h1) (y y))
+  (non-orig (privk a) (privk b))
+;  (uniq-gen y)
+  (comment "Responder point-of-view"))
+
+(defprotocol dhns diffie-hellman
+  (defrole resp
+    (vars (b a name) (h1 base) (y expn) (n text))
+    (trace
+     (recv (enc h1 a (pubk b)))
+     (send (enc h1 (exp (gen) y) (pubk a)))
+     (recv (enc (exp (gen) y) (pubk b)))
+     (send (enc n (exp h1 y)))
+     (recv n)
+    )
+     (uniq-orig n)
+    (uniq-gen y)
+    (comment "Y should be assumed to be freshly chosen per role")
+  )
+  (defrole init
+    (vars (a b name) (h2 base) (x expn) (n text))
+    (trace
+     (send (enc (exp (gen) x) a (pubk b)))
+     (recv (enc (exp (gen) x) h2 (pubk a)))
+     (send (enc h2 (pubk b)))
+     (recv (enc n (exp h2 x)))
+     (send n)
+    )
+    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role")
+  )
+  (comment "Needham-Schroeder-Lowe DH challenge/responses in place of nonces")
+)
+
+
+;;; The initiator point-of-view
+(defskeleton dhns
+  (vars (a b name) (h2 h3 base) (x expn))
+  (defstrand init 5 (a a) (b b) (h2 h2) (x x))
+  (non-orig (privk b) (privk a))
+;  (uniq-gen x)
+  (comment "Initiator point-of-view"))
+
+;; The responder point-of-view
+(defskeleton dhns
+  (vars (a b name) (h1 base) (y z expn))
+  (defstrand resp 5 (a a) (b b) (h1 h1) (y y))
+  (non-orig (privk a) (privk b))
+;  (uniq-gen y)
+  (comment "Responder point-of-view"))
+
diff --git a/tst/dhnsl_use.tst b/tst/dhnsl_use.tst
new file mode 100644
--- /dev/null
+++ b/tst/dhnsl_use.tst
@@ -0,0 +1,625 @@
+(herald "Diffie-Hellman enhanced Needham-Schroeder-Lowe Protocol"
+  (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from dhnsl_use.scm")
+
+(defprotocol dhnsl diffie-hellman
+  (defrole resp
+    (vars (b a name) (h1 base) (y expn) (n text))
+    (trace (recv (enc h1 a (pubk b)))
+      (send (enc h1 (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b))) (send (enc n (exp h1 y)))
+      (recv n))
+    (uniq-orig n)
+    (uniq-gen y)
+    (ind-zero-in (y h1))
+    (comment "Y should be assumed to be freshly chosen per role"))
+  (defrole init
+    (vars (a b name) (h2 base) (x expn) (n text))
+    (trace (send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 b (pubk a))) (send (enc h2 (pubk b)))
+      (recv (enc n (exp h2 x))) (send n))
+    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role"))
+  (comment
+    "Needham-Schroeder-Lowe DH challenge/responses in place of nonces"))
+
+(defskeleton dhnsl
+  (vars (n text) (a b name) (h2 base) (x expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 h2) (x x))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (comment "Initiator point-of-view")
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 b (pubk a))) (send (enc h2 (pubk b)))
+      (recv (enc n (exp h2 x))) (send n)))
+  (label 0)
+  (unrealized (0 1) (0 3))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (n text) (a b name) (h2 base) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 h2) (x x))
+  (defstrand resp 2 (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation nonce-test (added-strand resp 2) (exp (gen) x) (0 1)
+    (enc (exp (gen) x) a (pubk b)))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 b (pubk a))) (send (enc h2 (pubk b)))
+      (recv (enc n (exp h2 x))) (send n))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a)))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1) (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (n text) (a b name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (defstrand resp 2 (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation nonce-test (contracted (h2 (exp (gen) y))) (exp (gen) x)
+    (0 1) (enc (exp (gen) x) a (pubk b))
+    (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (send (enc (exp (gen) y) (pubk b)))
+      (recv (enc n (exp (gen) (mul x y)))) (send n))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a)))))
+  (label 2)
+  (parent 1)
+  (unrealized (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (n text) (b a name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (defstrand resp 4 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 3) (0 3)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk b) (privk a))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation encryption-test (displaced 1 2 resp 4)
+    (enc n (exp (gen) (mul x y-0))) (0 3))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (send (enc (exp (gen) y) (pubk b)))
+      (recv (enc n (exp (gen) (mul x y)))) (send n))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul x y))))))
+  (label 3)
+  (parent 2)
+  (unrealized (1 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (n text) (a b name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (defstrand resp 2 (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (deflistener (exp (gen) (mul x y)))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 3)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (added-listener (exp (gen) (mul x y)))
+    (enc n (exp (gen) (mul x y))) (0 3))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (send (enc (exp (gen) y) (pubk b)))
+      (recv (enc n (exp (gen) (mul x y)))) (send n))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a))))
+    ((recv (exp (gen) (mul x y))) (send (exp (gen) (mul x y)))))
+  (label 4)
+  (parent 2)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(defskeleton dhnsl
+  (vars (n text) (b a name) (y x expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (defstrand resp 4 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)) ((1 3) (0 3)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk b) (privk a))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test (displaced 2 0 init 3) (exp (gen) y) (1 2)
+    (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (send (enc (exp (gen) y) (pubk b)))
+      (recv (enc n (exp (gen) (mul y x)))) (send n))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul y x))))))
+  (label 5)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (h2 (exp (gen) y)) (x x) (n n))))
+  (origs (n (1 3))))
+
+(comment "Nothing left to do")
+
+(defprotocol dhnsl diffie-hellman
+  (defrole resp
+    (vars (b a name) (h1 base) (y expn) (n text))
+    (trace (recv (enc h1 a (pubk b)))
+      (send (enc h1 (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b))) (send (enc n (exp h1 y)))
+      (recv n))
+    (uniq-orig n)
+    (uniq-gen y)
+    (ind-zero-in (y h1))
+    (comment "Y should be assumed to be freshly chosen per role"))
+  (defrole init
+    (vars (a b name) (h2 base) (x expn) (n text))
+    (trace (send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 b (pubk a))) (send (enc h2 (pubk b)))
+      (recv (enc n (exp h2 x))) (send n))
+    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role"))
+  (comment
+    "Needham-Schroeder-Lowe DH challenge/responses in place of nonces"))
+
+(defskeleton dhnsl
+  (vars (n text) (a b name) (h1 base) (y expn))
+  (defstrand resp 5 (n n) (b b) (a a) (h1 h1) (y y))
+  (ind-zero-in (y h1))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (uniq-orig n)
+  (comment "Responder point-of-view")
+  (traces
+    ((recv (enc h1 a (pubk b))) (send (enc h1 (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b))) (send (enc n (exp h1 y)))
+      (recv n)))
+  (label 6)
+  (unrealized (0 2) (0 4))
+  (origs (n (0 3)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (n text) (a b name) (y x expn))
+  (defstrand resp 5 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test (added-strand init 3) (exp (gen) y) (0 2)
+    (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+  (traces
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (send (enc (exp (gen) y) (pubk b)))))
+  (label 7)
+  (parent 6)
+  (unrealized (0 4))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhnsl
+  (vars (n text) (a b name) (y x expn))
+  (defstrand resp 5 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (defstrand init 5 (n n) (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((0 3) (1 3)) ((1 0) (0 0)) ((1 2) (0 2))
+    ((1 4) (0 4)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test (displaced 1 2 init 5) n (0 4)
+    (enc n (exp (gen) (mul y x-0))))
+  (traces
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (send (enc (exp (gen) y) (pubk b)))
+      (recv (enc n (exp (gen) (mul y x)))) (send n)))
+  (label 8)
+  (parent 7)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (h1 (exp (gen) x)) (y y) (n n))))
+  (origs (n (0 3))))
+
+(defskeleton dhnsl
+  (vars (n text) (a b a-0 b-0 name) (y x x-0 expn))
+  (defstrand resp 5 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (defstrand init 5 (n n) (a a-0) (b b-0)
+    (h2 (exp (gen) (mul y x (rec x-0)))) (x x-0))
+  (precedes ((0 1) (1 1)) ((0 1) (2 1)) ((0 3) (2 3)) ((1 0) (0 0))
+    ((1 2) (0 2)) ((2 4) (0 4)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x x-0)
+  (uniq-orig n)
+  (operation nonce-test (added-strand init 5) n (0 4)
+    (enc n (exp (gen) (mul y x))))
+  (traces
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (send (enc (exp (gen) y) (pubk b))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-0)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul y x (rec x-0))) b-0
+          (pubk a-0)))
+      (send (enc (exp (gen) (mul y x (rec x-0))) (pubk b-0)))
+      (recv (enc n (exp (gen) (mul y x)))) (send n)))
+  (label 9)
+  (parent 7)
+  (unrealized (2 1))
+  (comment "empty cohort"))
+
+(defskeleton dhnsl
+  (vars (n text) (a b name) (y x expn))
+  (defstrand resp 5 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (deflistener (exp (gen) (mul y x)))
+  (precedes ((0 1) (1 1)) ((0 1) (2 0)) ((1 0) (0 0)) ((1 2) (0 2))
+    ((2 1) (0 4)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test (added-listener (exp (gen) (mul y x))) n (0 4)
+    (enc n (exp (gen) (mul y x))))
+  (traces
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) b (pubk a)))
+      (send (enc (exp (gen) y) (pubk b))))
+    ((recv (exp (gen) (mul y x))) (send (exp (gen) (mul y x)))))
+  (label 10)
+  (parent 7)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol dhns diffie-hellman
+  (defrole resp
+    (vars (b a name) (h1 base) (y expn) (n text))
+    (trace (recv (enc h1 a (pubk b)))
+      (send (enc h1 (exp (gen) y) (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b))) (send (enc n (exp h1 y)))
+      (recv n))
+    (uniq-orig n)
+    (uniq-gen y)
+    (ind-zero-in (y h1))
+    (comment "Y should be assumed to be freshly chosen per role"))
+  (defrole init
+    (vars (a b name) (h2 base) (x expn) (n text))
+    (trace (send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 (pubk a))) (send (enc h2 (pubk b)))
+      (recv (enc n (exp h2 x))) (send n))
+    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role"))
+  (comment
+    "Needham-Schroeder-Lowe DH challenge/responses in place of nonces"))
+
+(defskeleton dhns
+  (vars (n text) (a b name) (h2 base) (x expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 h2) (x x))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (comment "Initiator point-of-view")
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 (pubk a))) (send (enc h2 (pubk b)))
+      (recv (enc n (exp h2 x))) (send n)))
+  (label 11)
+  (unrealized (0 1) (0 3))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhns
+  (vars (n text) (a b name) (h2 base) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 h2) (x x))
+  (defstrand resp 2 (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation nonce-test (added-strand resp 2) (exp (gen) x) (0 1)
+    (enc (exp (gen) x) a (pubk b)))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 (pubk a))) (send (enc h2 (pubk b)))
+      (recv (enc n (exp h2 x))) (send n))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) (pubk a)))))
+  (label 12)
+  (parent 11)
+  (unrealized (0 1) (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhns
+  (vars (n text) (a b name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (defstrand resp 2 (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation nonce-test (contracted (h2 (exp (gen) y))) (exp (gen) x)
+    (0 1) (enc (exp (gen) x) a (pubk b))
+    (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (send (enc (exp (gen) y) (pubk b)))
+      (recv (enc n (exp (gen) (mul x y)))) (send n))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) (pubk a)))))
+  (label 13)
+  (parent 12)
+  (unrealized (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton dhns
+  (vars (n text) (b a name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (defstrand resp 4 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 3) (0 3)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk b) (privk a))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation encryption-test (displaced 1 2 resp 4)
+    (enc n (exp (gen) (mul x y-0))) (0 3))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (send (enc (exp (gen) y) (pubk b)))
+      (recv (enc n (exp (gen) (mul x y)))) (send n))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul x y))))))
+  (label 14)
+  (parent 13)
+  (unrealized (1 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhns
+  (vars (n text) (a b name) (x y expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (defstrand resp 2 (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (deflistener (exp (gen) (mul x y)))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 3)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (added-listener (exp (gen) (mul x y)))
+    (enc n (exp (gen) (mul x y))) (0 3))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (send (enc (exp (gen) y) (pubk b)))
+      (recv (enc n (exp (gen) (mul x y)))) (send n))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) (pubk a))))
+    ((recv (exp (gen) (mul x y))) (send (exp (gen) (mul x y)))))
+  (label 15)
+  (parent 13)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(defskeleton dhns
+  (vars (n text) (b a name) (y x expn))
+  (defstrand init 5 (n n) (a a) (b b) (h2 (exp (gen) y)) (x x))
+  (defstrand resp 4 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)) ((1 3) (0 3)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk b) (privk a))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test (displaced 2 0 init 3) (exp (gen) y) (1 2)
+    (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (send (enc (exp (gen) y) (pubk b)))
+      (recv (enc n (exp (gen) (mul y x)))) (send n))
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul y x))))))
+  (label 16)
+  (parent 14)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (h2 (exp (gen) y)) (x x) (n n))))
+  (origs (n (1 3))))
+
+(comment "Nothing left to do")
+
+(defprotocol dhns diffie-hellman
+  (defrole resp
+    (vars (b a name) (h1 base) (y expn) (n text))
+    (trace (recv (enc h1 a (pubk b)))
+      (send (enc h1 (exp (gen) y) (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b))) (send (enc n (exp h1 y)))
+      (recv n))
+    (uniq-orig n)
+    (uniq-gen y)
+    (ind-zero-in (y h1))
+    (comment "Y should be assumed to be freshly chosen per role"))
+  (defrole init
+    (vars (a b name) (h2 base) (x expn) (n text))
+    (trace (send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc (exp (gen) x) h2 (pubk a))) (send (enc h2 (pubk b)))
+      (recv (enc n (exp h2 x))) (send n))
+    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role"))
+  (comment
+    "Needham-Schroeder-Lowe DH challenge/responses in place of nonces"))
+
+(defskeleton dhns
+  (vars (n text) (a b name) (h1 base) (y expn))
+  (defstrand resp 5 (n n) (b b) (a a) (h1 h1) (y y))
+  (ind-zero-in (y h1))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (uniq-orig n)
+  (comment "Responder point-of-view")
+  (traces
+    ((recv (enc h1 a (pubk b))) (send (enc h1 (exp (gen) y) (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b))) (send (enc n (exp h1 y)))
+      (recv n)))
+  (label 17)
+  (unrealized (0 2) (0 4))
+  (origs (n (0 3)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton dhns
+  (vars (n text) (a b b-0 name) (y x expn))
+  (defstrand resp 5 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b-0) (h2 (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test (added-strand init 3) (exp (gen) y) (0 2)
+    (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+  (traces
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc (exp (gen) x) a (pubk b-0)))
+      (recv (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (send (enc (exp (gen) y) (pubk b-0)))))
+  (label 18)
+  (parent 17)
+  (unrealized (0 4))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton dhns
+  (vars (n text) (b a b-0 name) (y x expn))
+  (defstrand resp 5 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (defstrand init 5 (n n) (a a) (b b-0) (h2 (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((0 3) (1 3)) ((1 0) (0 0)) ((1 2) (0 2))
+    ((1 4) (0 4)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk b) (privk a))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test (displaced 1 2 init 5) n (0 4)
+    (enc n (exp (gen) (mul y x-0))))
+  (traces
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc (exp (gen) x) a (pubk b-0)))
+      (recv (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (send (enc (exp (gen) y) (pubk b-0)))
+      (recv (enc n (exp (gen) (mul y x)))) (send n)))
+  (label 19)
+  (parent 18)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (h1 (exp (gen) x)) (y y) (n n))))
+  (origs (n (0 3))))
+
+(defskeleton dhns
+  (vars (n text) (a b b-0 a-0 b-1 name) (y x x-0 expn))
+  (defstrand resp 5 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b-0) (h2 (exp (gen) y)) (x x))
+  (defstrand init 5 (n n) (a a-0) (b b-1)
+    (h2 (exp (gen) (mul y x (rec x-0)))) (x x-0))
+  (precedes ((0 1) (1 1)) ((0 1) (2 1)) ((0 3) (2 3)) ((1 0) (0 0))
+    ((1 2) (0 2)) ((2 4) (0 4)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x x-0)
+  (uniq-orig n)
+  (operation nonce-test (added-strand init 5) n (0 4)
+    (enc n (exp (gen) (mul y x))))
+  (traces
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc (exp (gen) x) a (pubk b-0)))
+      (recv (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (send (enc (exp (gen) y) (pubk b-0))))
+    ((send (enc (exp (gen) x-0) a-0 (pubk b-1)))
+      (recv
+        (enc (exp (gen) x-0) (exp (gen) (mul y x (rec x-0)))
+          (pubk a-0)))
+      (send (enc (exp (gen) (mul y x (rec x-0))) (pubk b-1)))
+      (recv (enc n (exp (gen) (mul y x)))) (send n)))
+  (label 20)
+  (parent 18)
+  (unrealized (2 1))
+  (comment "empty cohort"))
+
+(defskeleton dhns
+  (vars (n text) (a b b-0 name) (y x expn))
+  (defstrand resp 5 (n n) (b b) (a a) (h1 (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b-0) (h2 (exp (gen) y)) (x x))
+  (deflistener (exp (gen) (mul y x)))
+  (precedes ((0 1) (1 1)) ((0 1) (2 0)) ((1 0) (0 0)) ((1 2) (0 2))
+    ((2 1) (0 4)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (uniq-orig n)
+  (operation nonce-test (added-listener (exp (gen) (mul y x))) n (0 4)
+    (enc n (exp (gen) (mul y x))))
+  (traces
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (recv (enc (exp (gen) y) (pubk b)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc (exp (gen) x) a (pubk b-0)))
+      (recv (enc (exp (gen) x) (exp (gen) y) (pubk a)))
+      (send (enc (exp (gen) y) (pubk b-0))))
+    ((recv (exp (gen) (mul y x))) (send (exp (gen) (mul y x)))))
+  (label 21)
+  (parent 18)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
diff --git a/tst/ds-short.lisp b/tst/ds-short.lisp
deleted file mode 100644
--- a/tst/ds-short.lisp
+++ /dev/null
@@ -1,33 +0,0 @@
-;;; This is something like the Denning Sacco protocol with
-;;; public keys as described by Clark and Jacob, but without
-;;; timestamps.  Since the whole point of the protocol was to
-;;; show how timestamps could be used, this is a funny thing to do!
-
-(defprotocol denning-sacco-with-pk basic
-  (defrole init ; A
-    (vars (a name) (b name) (ks name) (k skey))
-    (trace (send (cat a b))
-	   (recv (cat (enc (cat b (pubk b)) (privk ks)) ; certB
-		      (enc (cat a (pubk a)) (privk ks)))) ; cert A
-	   (send (cat (enc (enc k (privk a)) (pubk b)) ; sign & encr k
-		      (enc (cat b (pubk b)) (privk ks))
-		      (enc (cat a  (pubk a)) (privk ks))))))
-  (defrole resp ; B
-    (vars (a name) (b name) (ks name) (k skey))
-    (trace (recv (cat (enc (enc k (privk a)) (pubk b))
-		      (enc (cat b (pubk b)) (privk ks))
-		      (enc (cat a (pubk a)) (privk ks))))))
-  (defrole keyserver
-    (vars (a name) (b name) (ks name))
-    (trace (recv (cat a b))
-	   (send (cat (enc (cat b (pubk b)) (privk ks))
-		      (enc (cat a (pubk a)) (privk ks)))))))
-
-;;; For the preskeleton, I'd like to require every initiator and
-;;; respondent to use the same ks.  How can that be done?
-
-(defskeleton denning-sacco-with-pk
-  (vars (a name) (b name) (ks name) (k skey))
-  (defstrand resp 1 (a a) (b b) (ks ks) (k k))
-  (non-orig (privk b) (privk a) (privk ks))
-  (uniq-orig k))
diff --git a/tst/dy.lsp b/tst/dy.lsp
deleted file mode 100644
--- a/tst/dy.lsp
+++ /dev/null
@@ -1,35 +0,0 @@
-(herald "Example 1.3 from 1983 Dolev-Yao Paper")
-
-; This protocol, from Example 1.3 in 1983 Dolev-Yao paper, is known to
-; be vulnerable to the following attack.
-
-; A->E : {{M}KB, A}KB
-; E->B : {{{M}KB, A}KB, E}KB
-; B->E : {{{M}KB, A}KE, B}KE
-; E->B : {{M}KB, E}KB
-; B->E : {{M}KE, B}KE
-
-; So E gets M.
-
-(defprotocol dy basic
-  (defrole init (vars (a b name) (m text))
-    (trace
-     (send (enc (enc m (pubk b)) a (pubk b)))
-     (recv (enc (enc m (pubk a)) b (pubk a)))))
-  (defrole resp (vars (a b name) (m mesg))
-    (trace
-     (recv (enc (enc m (pubk b)) a (pubk b)))
-     (send (enc (enc m (pubk a)) b (pubk a))))))
-
-(defskeleton dy
-  (vars (a b name) (m text))
-  (defstrand init 2 (a a) (b b) (m m))
-  (uniq-orig m)
-  (non-orig (privk a) (privk b)))
-
-(defskeleton dy
-  (vars (a b name) (m text))
-  (defstrand init 1 (a a) (b b) (m m))
-  (deflistener m)
-  (uniq-orig m)
-  (non-orig (privk a) (privk b)))
diff --git a/tst/dy.tst b/tst/dy.tst
deleted file mode 100644
--- a/tst/dy.tst
+++ /dev/null
@@ -1,6880 +0,0 @@
-(herald "Example 1.3 from 1983 Dolev-Yao Paper")
-
-(comment "CPSA 2.5.4")
-(comment "All input read from dy.lsp")
-
-(defprotocol dy basic
-  (defrole init
-    (vars (a b name) (m text))
-    (trace (send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a)))))
-  (defrole resp
-    (vars (a b name) (m mesg))
-    (trace (recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))))
-
-(defskeleton dy
-  (vars (m text) (a b name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a)))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (m (0 0)))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a b)) m (0 1)
-    (enc (enc m (pubk b)) b (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b)))))
-  (label 1)
-  (parent 0)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a b) (b b) (m m))))
-  (origs (m (0 0))))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (0 1)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0)))))
-  (label 2)
-  (parent 0)
-  (unrealized (0 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (0 1)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 3)
-  (parent 0)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (m m))))
-  (origs (m (0 0))))
-
-(defskeleton dy
-  (vars (m text) (b a name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-0 b)) m (0 1) (enc m (pubk b))
-    (enc (enc m (pubk b)) b (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a)))))
-  (label 4)
-  (parent 2)
-  (seen 1)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (0 1) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1)))))
-  (label 5)
-  (parent 2)
-  (unrealized (2 0))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-1 a)) m (2 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 6)
-  (parent 5)
-  (seen 3)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 3 1 resp 2) m (2 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1)))))
-  (label 7)
-  (parent 5)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (m m))))
-  (origs (m (0 0))))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-2) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-2 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-2)) b (pubk a-2)))))
-  (label 8)
-  (parent 5)
-  (seen 7)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 9)
-  (parent 5)
-  (seen 6)
-  (unrealized (2 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (2 0)) ((2 1) (0 1))
-    ((3 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 4 1 resp 2) m (2 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 10)
-  (parent 9)
-  (seen 6)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-2) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-2 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-2)) b (pubk a-2)))))
-  (label 11)
-  (parent 9)
-  (seen 10)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2)))))
-  (label 12)
-  (parent 9)
-  (unrealized (2 0) (4 0))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-2 b)) m (4 0)
-    (enc (enc m (pubk b)) b (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1)))))
-  (label 13)
-  (parent 12)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (4 0)) ((2 1) (0 1))
-    ((3 1) (2 0)) ((4 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 5 1 resp 2) m (4 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2)))))
-  (label 14)
-  (parent 12)
-  (seen 18)
-  (unrealized (4 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (4 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3)))))
-  (label 15)
-  (parent 12)
-  (seen 13)
-  (unrealized (4 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 5 3 resp 2) m (4 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2)))))
-  (label 16)
-  (parent 12)
-  (unrealized (2 0))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (4 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 17)
-  (parent 12)
-  (unrealized (2 0))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-0) (b b))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-0)) b (pubk a-0)))))
-  (label 18)
-  (parent 13)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (4 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 5 3 resp 2) m (4 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2)))))
-  (label 19)
-  (parent 14)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (4 0))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (4 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a-3 (pubk b)))
-      (send (enc (enc m (pubk a-3)) b (pubk a-3)))))
-  (label 20)
-  (parent 14)
-  (unrealized (5 0))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 6 3 resp 2) m (4 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3)))))
-  (label 21)
-  (parent 15)
-  (seen 19)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (6 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((6 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (4 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 22)
-  (parent 15)
-  (seen 37)
-  (unrealized (6 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-2 a)) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1)))))
-  (label 23)
-  (parent 16)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (2 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 5 1 resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2)))))
-  (label 24)
-  (parent 16)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3)))))
-  (label 25)
-  (parent 16)
-  (seen 24)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (2 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 5 3 resp 2) m (2 0)
-    (enc m (pubk a-2)) (enc (enc m (pubk a-2)) b (pubk a-2))
-    (enc (enc m (pubk b)) a-2 (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1)))))
-  (label 26)
-  (parent 16)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 27)
-  (parent 16)
-  (seen 26)
-  (unrealized (5 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-2 a)) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 28)
-  (parent 17)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (2 0))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 6 1 resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 29)
-  (parent 17)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (6 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3)))))
-  (label 30)
-  (parent 17)
-  (seen 29)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 6 5 resp 2) m (2 0)
-    (enc m (pubk a-2)) (enc (enc m (pubk a-2)) b (pubk a-2))
-    (enc (enc m (pubk b)) a-2 (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 31)
-  (parent 17)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (6 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 32)
-  (parent 17)
-  (seen 31 49)
-  (unrealized (6 0))
-  (comment "6 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a)))))
-  (label 33)
-  (parent 18)
-  (seen 4)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (3 0)) ((2 1) (3 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1)))))
-  (label 34)
-  (parent 19)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (4 0))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-3 a)) m (5 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 35)
-  (parent 20)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 6 1 resp 2) m (5 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a-3 (pubk b)))
-      (send (enc (enc m (pubk a-3)) b (pubk a-3)))))
-  (label 36)
-  (parent 20)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (4 0))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a-3 (pubk b)))
-      (send (enc (enc m (pubk a-3)) b (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-4 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-4)) b (pubk a-4)))))
-  (label 37)
-  (parent 20)
-  (seen 36)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (4 0))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a-3 (pubk b)))
-      (send (enc (enc m (pubk a-3)) b (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 38)
-  (parent 20)
-  (seen 35)
-  (unrealized (5 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (6 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((6 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-4 a)) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 39)
-  (parent 22)
-  (seen 35)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (6 0))
-    ((6 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 5 resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 40)
-  (parent 22)
-  (seen 36)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (3 0)) ((3 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0)))))
-  (label 43)
-  (parent 23)
-  (seen 57)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (3 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1)))))
-  (label 44)
-  (parent 24)
-  (seen 57)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-0) (b b))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (3 0)) ((3 1) (1 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-0)) b (pubk a-0)))))
-  (label 45)
-  (parent 26)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 6 1 resp 2) m (5 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 46)
-  (parent 27)
-  (seen 18)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-4 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-4)) b (pubk a-4)))))
-  (label 47)
-  (parent 27)
-  (unrealized (5 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0)) ((5 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 6 3 resp 2) m (5 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 48)
-  (parent 27)
-  (seen 26 64 67)
-  (unrealized (5 0))
-  (comment "6 in cohort - 3 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 49)
-  (parent 27)
-  (seen 31)
-  (unrealized (5 0))
-  (comment "6 in cohort - 5 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 50)
-  (parent 28)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 51)
-  (parent 29)
-  (seen 77)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 1) (3 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 52)
-  (parent 31)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (6 0))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0))
-    ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 53)
-  (parent 32)
-  (seen 18 73)
-  (unrealized (6 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0))
-    ((5 1) (6 0)) ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 5 resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 55)
-  (parent 32)
-  (seen 79)
-  (unrealized (6 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0)))))
-  (label 57)
-  (parent 34)
-  (seen 3)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (3 0))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 58)
-  (parent 35)
-  (seen 77)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (4 0)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2)))))
-  (label 59)
-  (parent 36)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (5 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a-3 (pubk b)))
-      (send (enc (enc m (pubk a-3)) b (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 60)
-  (parent 38)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a)))))
-  (label 63)
-  (parent 45)
-  (seen 4)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0)) ((5 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 6 3 resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 64)
-  (parent 46)
-  (seen 18)
-  (unrealized (5 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 65)
-  (parent 46)
-  (seen 73)
-  (unrealized (6 0))
-  (comment "6 in cohort - 5 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-4 b)) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) b (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-3)) b (pubk a-3)))))
-  (label 66)
-  (parent 47)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 3 resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-4 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-4)) b (pubk a-4)))))
-  (label 67)
-  (parent 47)
-  (unrealized (5 0))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0)) ((5 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-3 b)) m (5 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 69)
-  (parent 48)
-  (unrealized (2 0))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (5 0)) ((5 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 6 4 resp 2) m (5 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 70)
-  (parent 48)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 71)
-  (parent 48)
-  (seen 26)
-  (unrealized (6 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-3 b)) m (5 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 72)
-  (parent 49)
-  (seen 31)
-  (unrealized (2 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (5 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 73)
-  (parent 49)
-  (unrealized (5 0))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (5 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 4 resp 2) m (5 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 75)
-  (parent 49)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 77)
-  (parent 50)
-  (seen 57)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (2 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 78)
-  (parent 52)
-  (seen 63)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (6 0))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0))
-    ((5 1) (6 0)) ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 5 resp 2) m (6 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 79)
-  (parent 53)
-  (seen 18)
-  (unrealized (6 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0))
-    ((5 1) (6 0)) ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-3 b)) m (6 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 81)
-  (parent 55)
-  (unrealized (2 0))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (6 0)) ((5 1) (4 0))
-    ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 4 resp 2) m (6 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 83)
-  (parent 55)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (3 0)) ((2 1) (0 1)) ((3 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2)))))
-  (label 85)
-  (parent 59)
-  (seen 7)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (5 0)) ((1 1) (4 0))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (3 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 86)
-  (parent 60)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0)) ((5 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-3 b)) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 87)
-  (parent 64)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (5 0)) ((5 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 6 4 resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 88)
-  (parent 64)
-  (seen 107)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 89)
-  (parent 64)
-  (seen 108)
-  (unrealized (6 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 90)
-  (parent 64)
-  (seen 92 94)
-  (unrealized (6 0))
-  (comment "6 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (6 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 91)
-  (parent 65)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) a)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) a)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (2 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (5 0)) ((5 1) (2 0)))
-  (non-orig (privk a))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 4 resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk a)) a (pubk a)))
-      (recv (enc (enc m (pubk a)) a (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) a (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) a (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a (pubk a)))
-      (send (enc (enc m (pubk a)) a (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) a (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) a (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 92)
-  (parent 65)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 3 resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 94)
-  (parent 65)
-  (seen 92)
-  (unrealized (6 0))
-  (comment "7 in cohort - 6 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-2) (b b))
-  (precedes ((0 0) (2 0)) ((0 0) (5 0)) ((1 1) (0 1)) ((2 1) (3 0))
-    ((3 1) (1 0)) ((4 1) (1 0)) ((5 1) (4 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-2 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-2)) b (pubk a-2)))))
-  (label 96)
-  (parent 66)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-4 b)) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3)))))
-  (label 97)
-  (parent 67)
-  (seen 87)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (5 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 4 resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-4 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-4)) b (pubk a-4)))))
-  (label 98)
-  (parent 67)
-  (seen 88)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 6 resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a-4)) b (pubk a-4))
-    (enc (enc m (pubk b)) a-4 (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-3)) b (pubk a-3)))))
-  (label 99)
-  (parent 67)
-  (seen 146)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0)) ((5 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-2 a)) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 102)
-  (parent 69)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (2 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0)) ((5 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 6 1 resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 103)
-  (parent 69)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3)))))
-  (label 104)
-  (parent 69)
-  (seen 103)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0)) ((5 1) (2 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 6 3 resp 2) m (2 0)
-    (enc m (pubk a-2)) (enc (enc m (pubk a-2)) b (pubk a-2))
-    (enc (enc m (pubk b)) a-2 (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 105)
-  (parent 69)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 106)
-  (parent 69)
-  (seen 69)
-  (unrealized (6 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (3 0)) ((3 1) (4 0))
-    ((4 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a-2 (pubk a)))
-      (send (enc (enc m (pubk a-2)) a (pubk a-2)))))
-  (label 107)
-  (parent 70)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (6 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 108)
-  (parent 71)
-  (seen 146)
-  (unrealized (6 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 3 resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 110)
-  (parent 71)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-2 a)) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 112)
-  (parent 72)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (2 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 113)
-  (parent 72)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-3 b)) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 116)
-  (parent 73)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a-3)) b (pubk a-3))
-    (enc (enc m (pubk b)) a-3 (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 117)
-  (parent 73)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (5 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 4 resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 118)
-  (parent 73)
-  (seen 120)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (2 0)) ((0 0) (5 0)) ((1 1) (0 1)) ((2 1) (3 0))
-    ((3 1) (4 0)) ((4 1) (1 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a-2 (pubk a)))
-      (send (enc (enc m (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 120)
-  (parent 75)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (6 0))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0))
-    ((5 1) (6 0)) ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-3 b)) m (6 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 121)
-  (parent 79)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (6 0))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (6 0)) ((5 1) (4 0))
-    ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 4 resp 2) m (6 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 122)
-  (parent 79)
-  (seen 130)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0))
-    ((5 1) (6 0)) ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-2 a)) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 125)
-  (parent 81)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (2 0))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0))
-    ((5 1) (6 0)) ((6 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 126)
-  (parent 81)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0)) ((5 1) (4 0))
-    ((5 1) (6 0)) ((6 1) (2 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 5 resp 2) m (2 0)
-    (enc m (pubk a-2)) (enc (enc m (pubk a-2)) b (pubk a-2))
-    (enc (enc m (pubk b)) a-2 (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 128)
-  (parent 81)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-2) (b a))
-  (precedes ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (5 0)) ((4 1) (3 0)) ((5 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-2 (pubk a)))
-      (send (enc (enc m (pubk a-2)) a (pubk a-2)))))
-  (label 130)
-  (parent 83)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((1 1) (3 0)) ((2 1) (0 1))
-    ((3 1) (2 0)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 131)
-  (parent 86)
-  (seen 10)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (4 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((3 1) (0 1)) ((4 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 132)
-  (parent 87)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) a)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) a)) (a a-2) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (2 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (2 0)))
-  (non-orig (privk a))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 4 resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk a)) a (pubk a)))
-      (recv (enc (enc m (pubk a)) a (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) a (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) a (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a (pubk a)))
-      (send (enc (enc m (pubk a)) a (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) a (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) a (pubk a-2)) a (pubk a-2)))))
-  (label 133)
-  (parent 89)
-  (seen 45)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 3 resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 135)
-  (parent 89)
-  (seen 156)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-4 a)) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 137)
-  (parent 90)
-  (seen 118)
-  (unrealized (5 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (6 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 138)
-  (parent 90)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (5 0)) ((2 1) (3 0))
-    ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a-2 (pubk a)))
-      (send (enc (enc m (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a-3 (pubk b)))
-      (send (enc (enc m (pubk a-3)) b (pubk a-3)))))
-  (label 141)
-  (parent 91)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b a))
-  (defstrand resp 2 (m m) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) a)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (3 0)) ((3 1) (4 0))
-    ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk a)) a (pubk a)))
-      (recv (enc (enc m (pubk a)) a (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-0 (pubk a)))
-      (send (enc (enc m (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) a (pubk a)))
-      (send (enc (enc m (pubk a)) a (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) a (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) a (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a-2 (pubk a)))
-      (send (enc (enc m (pubk a-2)) a (pubk a-2)))))
-  (label 142)
-  (parent 92)
-  (seen 45)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-4 a)) m (6 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 143)
-  (parent 94)
-  (unrealized (5 0))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (6 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (6 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 144)
-  (parent 94)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0)) ((5 1) (2 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (6 0)
-    (enc (enc m (pubk a-3)) b (pubk a-3))
-    (enc (enc m (pubk b)) a-3 (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2)))))
-  (label 146)
-  (parent 94)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (6 0)) ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 4 resp 2) m (6 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 147)
-  (parent 94)
-  (seen 92)
-  (unrealized (6 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((1 1) (2 0)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1)))))
-  (label 149)
-  (parent 96)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 150)
-  (parent 102)
-  (seen 167)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((3 1) (0 1)) ((4 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 151)
-  (parent 103)
-  (seen 167)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 152)
-  (parent 105)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (3 0)) ((3 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1)))))
-  (label 153)
-  (parent 107)
-  (seen 57)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (6 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 3 resp 2) m (6 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 154)
-  (parent 108)
-  (seen 156)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-3) (b a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (3 0)) ((2 1) (5 0))
-    ((3 1) (1 0)) ((4 1) (1 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a-2 (pubk a)))
-      (send (enc (enc m (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-3 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-3)) a (pubk a-3)))))
-  (label 156)
-  (parent 110)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (2 0)) ((0 0) (5 0)) ((1 1) (0 1)) ((2 1) (3 0))
-    ((3 1) (1 0)) ((4 1) (1 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 157)
-  (parent 112)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (5 0)) ((1 1) (0 1))
-    ((2 1) (3 0)) ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 158)
-  (parent 113)
-  (seen 187)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (5 0)) ((1 1) (4 0))
-    ((2 1) (3 0)) ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 159)
-  (parent 116)
-  (seen 187)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (5 0)) ((1 1) (4 0))
-    ((2 1) (3 0)) ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (4 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 160)
-  (parent 117)
-  (seen 13)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((1 1) (2 0)) ((2 1) (3 0))
-    ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 161)
-  (parent 120)
-  (seen 77)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (3 0)) ((4 1) (5 0))
-    ((5 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 162)
-  (parent 121)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 1) (3 0)) ((4 1) (5 0)) ((5 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 163)
-  (parent 125)
-  (seen 188)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (3 0)) ((4 1) (5 0))
-    ((5 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 164)
-  (parent 126)
-  (seen 188)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 1) (3 0)) ((4 1) (5 0)) ((5 1) (1 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 165)
-  (parent 128)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (4 0))
-    ((3 1) (2 0)) ((4 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1)))))
-  (label 166)
-  (parent 130)
-  (seen 153)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((1 1) (3 0)) ((2 1) (0 1))
-    ((3 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 167)
-  (parent 132)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-3 b)) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 168)
-  (parent 137)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a-3)) b (pubk a-3))
-    (enc (enc m (pubk b)) a-3 (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 169)
-  (parent 137)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (5 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a-2 (pubk a)))
-      (send (enc (enc m (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a-3 (pubk b)))
-      (send (enc (enc m (pubk a-3)) b (pubk a-3)))))
-  (label 171)
-  (parent 138)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (4 0)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (3 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2)))))
-  (label 172)
-  (parent 141)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-3 b)) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 173)
-  (parent 143)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a-3)) b (pubk a-3))
-    (enc (enc m (pubk b)) a-3 (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 174)
-  (parent 143)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (5 0)) ((5 1) (2 0))
-    ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 4 resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 175)
-  (parent 143)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (5 0)) ((2 1) (3 0))
-    ((2 1) (5 0)) ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a-2 (pubk a)))
-      (send (enc (enc m (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a-3 (pubk b)))
-      (send (enc (enc m (pubk a-3)) b (pubk a-3)))))
-  (label 178)
-  (parent 144)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (4 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((3 1) (0 1)) ((4 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1)))))
-  (label 179)
-  (parent 146)
-  (seen 184)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (5 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (6 0)) ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (a-4 a)) m (6 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 180)
-  (parent 147)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (6 0)) ((2 1) (0 1))
-    ((3 1) (4 0)) ((4 1) (6 0)) ((5 1) (2 0)) ((6 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (displaced 7 1 resp 2) m (6 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 181)
-  (parent 147)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-1) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (2 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-1 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-1)) b (pubk a-1)))))
-  (label 184)
-  (parent 149)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((1 1) (3 0)) ((2 1) (0 1))
-    ((3 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 185)
-  (parent 152)
-  (seen 33)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((1 1) (4 0)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2)))))
-  (label 186)
-  (parent 156)
-  (seen 153)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((1 1) (2 0)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 187)
-  (parent 157)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (2 0)) ((3 1) (4 0)) ((4 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 188)
-  (parent 162)
-  (seen 167)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (2 0)) ((3 1) (4 0)) ((4 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 189)
-  (parent 165)
-  (seen 185)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b)))))
-  (label 190)
-  (parent 167)
-  (seen 3)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (5 0)) ((1 1) (4 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((3 1) (0 1)) ((4 1) (0 1))
-    ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 191)
-  (parent 168)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (5 0)) ((1 1) (4 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((3 1) (0 1)) ((4 1) (0 1))
-    ((5 1) (4 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 192)
-  (parent 169)
-  (seen 13)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (4 0)) ((2 1) (3 0))
-    ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (3 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2)))))
-  (label 193)
-  (parent 171)
-  (seen 194)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (3 0)) ((2 1) (0 1)) ((3 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2)))))
-  (label 194)
-  (parent 172)
-  (seen 7)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (4 0)) ((2 1) (3 0))
-    ((2 1) (5 0)) ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 195)
-  (parent 173)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 a-1 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a b) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (4 0)) ((2 1) (3 0))
-    ((2 1) (5 0)) ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (4 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) b (pubk b)))
-      (send (enc (enc m (pubk b)) b (pubk b)))))
-  (label 196)
-  (parent 174)
-  (seen 13)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (3 0)) ((2 1) (5 0))
-    ((3 1) (4 0)) ((4 1) (1 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a-2 (pubk a)))
-      (send (enc (enc m (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 197)
-  (parent 175)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (4 0)) ((2 1) (4 0))
-    ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (3 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a-2 (pubk b)))
-      (send (enc (enc m (pubk a-2)) b (pubk a-2)))))
-  (label 198)
-  (parent 178)
-  (seen 194)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (3 0)) ((3 1) (5 0))
-    ((4 1) (1 0)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-0 (pubk b)))
-      (send (enc (enc m (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a-2 (pubk a)))
-      (send (enc (enc m (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 199)
-  (parent 180)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (5 0)) ((2 1) (3 0))
-    ((3 1) (5 0)) ((4 1) (0 1)) ((5 1) (4 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-1 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk a)) a-2 (pubk a)))
-      (send (enc (enc m (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a-3 (pubk b)))
-      (send (enc (enc m (pubk a-3)) b (pubk a-3)))))
-  (label 200)
-  (parent 181)
-  (seen 198)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (b a a-0 name))
-  (defstrand init 2 (m m) (a b) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) b)) (a a-0) (b b))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) b (pubk b)))
-      (recv (enc (enc m (pubk b)) b (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) b (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) b (pubk a-0)) b (pubk a-0)))))
-  (label 201)
-  (parent 184)
-  (seen 4)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 202)
-  (parent 187)
-  (seen 190)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (4 0)) ((1 1) (2 0)) ((1 1) (3 0))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 203)
-  (parent 191)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((1 1) (4 0)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 204)
-  (parent 195)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((1 1) (4 0)) ((2 1) (3 0))
-    ((3 1) (0 1)) ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 205)
-  (parent 197)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a-1) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (4 0)) ((3 1) (0 1))
-    ((4 1) (3 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk a)) a-1 (pubk a)))
-      (send (enc (enc m (pubk a-1)) a (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 206)
-  (parent 199)
-  (seen 43)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (2 0)) ((2 1) (0 1))
-    ((3 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 207)
-  (parent 203)
-  (seen 190)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (3 0)) ((2 1) (0 1)) ((3 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 208)
-  (parent 204)
-  (seen 190)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-0) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((1 1) (3 0)) ((2 1) (0 1))
-    ((3 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (3 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-0 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-0)) a (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 209)
-  (parent 205)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton dy
-  (vars (m text) (a b name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 210)
-  (parent 209)
-  (seen 3)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Strand bound exceeded--aborting run")
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-5) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((6 1) (4 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-5 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-5)) b (pubk a-5)))))
-  (label 41)
-  (parent 22)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((6 1) (4 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 42)
-  (parent 22)
-  (unrealized (6 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((6 1) (2 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-4 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-4)) b (pubk a-4)))))
-  (label 54)
-  (parent 32)
-  (unrealized (6 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((6 1) (2 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 56)
-  (parent 32)
-  (unrealized (6 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((0 0) (7 0))
-    ((1 1) (4 0)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a-3 (pubk b)))
-      (send (enc (enc m (pubk a-3)) b (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-4 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-4)) b (pubk a-4)))))
-  (label 61)
-  (parent 38)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((0 0) (7 0))
-    ((1 1) (4 0)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a-3 (pubk b)))
-      (send (enc (enc m (pubk a-3)) b (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 62)
-  (parent 38)
-  (unrealized (5 0) (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-4) (b b))
-  (defstrand resp 2 (m m) (a a-5) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-4 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc m (pubk b)) a-5 (pubk b)))
-      (send (enc (enc m (pubk a-5)) b (pubk a-5)))))
-  (label 68)
-  (parent 47)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-4 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-4)) b (pubk a-4)))))
-  (label 74)
-  (parent 49)
-  (unrealized (5 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 76)
-  (parent 49)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (7 0))
-    ((1 1) (6 0)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((6 1) (2 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 80)
-  (parent 53)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((5 1) (6 0)) ((6 1) (2 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-4 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-4)) b (pubk a-4)))))
-  (label 82)
-  (parent 55)
-  (unrealized (6 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((5 1) (6 0)) ((6 1) (2 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 84)
-  (parent 55)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-5) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-5 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-5)) b (pubk a-5)))))
-  (label 93)
-  (parent 65)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0)) ((5 1) (2 0))
-    ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 95)
-  (parent 65)
-  (unrealized (6 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-4) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-5) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0))
-    ((4 1) (2 0)) ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-4 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-5 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-5)) a (pubk a-5)))))
-  (label 100)
-  (parent 67)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-4) (b b))
-  (defstrand resp 2 (m m) (a a-5) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0))
-    ((4 1) (2 0)) ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-4 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc m (pubk b)) a-5 (pubk b)))
-      (send (enc (enc m (pubk a-5)) b (pubk a-5)))))
-  (label 101)
-  (parent 67)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-5) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-5 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-5)) b (pubk a-5)))))
-  (label 109)
-  (parent 71)
-  (unrealized (6 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 111)
-  (parent 71)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3)))))
-  (label 114)
-  (parent 72)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 115)
-  (parent 72)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((0 0) (7 0))
-    ((1 1) (5 0)) ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 119)
-  (parent 73)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (7 0))
-    ((1 1) (6 0)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((5 1) (6 0)) ((6 1) (2 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 123)
-  (parent 79)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (7 0))
-    ((1 1) (6 0)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((5 1) (6 0)) ((6 1) (2 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 124)
-  (parent 79)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-3) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((5 1) (6 0)) ((6 1) (2 0)) ((7 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-3 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-3)) b (pubk a-3)))))
-  (label 127)
-  (parent 81)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a b) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (5 0)) ((0 0) (7 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (2 0)) ((4 1) (2 0))
-    ((5 1) (4 0)) ((5 1) (6 0)) ((6 1) (2 0)) ((7 1) (2 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (2 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk a)) b (pubk a)))
-      (send (enc (enc m (pubk b)) a (pubk b))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3)))))
-  (label 129)
-  (parent 81)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-5) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-5 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-5)) b (pubk a-5)))))
-  (label 134)
-  (parent 89)
-  (unrealized (6 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 136)
-  (parent 89)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-5) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-5 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-5)) b (pubk a-5)))))
-  (label 139)
-  (parent 90)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a)))))
-  (label 140)
-  (parent 90)
-  (unrealized (6 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-5) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-5 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-5)) b (pubk a-5)))))
-  (label 145)
-  (parent 94)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-5) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0)
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-5 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-5)) a (pubk a-5)))))
-  (label 148)
-  (parent 94)
-  (unrealized (6 0) (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (defstrand resp 2 (m m) (a a-5) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (6 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0) (enc m (pubk b))
-    (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4))))
-    ((recv (enc (enc m (pubk b)) a-5 (pubk b)))
-      (send (enc (enc m (pubk a-5)) b (pubk a-5)))))
-  (label 155)
-  (parent 108)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (6 0)) ((0 0) (7 0))
-    ((1 1) (5 0)) ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (5 0))
-    ((4 1) (2 0)) ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 170)
-  (parent 137)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-4) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-4 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-4)) a (pubk a-4)))))
-  (label 176)
-  (parent 143)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((3 1) (6 0)) ((4 1) (2 0))
-    ((5 1) (2 0)) ((6 1) (5 0)) ((7 1) (5 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (5 0) (enc m (pubk b))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4)))))
-  (label 177)
-  (parent 143)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-5) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (6 0)) ((5 1) (2 0))
-    ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-5 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-5)) b (pubk a-5)))))
-  (label 182)
-  (parent 147)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton dy
-  (vars (m text) (a b a-0 a-1 a-2 a-3 a-4 a-5 name))
-  (defstrand init 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk b)) a)) (a a-0) (b b))
-  (defstrand resp 2 (m m) (a a-1) (b b))
-  (defstrand resp 2 (m m) (a a) (b b))
-  (defstrand resp 2 (m (cat (enc m (pubk a)) b)) (a a-2) (b a))
-  (defstrand resp 2 (m m) (a a-3) (b a))
-  (defstrand resp 2 (m m) (a a-4) (b b))
-  (defstrand resp 2 (m m) (a a-5) (b a))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 0) (7 0)) ((1 1) (5 0))
-    ((2 1) (0 1)) ((3 1) (4 0)) ((4 1) (6 0)) ((5 1) (2 0))
-    ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (added-strand resp 2) m (6 0) (enc m (pubk a))
-    (enc (enc m (pubk a)) b (pubk a)) (enc (enc m (pubk b)) a (pubk b)))
-  (traces
-    ((send (enc (enc m (pubk b)) a (pubk b)))
-      (recv (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk b)) a (pubk b)) a-0 (pubk b)))
-      (send (enc (enc (enc m (pubk b)) a (pubk a-0)) b (pubk a-0))))
-    ((recv (enc (enc m (pubk b)) a-1 (pubk b)))
-      (send (enc (enc m (pubk a-1)) b (pubk a-1))))
-    ((recv (enc (enc m (pubk b)) a (pubk b)))
-      (send (enc (enc m (pubk a)) b (pubk a))))
-    ((recv (enc (enc (enc m (pubk a)) b (pubk a)) a-2 (pubk a)))
-      (send (enc (enc (enc m (pubk a)) b (pubk a-2)) a (pubk a-2))))
-    ((recv (enc (enc m (pubk a)) a-3 (pubk a)))
-      (send (enc (enc m (pubk a-3)) a (pubk a-3))))
-    ((recv (enc (enc m (pubk b)) a-4 (pubk b)))
-      (send (enc (enc m (pubk a-4)) b (pubk a-4))))
-    ((recv (enc (enc m (pubk a)) a-5 (pubk a)))
-      (send (enc (enc m (pubk a-5)) a (pubk a-5)))))
-  (label 183)
-  (parent 147)
-  (unrealized (7 0))
-  (comment "aborted"))
diff --git a/tst/encsig.scm b/tst/encsig.scm
deleted file mode 100644
--- a/tst/encsig.scm
+++ /dev/null
@@ -1,44 +0,0 @@
-(herald "Encrypted Signed Message Example"
-   (comment "Shows examples of key usage of asymmetric keys"))
-
-(defprotocol mult-keys-enc-sig basic
-   (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-     (send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-     (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-     (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-     (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-     (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))))
-
-;;; The initiator point-of-view
-(defskeleton mult-keys-enc-sig
-   (vars (a b name) (n1 text))
-   (defstrand init 3 (a a) (b b) (n1 n1))
-   (non-orig (privk "enc" a) (privk "sig" a) (privk "sig" b))
-   (uniq-orig n1))
-
-;;; The responder point-of-view trusting only a's signature key
-(defskeleton mult-keys-enc-sig
-  (vars (a b name) (n2 text))
-  (defstrand resp 3 (a a) (b b) (n2 n2))
-  (non-orig (privk "sig" a))
-  (uniq-orig n2))
-
-;;; The responder point-of-view trusting only a's encryption key
-(defskeleton mult-keys-enc-sig
-  (vars (a b name) (n2 text))
-  (defstrand resp 3 (a a) (b b) (n2 n2))
-  (non-orig (privk "enc" a))
-  (uniq-orig n2))
-
-;;; The responder point-of-view trusting both of a's keys
-(defskeleton mult-keys-enc-sig
-  (vars (a b name) (n2 text))
-  (defstrand resp 3 (a a) (b b) (n2 n2))
-  (non-orig (privk "sig" a) (privk "enc" a))
-  (uniq-orig n2))
diff --git a/tst/encsig.tst b/tst/encsig.tst
deleted file mode 100644
--- a/tst/encsig.tst
+++ /dev/null
@@ -1,374 +0,0 @@
-(herald "Encrypted Signed Message Example"
-  (comment "Shows examples of key usage of asymmetric keys"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from encsig.scm")
-
-(defprotocol mult-keys-enc-sig basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (non-orig (privk "enc" a) (privk "sig" a) (privk "sig" b))
-  (uniq-orig n1)
-  (traces
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (n1 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk "enc" a) (privk "sig" a) (privk "sig" b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand resp 2)
-    (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)) (0 1))
-  (traces
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))))
-  (label 1)
-  (parent 0)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol mult-keys-enc-sig basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (non-orig (privk "sig" a))
-  (uniq-orig n2)
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (label 2)
-  (unrealized (0 0) (0 2))
-  (origs (n2 (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 1)
-    (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)) (0 0))
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))))
-  (label 3)
-  (parent 2)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
-  (non-orig (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (displaced 1 2 init 3)
-    (enc (enc n2 (pubk "enc" b)) (privk "sig" a)) (0 2))
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (label 4)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 n1-0 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b))
-  (defstrand init 3 (n1 n1-0) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((1 0) (0 0)) ((2 2) (0 2)))
-  (non-orig (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 3)
-    (enc (enc n2 (pubk "enc" b)) (privk "sig" a)) (0 2))
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1-0 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1-0 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (label 5)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol mult-keys-enc-sig basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (non-orig (privk "enc" a))
-  (uniq-orig n2)
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (label 6)
-  (unrealized (0 2))
-  (origs (n2 (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 text) (a b b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (privk "enc" a))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand init 3) n2 (0 2)
-    (enc n1 n2 (pubk "enc" a)))
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b-0)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b-0)))
-      (send (enc (enc n2 (pubk "enc" b-0)) (privk "sig" a)))))
-  (label 7)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol mult-keys-enc-sig basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (label 8)
-  (unrealized (0 0) (0 2))
-  (origs (n2 (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 1)
-    (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)) (0 0))
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))))
-  (label 9)
-  (parent 8)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (displaced 1 2 init 3)
-    (enc (enc n2 (pubk "enc" b)) (privk "sig" a)) (0 2))
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (label 10)
-  (parent 9)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 n1-0 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b))
-  (defstrand init 3 (n1 n1-0) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((1 0) (0 0)) ((2 2) (0 2)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 3)
-    (enc (enc n2 (pubk "enc" b)) (privk "sig" a)) (0 2))
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1-0 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1-0 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (label 11)
-  (parent 9)
-  (unrealized (2 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((1 0) (0 0)) ((2 2) (0 2)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation nonce-test (contracted (n1-0 n1)) n2 (2 1)
-    (enc n1 n2 (pubk "enc" a)))
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (label 12)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 n1-0 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((1 2) (0 2)) ((2 0) (0 0)) ((2 2) (1 1)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation nonce-test (displaced 1 3 init 3) n2 (2 1)
-    (enc n1 n2 (pubk "enc" a)))
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1-0 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1-0 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a)))))
-  (label 13)
-  (parent 11)
-  (seen 10)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton mult-keys-enc-sig
-  (vars (n2 n1 n1-0 text) (a b b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b))
-  (defstrand init 3 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
-  (precedes ((0 1) (3 1)) ((1 0) (0 0)) ((2 2) (0 2)) ((3 2) (2 1)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand init 3) n2 (2 1)
-    (enc n1 n2 (pubk "enc" a)))
-  (traces
-    ((recv (enc (enc n1 a (pubk "enc" b)) (privk "sig" a)))
-      (send (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b)))
-      (recv (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1-0 a (pubk "enc" b)) (privk "sig" a)))
-      (recv (enc (enc n1-0 n2 (pubk "enc" a)) (privk "sig" b)))
-      (send (enc (enc n2 (pubk "enc" b)) (privk "sig" a))))
-    ((send (enc (enc n1 a (pubk "enc" b-0)) (privk "sig" a)))
-      (recv (enc (enc n1 n2 (pubk "enc" a)) (privk "sig" b-0)))
-      (send (enc (enc n2 (pubk "enc" b-0)) (privk "sig" a)))))
-  (label 14)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/enrich.scm b/tst/enrich.scm
new file mode 100644
--- /dev/null
+++ b/tst/enrich.scm
@@ -0,0 +1,18 @@
+(herald enrich)
+
+(defprotocol enrich basic
+  (defrole extend
+    (vars (value state mesg))
+    (trace
+     (recv value)
+     (tran state (hash value state))))
+  (defrole see
+    (vars (state mesg))
+    (trace
+     (obsv state))))
+
+(defskeleton enrich
+  (vars (state mesg))
+  (defstrand extend 2 (value "1") (state (hash "0" state)))
+  (defstrand see 1 (state (hash "0" state))))
+     
diff --git a/tst/enrich.tst b/tst/enrich.tst
new file mode 100644
--- /dev/null
+++ b/tst/enrich.tst
@@ -0,0 +1,83 @@
+(herald enrich)
+
+(comment "CPSA 3.2.2")
+(comment "All input read from enrich.scm")
+
+(defprotocol enrich basic
+  (defrole extend
+    (vars (value state mesg))
+    (trace (recv value) (tran state (hash value state))))
+  (defrole see (vars (state mesg)) (trace (obsv state))))
+
+(defskeleton enrich
+  (vars (state mesg))
+  (defstrand extend 2 (value "1") (state (hash "0" state)))
+  (defstrand see 1 (state (hash "0" state)))
+  (traces
+    ((recv "1") (tran (hash "0" state) (hash "1" (hash "0" state))))
+    ((obsv (hash "0" state))))
+  (label 0)
+  (unrealized (0 1) (1 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton enrich
+  (vars (state mesg))
+  (defstrand extend 2 (value "1") (state (hash "0" state)))
+  (defstrand see 1 (state (hash "0" state)))
+  (defstrand extend 2 (value "0") (state state))
+  (precedes ((2 1) (1 0)))
+  (leadsto ((2 1) (1 0)))
+  (operation state-passing-test (added-strand extend 2) (hash "0" state)
+    (1 0))
+  (traces
+    ((recv "1") (tran (hash "0" state) (hash "1" (hash "0" state))))
+    ((obsv (hash "0" state)))
+    ((recv "0") (tran state (hash "0" state))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton enrich
+  (vars (state mesg))
+  (defstrand extend 2 (value "1") (state (hash "0" state)))
+  (defstrand see 1 (state (hash "0" state)))
+  (defstrand extend 2 (value "0") (state state))
+  (precedes ((1 0) (0 1)) ((2 1) (0 1)) ((2 1) (1 0)))
+  (leadsto ((2 1) (0 1)) ((2 1) (1 0)))
+  (operation state-passing-test (displaced 3 2 extend 2)
+    (hash "0" state) (0 1))
+  (traces
+    ((recv "1") (tran (hash "0" state) (hash "1" (hash "0" state))))
+    ((obsv (hash "0" state)))
+    ((recv "0") (tran state (hash "0" state))))
+  (label 2)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps ((0 1) ((state state))))
+  (origs))
+
+(defskeleton enrich
+  (vars (state mesg))
+  (defstrand extend 2 (value "1") (state (hash "0" state)))
+  (defstrand see 1 (state (hash "0" state)))
+  (defstrand extend 2 (value "0") (state state))
+  (defstrand extend 2 (value "0") (state state))
+  (precedes ((1 0) (0 1)) ((2 1) (1 0)) ((3 1) (0 1)))
+  (leadsto ((2 1) (1 0)) ((3 1) (0 1)))
+  (operation state-passing-test (added-strand extend 2) (hash "0" state)
+    (0 1))
+  (traces
+    ((recv "1") (tran (hash "0" state) (hash "1" (hash "0" state))))
+    ((obsv (hash "0" state))) ((recv "0") (tran state (hash "0" state)))
+    ((recv "0") (tran state (hash "0" state))))
+  (label 3)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps ((0 1) ((state state))))
+  (origs))
+
+(comment "Nothing left to do")
diff --git a/tst/envelope.scm b/tst/envelope.scm
new file mode 100644
--- /dev/null
+++ b/tst/envelope.scm
@@ -0,0 +1,129 @@
+;;; Mark Ryan's envelope protocol, implemented using TPMs.
+;;; The protocol includes roles to emulate interactions with a simplified
+;;; TPM (trusted platform module) that only has a single Platform
+;;; Configuration Register (PCR).  
+
+;;; The true protocol is encoded in the "alice" role.  Alice is a
+;;; teenager who wants to go out for an evening and maintain privacy
+;;; about her itinerary, but her parents insist on being able to know in
+;;; an emergency.
+
+;;; Alice uses a TPM-created key to encrypt the itinerary (represented
+;;; by 'v' for value).  Alice's parents can alter the state of the TPM
+;;; in either of two ways, but not in both: they can extend with
+;;; "obtain", which will enable decryption of 'v'.  Or, they can
+;;; extend with "refuse", which serves to represent permanently declining
+;;; the option to open the envelope.  
+
+(herald "Envelope Protocol" (bound 20))
+
+;;; Encoding of a PCR extend operation
+(defmacro (extend val old)
+  (hash val old))
+
+;; This is the refusal token
+(defmacro (refuse n pcr v k aik)
+  (enc "quote" (extend "refuse" (extend n pcr)) (enc v k) aik))
+
+(defprotocol envelope basic
+
+  ;; Power on sets the TPM to the boot state
+  (defrole tpm-power-on
+    (vars (state mesg))
+    (trace
+     (init "0")))
+
+  ;; TPM Quote has a fake event to deal with the fact that a variable
+  ;; of sort mesg must be acquired.
+  (defrole tpm-quote
+    (vars (nonce pcr mesg) (aik akey))
+    (trace
+     (recv (cat "quote" nonce))
+     (obsv pcr)
+     (send (enc "quote" pcr nonce aik)))
+    (non-orig aik))
+
+  ;; The extend command occurs only within an encrypted session.  We
+  ;; assume some session key already exists
+  (defrole tpm-extend-enc
+    (vars (value state mesg) (esk skey) (tne tno data)
+	  (tpmkey akey))
+    (trace
+     (recv (cat "establish transport"
+		tpmkey (enc esk tpmkey)))
+     (send (cat "establish transport" tne))
+     (recv (cat "execute transport"
+		(cat "extend" (enc value esk))
+		tno "false"
+		(hash esk (hash "execute transport"
+				(hash "extend"
+				      (enc value esk)))
+				tne tno "false")))
+     (tran state (extend value state)))
+    (uniq-orig tne)
+    (non-orig (invk tpmkey)))
+
+  ;; This role creates a key whose use is restricted to a requested
+  ;; pcr value (since we only model one pcr).  It doesn't create or
+  ;; change any TPM state.
+  (defrole tpm-create-key
+    (vars (k aik akey) (pcr mesg) (esk skey))
+    (trace
+     (recv (enc "create key" pcr esk)) ;; encryption prevents weird shapes
+     (send (enc "created" k pcr aik)));; no tpm state is set
+    (uniq-orig k)
+    (non-orig (invk k) aik esk))
+
+  ;; This role receives an encryption and a previously made key
+  ;; structure that restricts the decryption key to be used with a
+  ;; certain pcr value.  It retrieves the current value and checks
+  ;; that it matches before decrypting.
+  (defrole tpm-decrypt
+    (vars (m pcr mesg) (k aik akey))
+    (trace
+     (recv (cat "decrypt" (enc m k)))
+     (recv (enc "created" k pcr aik))
+     (obsv pcr)
+     (send m))
+    (non-orig aik))
+
+  ;; Alice extends a pcr with a fresh nonce in an encrypted session.
+  ;; She has the TPM create a new key whose use is bound to the hash
+  ;; of pcr value she just created with the string "obtain".  She then
+  ;; encrypts her fresh secret with this newly created key.  This role
+  ;; has a fake reception event to deal with he fact that pcr must be
+  ;; acquired.
+  (defrole alice
+    (vars (v n tne tno data) (esk1 esk skey) (k aik tpmkey akey)
+	  (pcr mesg))
+    (trace
+     (send (cat "establish transport"
+		tpmkey (enc esk tpmkey)))
+     (recv (cat "establish transport" tne))
+     (send (cat "execute transport"
+		(cat "extend" (enc n esk))
+		tno "false"
+		(hash esk (hash "execute transport"
+				(hash "extend"
+				      (enc n esk)))
+				tne tno "false")))
+     (recv pcr)				; Fake event
+     (send (enc "create key" (extend "obtain" (extend n pcr)) esk1))
+     (recv (enc "created" k (extend "obtain" (extend n pcr)) aik))
+     (send (enc v k)))
+    (uniq-orig n v tno esk)
+    (neq (tno n))
+    (non-orig aik esk1 (invk tpmkey))))
+
+;;; Initial skeleton
+(defskeleton envelope
+  (vars (v n data) (k aik akey) (pcr mesg))
+  (deflistener (refuse n pcr v k aik))
+  (deflistener v)
+  (defstrand alice 7 (n n) (pcr pcr) (v v) (k k) (aik aik)))
+
+(defskeleton envelope
+  (vars (v data))
+  (deflistener v)
+  (defstrand alice 7 (v v)))
+
diff --git a/tst/envelope.tst b/tst/envelope.tst
new file mode 100644
--- /dev/null
+++ b/tst/envelope.tst
@@ -0,0 +1,7755 @@
+(herald "Envelope Protocol" (bound 20))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from envelope.scm")
+(comment "Strand count bounded at 20")
+
+(defprotocol envelope basic
+  (defrole tpm-power-on (vars) (trace (init "0")))
+  (defrole tpm-quote
+    (vars (nonce pcr mesg) (aik akey))
+    (trace (recv (cat "quote" nonce)) (obsv pcr)
+      (send (enc "quote" pcr nonce aik)))
+    (non-orig aik))
+  (defrole tpm-extend-enc
+    (vars (value state mesg) (esk skey) (tne tno data) (tpmkey akey))
+    (trace (recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc value esk)) tno
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc value esk)))
+            tne tno "false"))) (tran state (hash value state)))
+    (non-orig (invk tpmkey))
+    (uniq-orig tne))
+  (defrole tpm-create-key
+    (vars (k aik akey) (pcr mesg) (esk skey))
+    (trace (recv (enc "create key" pcr esk))
+      (send (enc "created" k pcr aik)))
+    (non-orig (invk k) aik esk)
+    (uniq-orig k))
+  (defrole tpm-decrypt
+    (vars (m pcr mesg) (k aik akey))
+    (trace (recv (cat "decrypt" (enc m k)))
+      (recv (enc "created" k pcr aik)) (obsv pcr) (send m))
+    (non-orig aik))
+  (defrole alice
+    (vars (v n tne tno data) (esk1 esk skey) (k aik tpmkey akey)
+      (pcr mesg))
+    (trace (send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    (non-orig aik esk1 (invk tpmkey))
+    (uniq-orig v n tno esk)
+    (neq (tno n))))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (neq (tno n))
+  (non-orig esk1 aik (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k))))
+  (label 0)
+  (unrealized (0 0) (1 0) (2 5))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (precedes ((2 6) (0 0)) ((2 6) (1 0)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 0) (2 5))
+  (origs (esk (2 0)) (n (2 2)) (tno (2 2)) (v (2 6)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" k (hash "obtain" (hash n pcr)) aik))
+    (aik aik-0))
+  (precedes ((2 6) (0 0)) ((2 6) (1 0)) ((3 2) (2 5)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" k (hash "obtain" (hash n pcr)) aik) (2 5))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (cat "quote" nonce))
+      (obsv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send
+        (enc "quote" (enc "created" k (hash "obtain" (hash n pcr)) aik)
+          nonce aik-0))))
+  (label 2)
+  (parent 1)
+  (unrealized (0 0) (3 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk esk-0 skey)
+    (k aik tpmkey akey))
+  (deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk-0) (k k) (aik aik))
+  (precedes ((2 6) (0 0)) ((2 6) (1 0)) ((3 1) (2 5)))
+  (neq (tno n))
+  (non-orig esk1 esk-0 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-create-key 2)
+    (enc "created" k (hash "obtain" (hash n pcr)) aik) (2 5))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk-0))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik))))
+  (label 3)
+  (parent 1)
+  (unrealized (0 0) (1 0) (3 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk esk-0 skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk-0) (k k) (aik aik))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "create key" (hash "obtain" (hash n pcr)) esk-0))
+    (aik aik-0))
+  (precedes ((2 6) (0 0)) ((2 6) (1 0)) ((3 1) (2 5)) ((4 2) (3 0)))
+  (neq (tno n))
+  (non-orig esk1 esk-0 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "create key" (hash "obtain" (hash n pcr)) esk-0) (3 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk-0))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "quote" nonce))
+      (obsv (enc "create key" (hash "obtain" (hash n pcr)) esk-0))
+      (send
+        (enc "quote"
+          (enc "create key" (hash "obtain" (hash n pcr)) esk-0) nonce
+          aik-0))))
+  (label 4)
+  (parent 3)
+  (unrealized (0 0) (1 0) (4 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (1 0)) ((3 1) (2 5)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (displaced 4 2 alice 5)
+    (enc "create key" (hash "obtain" (hash n pcr)) esk-0) (3 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik))))
+  (label 5)
+  (parent 3)
+  (unrealized (0 0) (1 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr v) (aik aik-0))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 1)) ((3 1) (2 5))
+    ((4 2) (1 0)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation nonce-test (added-strand tpm-quote 3) v (1 0) (enc v k))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "quote" nonce)) (obsv v)
+      (send (enc "quote" v nonce aik-0))))
+  (label 6)
+  (parent 5)
+  (unrealized (0 0) (4 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (pcr pcr-0 mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
+    ((4 3) (1 0)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) v (1 0) (enc v k))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k pcr-0 aik-0)) (obsv pcr-0) (send v)))
+  (label 7)
+  (parent 5)
+  (unrealized (0 0) (4 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (pcr pcr-0 nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 aik-1 akey))
+  (deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" k pcr-0 aik-0)) (aik aik-1))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
+    ((3 1) (5 1)) ((4 3) (1 0)) ((5 2) (4 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" k pcr-0 aik-0) (4 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k pcr-0 aik-0)) (obsv pcr-0) (send v))
+    ((recv (cat "quote" nonce)) (obsv (enc "created" k pcr-0 aik-0))
+      (send (enc "quote" (enc "created" k pcr-0 aik-0) nonce aik-1))))
+  (label 8)
+  (parent 7)
+  (unrealized (0 0) (5 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n pcr)))
+    (k k) (aik aik))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
+    ((4 3) (1 0)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (displaced 5 3 tpm-create-key 2)
+    (enc "created" k pcr-0 aik-0) (4 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (obsv (hash "obtain" (hash n pcr))) (send v)))
+  (label 9)
+  (parent 7)
+  (unrealized (0 0) (4 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno tne-0 tno-0 data) (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 akey))
+  (deflistener (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n pcr)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n pcr))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (precedes ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)))
+  (leadsto ((5 3) (4 2)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tno tne-0 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "obtain" (hash n pcr)) (4 2))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n pcr)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (obsv (hash "obtain" (hash n pcr))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n pcr) (hash "obtain" (hash n pcr)))))
+  (label 10)
+  (parent 9)
+  (unrealized (0 0) (5 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 3) (5 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash n state) (5 3))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state))))
+  (label 11)
+  (parent 10)
+  (unrealized (0 0) (6 2))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-1
+        (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+        tno-1 "false")) (aik aik-0))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 3) (5 3))
+    ((7 2) (6 2)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false") (6 2))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" nonce))
+      (obsv
+        (hash esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false"))
+      (send
+        (enc "quote"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false") nonce aik-0))))
+  (label 12)
+  (parent 11)
+  (unrealized (0 0) (6 2) (7 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (displaced 7 2 alice 3)
+    (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false") (6 2))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state))))
+  (label 13)
+  (parent 11)
+  (unrealized (0 0) (6 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat esk-1
+        (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+        tno-1 "false"))
+    (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false") (6 2))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false"))))
+  (label 14)
+  (parent 11)
+  (unrealized (0 0) (6 2) (7 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-1
+        (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+        tno-1 "false")) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value esk-1)
+    (state
+      (cat (hash "execute transport" (hash "extend" (enc n esk-1)))
+        tne-1 tno-1 "false")) (tne tne-2) (tno tno-2) (esk esk-2)
+    (tpmkey tpmkey-2))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (8 3))
+    ((6 3) (5 3)) ((7 2) (6 2)) ((8 3) (7 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false") (7 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" nonce))
+      (obsv
+        (hash esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false"))
+      (send
+        (enc "quote"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false") nonce aik-0)))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc esk-1 esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc esk-1 esk-2)))
+            tne-2 tno-2 "false")))
+      (tran
+        (cat (hash "execute transport" (hash "extend" (enc n esk-1)))
+          tne-1 tno-1 "false")
+        (hash esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false"))))
+  (label 15)
+  (parent 12)
+  (unrealized (0 0) (6 2) (8 3))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (contracted (tpmkey-1 tpmkey)) esk (6 0)
+    (enc esk tpmkey))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state))))
+  (label 16)
+  (parent 13)
+  (unrealized (0 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((2 0) (7 1)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (6 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (6 0)
+    (enc esk tpmkey))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" nonce)) (obsv esk)
+      (send (enc "quote" esk nonce aik-0))))
+  (label 17)
+  (parent 13)
+  (unrealized (0 0) (7 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((2 0) (7 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 3) (6 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (6 0)
+    (enc esk tpmkey))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk)))
+  (label 18)
+  (parent 13)
+  (unrealized (0 0) (7 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
+    (aik aik-0))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 2) (7 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash "execute transport" (hash "extend" (enc n esk-1))) (7 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "quote" nonce))
+      (obsv (hash "execute transport" (hash "extend" (enc n esk-1))))
+      (send
+        (enc "quote"
+          (hash "execute transport" (hash "extend" (enc n esk-1))) nonce
+          aik-0))))
+  (label 19)
+  (parent 14)
+  (unrealized (0 0) (6 2) (8 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat "execute transport" (hash "extend" (enc n esk-1))))
+    (hash "execute transport" (hash "extend" (enc n esk-1))) (7 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1))))))
+  (label 20)
+  (parent 14)
+  (unrealized (0 0) (6 2) (8 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (4 0))
+    ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik) (0 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send
+        (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))))
+  (label 21)
+  (parent 16)
+  (unrealized (7 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+    (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (4 0))
+    ((2 6) (7 1)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik) (0 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" nonce))
+      (obsv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send
+        (enc "quote"
+          (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)
+          nonce aik-0))))
+  (label 22)
+  (parent 16)
+  (unrealized (7 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr nonce mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((2 0) (7 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 3) (6 0)) ((8 2) (7 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" tpmkey pcr aik-0) (7 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk))
+    ((recv (cat "quote" nonce)) (obsv (enc "created" tpmkey pcr aik-0))
+      (send
+        (enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1))))
+  (label 23)
+  (parent 18)
+  (unrealized (0 0) (8 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value "execute transport")
+    (state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2)
+    (esk esk-2) (tpmkey tpmkey-2))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 2) (7 0)) ((9 3) (8 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((9 3) (8 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "execute transport" (hash "extend" (enc n esk-1))) (8 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "quote" nonce))
+      (obsv (hash "execute transport" (hash "extend" (enc n esk-1))))
+      (send
+        (enc "quote"
+          (hash "execute transport" (hash "extend" (enc n esk-1))) nonce
+          aik-0)))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport"
+          (cat "extend" (enc "execute transport" esk-2)) tno-2 "false"
+          (hash esk-2
+            (hash "execute transport"
+              (hash "extend" (enc "execute transport" esk-2))) tne-2
+            tno-2 "false")))
+      (tran (hash "extend" (enc n esk-1))
+        (hash "execute transport" (hash "extend" (enc n esk-1))))))
+  (label 24)
+  (parent 19)
+  (unrealized (0 0) (6 2) (9 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "extend" (enc n esk-1))) (aik aik-0))
+  (precedes ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 2) (8 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash "extend" (enc n esk-1)) (8 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "quote" nonce)) (obsv (hash "extend" (enc n esk-1)))
+      (send (enc "quote" (hash "extend" (enc n esk-1)) nonce aik-0))))
+  (label 25)
+  (parent 20)
+  (unrealized (0 0) (6 2) (9 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (precedes ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 1) (8 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener (cat "extend" (enc n esk-1)))
+    (hash "extend" (enc n esk-1)) (8 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1)))))
+  (label 26)
+  (parent 20)
+  (unrealized (0 0) (9 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 4) (3 0)) ((2 6) (4 0))
+    ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 tne-1 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "refuse" (hash n state)) (7 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state)))))
+  (label 27)
+  (parent 21)
+  (unrealized (8 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
+    (esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 tpmkey-3 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value "execute transport")
+    (state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2)
+    (esk esk-2) (tpmkey tpmkey-2))
+  (defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-1))
+    (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))
+  (precedes ((2 2) (10 3)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 2) (7 0)) ((9 3) (8 1))
+    ((10 3) (9 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((9 3) (8 1)) ((10 3) (9 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 tne-3 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "extend" (enc n esk-1)) (9 3))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "quote" nonce))
+      (obsv (hash "execute transport" (hash "extend" (enc n esk-1))))
+      (send
+        (enc "quote"
+          (hash "execute transport" (hash "extend" (enc n esk-1))) nonce
+          aik-0)))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport"
+          (cat "extend" (enc "execute transport" esk-2)) tno-2 "false"
+          (hash esk-2
+            (hash "execute transport"
+              (hash "extend" (enc "execute transport" esk-2))) tne-2
+            tno-2 "false")))
+      (tran (hash "extend" (enc n esk-1))
+        (hash "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3)))
+      (send (cat "establish transport" tne-3))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "extend" esk-3))
+          tno-3 "false"
+          (hash esk-3
+            (hash "execute transport"
+              (hash "extend" (enc "extend" esk-3))) tne-3 tno-3
+            "false")))
+      (tran (enc n esk-1) (hash "extend" (enc n esk-1)))))
+  (label 28)
+  (parent 24)
+  (unrealized (0 0) (6 2) (10 3))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "extend" (enc n esk-1))) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-1))
+    (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (precedes ((2 2) (10 3)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 2) (8 0))
+    ((10 3) (9 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((10 3) (9 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "extend" (enc n esk-1)) (9 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "quote" nonce)) (obsv (hash "extend" (enc n esk-1)))
+      (send (enc "quote" (hash "extend" (enc n esk-1)) nonce aik-0)))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "extend" esk-2))
+          tno-2 "false"
+          (hash esk-2
+            (hash "execute transport"
+              (hash "extend" (enc "extend" esk-2))) tne-2 tno-2
+            "false")))
+      (tran (enc n esk-1) (hash "extend" (enc n esk-1)))))
+  (label 29)
+  (parent 25)
+  (unrealized (0 0) (6 2) (10 3))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (precedes ((2 0) (6 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
+    ((9 1) (8 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (contracted (esk-1 esk)) n (9 0) (enc n esk))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-1
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-1
+            tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-1 tno-1 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-1 tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk)))))
+  (label 30)
+  (parent 26)
+  (unrealized (0 0) (6 0) (7 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr n) (aik aik-0))
+  (precedes ((2 2) (10 1)) ((2 4) (3 0)) ((2 6) (0 0)) ((2 6) (4 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (7 0))
+    ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0)) ((9 1) (8 0))
+    ((10 2) (9 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) n (9 0) (enc n esk))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1))))
+    ((recv (cat "quote" nonce)) (obsv n)
+      (send (enc "quote" n nonce aik-0))))
+  (label 31)
+  (parent 26)
+  (unrealized (0 0) (10 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (deflistener esk)
+  (precedes ((2 0) (10 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 1) (9 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-listener esk) n (9 0) (enc n esk))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1)))) ((recv esk) (send esk)))
+  (label 32)
+  (parent 26)
+  (unrealized (0 0) (10 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 3) (8 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash n state) (8 3))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state))))
+  (label 33)
+  (parent 27)
+  (unrealized (9 2))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (10 1)) ((2 2) (9 0)) ((2 4) (3 0))
+    ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2))
+    ((8 1) (7 0)) ((9 1) (8 0)) ((10 2) (7 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (7 0)
+    (enc esk tpmkey))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-1
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-1
+            tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-1 tno-1 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-1 tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk))))
+    ((recv (cat "quote" nonce)) (obsv esk)
+      (send (enc "quote" esk nonce aik-0))))
+  (label 34)
+  (parent 30)
+  (unrealized (0 0) (6 0) (10 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (10 0)) ((2 2) (9 0)) ((2 4) (3 0))
+    ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2))
+    ((8 1) (7 0)) ((9 1) (8 0)) ((10 3) (7 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (7 0)
+    (enc esk tpmkey))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-1
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-1
+            tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-1 tno-1 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-1 tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk))))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk)))
+  (label 35)
+  (parent 30)
+  (unrealized (0 0) (6 0) (10 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((2 0) (11 1)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 1) (9 0)) ((11 2) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (10 0)
+    (enc esk tpmkey))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1)))) ((recv esk) (send esk))
+    ((recv (cat "quote" nonce)) (obsv esk)
+      (send (enc "quote" esk nonce aik-0))))
+  (label 36)
+  (parent 32)
+  (unrealized (0 0) (11 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((2 0) (11 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 1) (9 0)) ((11 3) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (10 0)
+    (enc esk tpmkey))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1)))) ((recv esk) (send esk))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk)))
+  (label 37)
+  (parent 32)
+  (unrealized (0 0) (11 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-2
+        (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+        tno-2 "false")) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 3) (8 3)) ((10 2) (9 2)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false") (9 2))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" nonce))
+      (obsv
+        (hash esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false"))
+      (send
+        (enc "quote"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false") nonce aik-0))))
+  (label 38)
+  (parent 33)
+  (unrealized (9 2) (10 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat esk-2
+        (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+        tno-2 "false"))
+    (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false") (9 2))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false"))))
+  (label 39)
+  (parent 33)
+  (unrealized (9 2) (10 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 data) (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((2 0) (6 0)) ((2 0) (10 0)) ((2 2) (9 0)) ((2 4) (3 0))
+    ((2 6) (0 0)) ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2))
+    ((8 1) (7 0)) ((9 1) (8 0)) ((10 3) (7 0)) ((11 2) (10 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" tpmkey pcr aik-0) (10 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-1
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-1
+            tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-1 tno-1 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-1 tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk))))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk))
+    ((recv (cat "quote" nonce)) (obsv (enc "created" tpmkey pcr aik-0))
+      (send
+        (enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1))))
+  (label 40)
+  (parent 35)
+  (unrealized (0 0) (6 0) (11 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((2 0) (11 0)) ((2 2) (9 0)) ((2 4) (3 0)) ((2 6) (0 0))
+    ((2 6) (4 0)) ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2))
+    ((6 1) (7 0)) ((6 3) (5 3)) ((7 1) (6 2)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 1) (9 0)) ((11 3) (10 0)) ((12 2) (11 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" tpmkey pcr aik-0) (11 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1)))) ((recv esk) (send esk))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk))
+    ((recv (cat "quote" nonce)) (obsv (enc "created" tpmkey pcr aik-0))
+      (send
+        (enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1))))
+  (label 41)
+  (parent 37)
+  (unrealized (0 0) (12 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
+    (esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-2
+        (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+        tno-2 "false")) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value esk-2)
+    (state
+      (cat (hash "execute transport" (hash "extend" (enc n esk-2)))
+        tne-2 tno-2 "false")) (tne tne-3) (tno tno-3) (esk esk-3)
+    (tpmkey tpmkey-3))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (11 3)) ((9 3) (8 3)) ((10 2) (9 2))
+    ((11 3) (10 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
+    ((11 3) (10 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false") (10 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" nonce))
+      (obsv
+        (hash esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false"))
+      (send
+        (enc "quote"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false") nonce aik-0)))
+    ((recv (cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3)))
+      (send (cat "establish transport" tne-3))
+      (recv
+        (cat "execute transport" (cat "extend" (enc esk-2 esk-3)) tno-3
+          "false"
+          (hash esk-3
+            (hash "execute transport" (hash "extend" (enc esk-2 esk-3)))
+            tne-3 tno-3 "false")))
+      (tran
+        (cat (hash "execute transport" (hash "extend" (enc n esk-2)))
+          tne-2 tno-2 "false")
+        (hash esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false"))))
+  (label 42)
+  (parent 38)
+  (unrealized (9 2) (11 3))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "execute transport" (hash "extend" (enc n esk-2))))
+    (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 2) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash "execute transport" (hash "extend" (enc n esk-2))) (10 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "quote" nonce))
+      (obsv (hash "execute transport" (hash "extend" (enc n esk-2))))
+      (send
+        (enc "quote"
+          (hash "execute transport" (hash "extend" (enc n esk-2))) nonce
+          aik-0))))
+  (label 43)
+  (parent 39)
+  (unrealized (9 2) (11 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 1) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat "execute transport" (hash "extend" (enc n esk-2))))
+    (hash "execute transport" (hash "extend" (enc n esk-2))) (10 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-2))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-2))))))
+  (label 44)
+  (parent 39)
+  (unrealized (9 2) (11 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
+    (esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "execute transport" (hash "extend" (enc n esk-2))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value "execute transport")
+    (state (hash "extend" (enc n esk-2))) (tne tne-3) (tno tno-3)
+    (esk esk-3) (tpmkey tpmkey-3))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 2) (10 0)) ((12 3) (11 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
+    ((12 3) (11 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "execute transport" (hash "extend" (enc n esk-2))) (11 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "quote" nonce))
+      (obsv (hash "execute transport" (hash "extend" (enc n esk-2))))
+      (send
+        (enc "quote"
+          (hash "execute transport" (hash "extend" (enc n esk-2))) nonce
+          aik-0)))
+    ((recv (cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3)))
+      (send (cat "establish transport" tne-3))
+      (recv
+        (cat "execute transport"
+          (cat "extend" (enc "execute transport" esk-3)) tno-3 "false"
+          (hash esk-3
+            (hash "execute transport"
+              (hash "extend" (enc "execute transport" esk-3))) tne-3
+            tno-3 "false")))
+      (tran (hash "extend" (enc n esk-2))
+        (hash "execute transport" (hash "extend" (enc n esk-2))))))
+  (label 45)
+  (parent 43)
+  (unrealized (9 2) (12 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "extend" (enc n esk-2))) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (9 2)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 1) (10 0)) ((12 2) (11 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash "extend" (enc n esk-2)) (11 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-2))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-2)))))
+    ((recv (cat "quote" nonce)) (obsv (hash "extend" (enc n esk-2)))
+      (send (enc "quote" (hash "extend" (enc n esk-2)) nonce aik-0))))
+  (label 46)
+  (parent 44)
+  (unrealized (9 2) (12 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
+  (deflistener (cat "extend" (enc n esk-2)))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (12 0)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 1) (10 0)) ((12 1) (11 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test
+    (added-listener (cat "extend" (enc n esk-2)))
+    (hash "extend" (enc n esk-2)) (11 0))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-2))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-2)))))
+    ((recv (cat "extend" (enc n esk-2)))
+      (send (cat "extend" (enc n esk-2)))))
+  (label 47)
+  (parent 44)
+  (unrealized (12 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 tne-4
+      tno-4 data) (esk1 esk esk-0 esk-1 esk-2 esk-3 esk-4 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 tpmkey-4
+      akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "execute transport" (hash "extend" (enc n esk-2))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value "execute transport")
+    (state (hash "extend" (enc n esk-2))) (tne tne-3) (tno tno-3)
+    (esk esk-3) (tpmkey tpmkey-3))
+  (defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-2))
+    (tne tne-4) (tno tno-4) (esk esk-4) (tpmkey tpmkey-4))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (13 3)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 2) (10 0)) ((12 3) (11 1)) ((13 3) (12 3)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
+    ((12 3) (11 1)) ((13 3) (12 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3) (invk tpmkey-4))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 tne-4 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "extend" (enc n esk-2)) (12 3))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "quote" nonce))
+      (obsv (hash "execute transport" (hash "extend" (enc n esk-2))))
+      (send
+        (enc "quote"
+          (hash "execute transport" (hash "extend" (enc n esk-2))) nonce
+          aik-0)))
+    ((recv (cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3)))
+      (send (cat "establish transport" tne-3))
+      (recv
+        (cat "execute transport"
+          (cat "extend" (enc "execute transport" esk-3)) tno-3 "false"
+          (hash esk-3
+            (hash "execute transport"
+              (hash "extend" (enc "execute transport" esk-3))) tne-3
+            tno-3 "false")))
+      (tran (hash "extend" (enc n esk-2))
+        (hash "execute transport" (hash "extend" (enc n esk-2)))))
+    ((recv (cat "establish transport" tpmkey-4 (enc esk-4 tpmkey-4)))
+      (send (cat "establish transport" tne-4))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "extend" esk-4))
+          tno-4 "false"
+          (hash esk-4
+            (hash "execute transport"
+              (hash "extend" (enc "extend" esk-4))) tne-4 tno-4
+            "false")))
+      (tran (enc n esk-2) (hash "extend" (enc n esk-2)))))
+  (label 48)
+  (parent 45)
+  (unrealized (9 2) (13 3))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
+    (esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 tpmkey-3 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "extend" (enc n esk-2))) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-2))
+    (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (13 3)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 1) (10 0)) ((12 2) (11 0)) ((13 3) (12 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3))
+    ((13 3) (12 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 tne-3 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "extend" (enc n esk-2)) (12 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-2))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-2)))))
+    ((recv (cat "quote" nonce)) (obsv (hash "extend" (enc n esk-2)))
+      (send (enc "quote" (hash "extend" (enc n esk-2)) nonce aik-0)))
+    ((recv (cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3)))
+      (send (cat "establish transport" tne-3))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "extend" esk-3))
+          tno-3 "false"
+          (hash esk-3
+            (hash "execute transport"
+              (hash "extend" (enc "extend" esk-3))) tne-3 tno-3
+            "false")))
+      (tran (enc n esk-2) (hash "extend" (enc n esk-2)))))
+  (label 49)
+  (parent 46)
+  (unrealized (9 2) (13 3))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 2) (6 2)) ((2 2) (12 0))
+    ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
+    ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
+    ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (contracted (esk-2 esk)) n (12 0) (enc n esk))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-2
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-2
+            tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-2 tno-2 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-2 tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk)))))
+  (label 50)
+  (parent 47)
+  (unrealized (9 0) (10 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
+  (deflistener (cat "extend" (enc n esk-2)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr n) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 2) (6 2)) ((2 2) (13 1)) ((2 4) (3 0))
+    ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5)) ((4 3) (1 0))
+    ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3)) ((7 2) (0 0))
+    ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3)) ((10 1) (9 2))
+    ((11 1) (10 0)) ((12 1) (11 0)) ((13 2) (12 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) n (12 0) (enc n esk))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-2))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-2)))))
+    ((recv (cat "extend" (enc n esk-2)))
+      (send (cat "extend" (enc n esk-2))))
+    ((recv (cat "quote" nonce)) (obsv n)
+      (send (enc "quote" n nonce aik-0))))
+  (label 51)
+  (parent 47)
+  (unrealized (13 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
+  (deflistener (cat "extend" (enc n esk-2)))
+  (deflistener esk)
+  (precedes ((2 0) (6 0)) ((2 0) (13 0)) ((2 2) (6 2)) ((2 2) (12 0))
+    ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
+    ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
+    ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-listener esk) n (12 0) (enc n esk))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-2))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-2)))))
+    ((recv (cat "extend" (enc n esk-2)))
+      (send (cat "extend" (enc n esk-2)))) ((recv esk) (send esk)))
+  (label 52)
+  (parent 47)
+  (unrealized (13 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 0) (13 1)) ((2 2) (6 2))
+    ((2 2) (12 0)) ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1))
+    ((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0))
+    ((9 3) (8 3)) ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0))
+    ((13 2) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (10 0)
+    (enc esk tpmkey))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-2
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-2
+            tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-2 tno-2 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-2 tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk))))
+    ((recv (cat "quote" nonce)) (obsv esk)
+      (send (enc "quote" esk nonce aik-0))))
+  (label 53)
+  (parent 50)
+  (unrealized (9 0) (13 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 0) (13 0)) ((2 2) (6 2))
+    ((2 2) (12 0)) ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1))
+    ((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0))
+    ((9 3) (8 3)) ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0))
+    ((13 3) (10 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (10 0)
+    (enc esk tpmkey))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-2
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-2
+            tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-2 tno-2 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-2 tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk))))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk)))
+  (label 54)
+  (parent 50)
+  (unrealized (9 0) (13 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
+  (deflistener (cat "extend" (enc n esk-2)))
+  (deflistener esk)
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (14 1)) ((2 2) (6 2)) ((2 2) (12 0))
+    ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
+    ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
+    ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0))
+    ((14 2) (13 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (13 0)
+    (enc esk tpmkey))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-2))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-2)))))
+    ((recv (cat "extend" (enc n esk-2)))
+      (send (cat "extend" (enc n esk-2)))) ((recv esk) (send esk))
+    ((recv (cat "quote" nonce)) (obsv esk)
+      (send (enc "quote" esk nonce aik-0))))
+  (label 55)
+  (parent 52)
+  (unrealized (14 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
+  (deflistener (cat "extend" (enc n esk-2)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((2 0) (6 0)) ((2 0) (14 0)) ((2 2) (6 2)) ((2 2) (12 0))
+    ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
+    ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
+    ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0))
+    ((14 3) (13 0)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (13 0)
+    (enc esk tpmkey))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-2))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-2)))))
+    ((recv (cat "extend" (enc n esk-2)))
+      (send (cat "extend" (enc n esk-2)))) ((recv esk) (send esk))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk)))
+  (label 56)
+  (parent 52)
+  (unrealized (14 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 aik-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((2 0) (6 0)) ((2 0) (9 0)) ((2 0) (13 0)) ((2 2) (6 2))
+    ((2 2) (12 0)) ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0))
+    ((3 1) (2 5)) ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1))
+    ((6 3) (5 3)) ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0))
+    ((9 3) (8 3)) ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0))
+    ((13 3) (10 0)) ((14 2) (13 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" tpmkey pcr aik-0) (13 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-2
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-2
+            tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-2 tno-2 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-2 tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk))))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk))
+    ((recv (cat "quote" nonce)) (obsv (enc "created" tpmkey pcr aik-0))
+      (send
+        (enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1))))
+  (label 57)
+  (parent 54)
+  (unrealized (9 0) (14 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 tpmkey-2 aik-0 aik-1 akey))
+  (deflistener
+    (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce (enc v k))
+    (pcr (hash "refuse" (hash n state))) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "refuse") (state (hash n state))
+    (tne tne-1) (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-2)
+    (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (deflistener
+    (cat esk-2 (hash "execute transport" (hash "extend" (enc n esk-2)))
+      tne-2 tno-2 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-2))))
+  (deflistener (cat "extend" (enc n esk-2)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((2 0) (6 0)) ((2 0) (14 0)) ((2 2) (6 2)) ((2 2) (12 0))
+    ((2 4) (3 0)) ((2 6) (4 0)) ((2 6) (7 0)) ((3 1) (2 5))
+    ((4 3) (1 0)) ((5 3) (4 2)) ((6 1) (2 1)) ((6 3) (5 3))
+    ((7 2) (0 0)) ((8 3) (7 1)) ((9 1) (10 0)) ((9 3) (8 3))
+    ((10 1) (9 2)) ((11 1) (10 0)) ((12 1) (11 0)) ((13 1) (12 0))
+    ((14 3) (13 0)) ((15 2) (14 1)))
+  (leadsto ((5 3) (4 2)) ((6 3) (5 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tne tno tne-0 tne-1 tne-2 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" tpmkey pcr aik-0) (14 1))
+  (traces
+    ((recv (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" (enc v k)))
+      (obsv (hash "refuse" (hash n state)))
+      (send (enc "quote" (hash "refuse" (hash n state)) (enc v k) aik)))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "refuse" esk-1))
+          tno-1 "false"
+          (hash esk-1
+            (hash "execute transport"
+              (hash "extend" (enc "refuse" esk-1))) tne-1 tno-1
+            "false")))
+      (tran (hash n state) (hash "refuse" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc n esk-2)))
+            tne-2 tno-2 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-2
+         (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+         tno-2 "false"))
+      (send
+        (cat esk-2
+          (hash "execute transport" (hash "extend" (enc n esk-2))) tne-2
+          tno-2 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-2))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-2)))))
+    ((recv (cat "extend" (enc n esk-2)))
+      (send (cat "extend" (enc n esk-2)))) ((recv esk) (send esk))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk))
+    ((recv (cat "quote" nonce)) (obsv (enc "created" tpmkey pcr aik-0))
+      (send
+        (enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1))))
+  (label 58)
+  (parent 56)
+  (unrealized (15 1))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol envelope basic
+  (defrole tpm-power-on (vars) (trace (init "0")))
+  (defrole tpm-quote
+    (vars (nonce pcr mesg) (aik akey))
+    (trace (recv (cat "quote" nonce)) (obsv pcr)
+      (send (enc "quote" pcr nonce aik)))
+    (non-orig aik))
+  (defrole tpm-extend-enc
+    (vars (value state mesg) (esk skey) (tne tno data) (tpmkey akey))
+    (trace (recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc value esk)) tno
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc value esk)))
+            tne tno "false"))) (tran state (hash value state)))
+    (non-orig (invk tpmkey))
+    (uniq-orig tne))
+  (defrole tpm-create-key
+    (vars (k aik akey) (pcr mesg) (esk skey))
+    (trace (recv (enc "create key" pcr esk))
+      (send (enc "created" k pcr aik)))
+    (non-orig (invk k) aik esk)
+    (uniq-orig k))
+  (defrole tpm-decrypt
+    (vars (m pcr mesg) (k aik akey))
+    (trace (recv (cat "decrypt" (enc m k)))
+      (recv (enc "created" k pcr aik)) (obsv pcr) (send m))
+    (non-orig aik))
+  (defrole alice
+    (vars (v n tne tno data) (esk1 esk skey) (k aik tpmkey akey)
+      (pcr mesg))
+    (trace (send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    (non-orig aik esk1 (invk tpmkey))
+    (uniq-orig v n tno esk)
+    (neq (tno n))))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (neq (tno n))
+  (non-orig esk1 aik (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k))))
+  (label 59)
+  (unrealized (0 0) (1 5))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (precedes ((1 6) (0 0)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k))))
+  (label 60)
+  (parent 59)
+  (unrealized (1 5))
+  (origs (esk (1 0)) (n (1 2)) (tno (1 2)) (v (1 6)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" k (hash "obtain" (hash n pcr)) aik))
+    (aik aik-0))
+  (precedes ((1 6) (0 0)) ((2 2) (1 5)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk tpmkey))
+  (uniq-orig v n tno esk)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" k (hash "obtain" (hash n pcr)) aik) (1 5))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (cat "quote" nonce))
+      (obsv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send
+        (enc "quote" (enc "created" k (hash "obtain" (hash n pcr)) aik)
+          nonce aik-0))))
+  (label 61)
+  (parent 60)
+  (unrealized (2 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk esk-0 skey)
+    (k aik tpmkey akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk-0) (k k) (aik aik))
+  (precedes ((1 6) (0 0)) ((2 1) (1 5)))
+  (neq (tno n))
+  (non-orig esk1 esk-0 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-create-key 2)
+    (enc "created" k (hash "obtain" (hash n pcr)) aik) (1 5))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk-0))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik))))
+  (label 62)
+  (parent 60)
+  (unrealized (0 0) (2 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk esk-0 skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk-0) (k k) (aik aik))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "create key" (hash "obtain" (hash n pcr)) esk-0))
+    (aik aik-0))
+  (precedes ((1 6) (0 0)) ((2 1) (1 5)) ((3 2) (2 0)))
+  (neq (tno n))
+  (non-orig esk1 esk-0 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "create key" (hash "obtain" (hash n pcr)) esk-0) (2 0))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk-0))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "quote" nonce))
+      (obsv (enc "create key" (hash "obtain" (hash n pcr)) esk-0))
+      (send
+        (enc "quote"
+          (enc "create key" (hash "obtain" (hash n pcr)) esk-0) nonce
+          aik-0))))
+  (label 63)
+  (parent 62)
+  (unrealized (0 0) (3 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (precedes ((1 4) (2 0)) ((1 6) (0 0)) ((2 1) (1 5)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (displaced 3 1 alice 5)
+    (enc "create key" (hash "obtain" (hash n pcr)) esk-0) (2 0))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik))))
+  (label 64)
+  (parent 62)
+  (unrealized (0 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (pcr nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr v) (aik aik-0))
+  (precedes ((1 4) (2 0)) ((1 6) (3 1)) ((2 1) (1 5)) ((3 2) (0 0)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation nonce-test (added-strand tpm-quote 3) v (0 0) (enc v k))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "quote" nonce)) (obsv v)
+      (send (enc "quote" v nonce aik-0))))
+  (label 65)
+  (parent 64)
+  (unrealized (3 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (pcr pcr-0 mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
+  (precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) v (0 0) (enc v k))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k pcr-0 aik-0)) (obsv pcr-0) (send v)))
+  (label 66)
+  (parent 64)
+  (unrealized (3 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (pcr pcr-0 nonce mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey aik-0 aik-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr pcr-0) (k k) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" k pcr-0 aik-0)) (aik aik-1))
+  (precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((2 1) (4 1))
+    ((3 3) (0 0)) ((4 2) (3 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" k pcr-0 aik-0) (3 1))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k pcr-0 aik-0)) (obsv pcr-0) (send v))
+    ((recv (cat "quote" nonce)) (obsv (enc "created" k pcr-0 aik-0))
+      (send (enc "quote" (enc "created" k pcr-0 aik-0) nonce aik-1))))
+  (label 67)
+  (parent 66)
+  (unrealized (4 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno data) (esk1 esk skey)
+    (k aik tpmkey akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n pcr)))
+    (k k) (aik aik))
+  (precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey))
+  (uniq-orig v n tno esk k)
+  (operation encryption-test (displaced 4 2 tpm-create-key 2)
+    (enc "created" k pcr-0 aik-0) (3 1))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (obsv (hash "obtain" (hash n pcr))) (send v)))
+  (label 68)
+  (parent 66)
+  (unrealized (3 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (pcr mesg) (v n tne tno tne-0 tno-0 data) (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr pcr) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n pcr)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n pcr)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n pcr))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (precedes ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0))
+    ((4 3) (3 2)))
+  (leadsto ((4 3) (3 2)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tno tne-0 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "obtain" (hash n pcr)) (3 2))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv pcr)
+      (send (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n pcr)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n pcr)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n pcr)) aik))
+      (obsv (hash "obtain" (hash n pcr))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n pcr) (hash "obtain" (hash n pcr)))))
+  (label 69)
+  (parent 68)
+  (unrealized (4 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 3) (4 3)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash n state) (4 3))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state))))
+  (label 70)
+  (parent 69)
+  (unrealized (5 2))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-1
+        (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+        tno-1 "false")) (aik aik-0))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 3) (4 3)) ((6 2) (5 2)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false") (5 2))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" nonce))
+      (obsv
+        (hash esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false"))
+      (send
+        (enc "quote"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false") nonce aik-0))))
+  (label 71)
+  (parent 70)
+  (unrealized (5 2) (6 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (precedes ((1 0) (5 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
+    ((5 3) (4 3)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (displaced 6 1 alice 3)
+    (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false") (5 2))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state))))
+  (label 72)
+  (parent 70)
+  (unrealized (5 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat esk-1
+        (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+        tno-1 "false"))
+    (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false") (5 2))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false"))))
+  (label 73)
+  (parent 70)
+  (unrealized (5 2) (6 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr
+      (hash esk-1
+        (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+        tno-1 "false")) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value esk-1)
+    (state
+      (cat (hash "execute transport" (hash "extend" (enc n esk-1)))
+        tne-1 tno-1 "false")) (tne tne-2) (tno tno-2) (esk esk-2)
+    (tpmkey tpmkey-2))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (7 3)) ((5 3) (4 3))
+    ((6 2) (5 2)) ((7 3) (6 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((7 3) (6 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false") (6 1))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" nonce))
+      (obsv
+        (hash esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false"))
+      (send
+        (enc "quote"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false") nonce aik-0)))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc esk-1 esk-2)) tno-2
+          "false"
+          (hash esk-2
+            (hash "execute transport" (hash "extend" (enc esk-1 esk-2)))
+            tne-2 tno-2 "false")))
+      (tran
+        (cat (hash "execute transport" (hash "extend" (enc n esk-1)))
+          tne-1 tno-1 "false")
+        (hash esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false"))))
+  (label 74)
+  (parent 71)
+  (unrealized (5 2) (7 3))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey))
+  (precedes ((1 0) (5 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
+    ((5 3) (4 3)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (contracted (tpmkey-1 tpmkey)) esk (5 0)
+    (enc esk tpmkey))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state))))
+  (label 75)
+  (parent 72)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1)
+      ((v v) (n n) (tne tne) (tno tno) (esk1 esk1) (esk esk) (k k)
+        (aik aik) (tpmkey tpmkey) (pcr state))))
+  (origs (n (1 2)) (tno (1 2)) (esk (1 0)) (tne (5 1)) (tne-0 (4 1))
+    (k (2 1)) (v (1 6))))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((1 0) (6 1)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
+    ((5 3) (4 3)) ((6 2) (5 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (5 0)
+    (enc esk tpmkey))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "quote" nonce)) (obsv esk)
+      (send (enc "quote" esk nonce aik-0))))
+  (label 76)
+  (parent 72)
+  (unrealized (6 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((1 0) (6 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
+    ((5 3) (4 3)) ((6 3) (5 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (5 0)
+    (enc esk tpmkey))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk)))
+  (label 77)
+  (parent 72)
+  (unrealized (6 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
+    (aik aik-0))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 2) (6 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash "execute transport" (hash "extend" (enc n esk-1))) (6 0))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "quote" nonce))
+      (obsv (hash "execute transport" (hash "extend" (enc n esk-1))))
+      (send
+        (enc "quote"
+          (hash "execute transport" (hash "extend" (enc n esk-1))) nonce
+          aik-0))))
+  (label 78)
+  (parent 73)
+  (unrealized (5 2) (7 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 1) (6 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener
+      (cat "execute transport" (hash "extend" (enc n esk-1))))
+    (hash "execute transport" (hash "extend" (enc n esk-1))) (6 0))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1))))))
+  (label 79)
+  (parent 73)
+  (unrealized (5 2) (7 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state pcr nonce mesg) (v n tne tno tne-0 tno-0 data)
+    (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne)
+    (tno tno) (esk esk) (tpmkey tpmkey-1))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((1 0) (6 0)) ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (1 1))
+    ((5 3) (4 3)) ((6 3) (5 0)) ((7 2) (6 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tne tno tne-0 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" tpmkey pcr aik-0) (6 1))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (tran state (hash n state)))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk))
+    ((recv (cat "quote" nonce)) (obsv (enc "created" tpmkey pcr aik-0))
+      (send
+        (enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1))))
+  (label 80)
+  (parent 77)
+  (unrealized (7 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value "execute transport")
+    (state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2)
+    (esk esk-2) (tpmkey tpmkey-2))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 2) (6 0)) ((8 3) (7 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((8 3) (7 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "execute transport" (hash "extend" (enc n esk-1))) (7 1))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "quote" nonce))
+      (obsv (hash "execute transport" (hash "extend" (enc n esk-1))))
+      (send
+        (enc "quote"
+          (hash "execute transport" (hash "extend" (enc n esk-1))) nonce
+          aik-0)))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport"
+          (cat "extend" (enc "execute transport" esk-2)) tno-2 "false"
+          (hash esk-2
+            (hash "execute transport"
+              (hash "extend" (enc "execute transport" esk-2))) tne-2
+            tno-2 "false")))
+      (tran (hash "extend" (enc n esk-1))
+        (hash "execute transport" (hash "extend" (enc n esk-1))))))
+  (label 81)
+  (parent 78)
+  (unrealized (5 2) (8 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "extend" (enc n esk-1))) (aik aik-0))
+  (precedes ((1 2) (5 2)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 1) (6 0)) ((8 2) (7 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (hash "extend" (enc n esk-1)) (7 0))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "quote" nonce)) (obsv (hash "extend" (enc n esk-1)))
+      (send (enc "quote" (hash "extend" (enc n esk-1)) nonce aik-0))))
+  (label 82)
+  (parent 79)
+  (unrealized (5 2) (8 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (precedes ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test
+    (added-listener (cat "extend" (enc n esk-1)))
+    (hash "extend" (enc n esk-1)) (7 0))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1)))))
+  (label 83)
+  (parent 79)
+  (unrealized (8 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 tne-3 tno-3 data)
+    (esk1 esk esk-0 esk-1 esk-2 esk-3 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 tpmkey-3 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "execute transport" (hash "extend" (enc n esk-1))))
+    (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value "execute transport")
+    (state (hash "extend" (enc n esk-1))) (tne tne-2) (tno tno-2)
+    (esk esk-2) (tpmkey tpmkey-2))
+  (defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-1))
+    (tne tne-3) (tno tno-3) (esk esk-3) (tpmkey tpmkey-3))
+  (precedes ((1 2) (9 3)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 2) (6 0)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((8 3) (7 1)) ((9 3) (8 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2) (invk tpmkey-3))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 tne-3 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "extend" (enc n esk-1)) (8 3))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "quote" nonce))
+      (obsv (hash "execute transport" (hash "extend" (enc n esk-1))))
+      (send
+        (enc "quote"
+          (hash "execute transport" (hash "extend" (enc n esk-1))) nonce
+          aik-0)))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport"
+          (cat "extend" (enc "execute transport" esk-2)) tno-2 "false"
+          (hash esk-2
+            (hash "execute transport"
+              (hash "extend" (enc "execute transport" esk-2))) tne-2
+            tno-2 "false")))
+      (tran (hash "extend" (enc n esk-1))
+        (hash "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "establish transport" tpmkey-3 (enc esk-3 tpmkey-3)))
+      (send (cat "establish transport" tne-3))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "extend" esk-3))
+          tno-3 "false"
+          (hash esk-3
+            (hash "execute transport"
+              (hash "extend" (enc "extend" esk-3))) tne-3 tno-3
+            "false")))
+      (tran (enc n esk-1) (hash "extend" (enc n esk-1)))))
+  (label 84)
+  (parent 81)
+  (unrealized (5 2) (9 3))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 tne-2 tno-2 data)
+    (esk1 esk esk-0 esk-1 esk-2 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 tpmkey-2 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (hash "extend" (enc n esk-1))) (aik aik-0))
+  (defstrand tpm-extend-enc 4 (value "extend") (state (enc n esk-1))
+    (tne tne-2) (tno tno-2) (esk esk-2) (tpmkey tpmkey-2))
+  (precedes ((1 2) (9 3)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 1) (6 0)) ((8 2) (7 0)) ((9 3) (8 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)) ((9 3) (8 1)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1) (invk tpmkey-2))
+  (uniq-orig v n tno tne-0 tne-1 tne-2 esk k)
+  (operation state-passing-test (added-strand tpm-extend-enc 4)
+    (hash "extend" (enc n esk-1)) (8 1))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "quote" nonce)) (obsv (hash "extend" (enc n esk-1)))
+      (send (enc "quote" (hash "extend" (enc n esk-1)) nonce aik-0)))
+    ((recv (cat "establish transport" tpmkey-2 (enc esk-2 tpmkey-2)))
+      (send (cat "establish transport" tne-2))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "extend" esk-2))
+          tno-2 "false"
+          (hash esk-2
+            (hash "execute transport"
+              (hash "extend" (enc "extend" esk-2))) tne-2 tno-2
+            "false")))
+      (tran (enc n esk-1) (hash "extend" (enc n esk-1)))))
+  (label 85)
+  (parent 82)
+  (unrealized (5 2) (9 3))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (precedes ((1 0) (5 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
+    ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (contracted (esk-1 esk)) n (8 0) (enc n esk))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-1
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-1
+            tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-1 tno-1 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-1 tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk)))))
+  (label 86)
+  (parent 83)
+  (unrealized (5 0) (6 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr n) (aik aik-0))
+  (precedes ((1 2) (9 1)) ((1 4) (2 0)) ((1 6) (3 0)) ((2 1) (1 5))
+    ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0)) ((5 3) (4 3))
+    ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0)) ((9 2) (8 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) n (8 0) (enc n esk))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1))))
+    ((recv (cat "quote" nonce)) (obsv n)
+      (send (enc "quote" n nonce aik-0))))
+  (label 87)
+  (parent 83)
+  (unrealized (9 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey) (k aik tpmkey tpmkey-0 tpmkey-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (deflistener esk)
+  (precedes ((1 0) (9 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
+    ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-listener esk) n (8 0) (enc n esk))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1)))) ((recv esk) (send esk)))
+  (label 88)
+  (parent 83)
+  (unrealized (9 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((1 0) (5 0)) ((1 0) (9 1)) ((1 2) (8 0)) ((1 4) (2 0))
+    ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2))
+    ((5 1) (6 0)) ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0))
+    ((8 1) (7 0)) ((9 2) (6 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (6 0)
+    (enc esk tpmkey))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-1
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-1
+            tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-1 tno-1 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-1 tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk))))
+    ((recv (cat "quote" nonce)) (obsv esk)
+      (send (enc "quote" esk nonce aik-0))))
+  (label 89)
+  (parent 86)
+  (unrealized (5 0) (9 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 skey) (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((1 0) (5 0)) ((1 0) (9 0)) ((1 2) (8 0)) ((1 4) (2 0))
+    ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2))
+    ((5 1) (6 0)) ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0))
+    ((8 1) (7 0)) ((9 3) (6 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (6 0)
+    (enc esk tpmkey))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-1
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-1
+            tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-1 tno-1 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-1 tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk))))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk)))
+  (label 90)
+  (parent 86)
+  (unrealized (5 0) (9 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state nonce mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-quote 3 (nonce nonce) (pcr esk) (aik aik-0))
+  (precedes ((1 0) (10 1)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
+    ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 2) (9 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-quote 3) esk (9 0)
+    (enc esk tpmkey))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1)))) ((recv esk) (send esk))
+    ((recv (cat "quote" nonce)) (obsv esk)
+      (send (enc "quote" esk nonce aik-0))))
+  (label 91)
+  (parent 88)
+  (unrealized (10 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr mesg) (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (precedes ((1 0) (10 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
+    ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 3) (9 0)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation nonce-test (added-strand tpm-decrypt 4) esk (9 0)
+    (enc esk tpmkey))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1)))) ((recv esk) (send esk))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk)))
+  (label 92)
+  (parent 88)
+  (unrealized (10 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 data) (esk1 esk esk-0 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk))))
+  (deflistener (cat "extend" (enc n esk)))
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((1 0) (5 0)) ((1 0) (9 0)) ((1 2) (8 0)) ((1 4) (2 0))
+    ((1 6) (3 0)) ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2))
+    ((5 1) (6 0)) ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0))
+    ((8 1) (7 0)) ((9 3) (6 0)) ((10 2) (9 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" tpmkey pcr aik-0) (9 1))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk)) tno-1
+          "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne-1
+            tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+         tne-1 tno-1 "false"))
+      (send
+        (cat esk (hash "execute transport" (hash "extend" (enc n esk)))
+          tne-1 tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk))))
+      (send (cat "execute transport" (hash "extend" (enc n esk)))))
+    ((recv (cat "extend" (enc n esk)))
+      (send (cat "extend" (enc n esk))))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk))
+    ((recv (cat "quote" nonce)) (obsv (enc "created" tpmkey pcr aik-0))
+      (send
+        (enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1))))
+  (label 93)
+  (parent 90)
+  (unrealized (5 0) (10 1))
+  (comment "empty cohort"))
+
+(defskeleton envelope
+  (vars (state pcr nonce mesg)
+    (v n tne tno tne-0 tno-0 tne-1 tno-1 data)
+    (esk1 esk esk-0 esk-1 skey)
+    (k aik tpmkey tpmkey-0 tpmkey-1 aik-0 aik-1 akey))
+  (deflistener v)
+  (defstrand alice 7 (pcr state) (v v) (n n) (tne tne) (tno tno)
+    (esk1 esk1) (esk esk) (k k) (aik aik) (tpmkey tpmkey))
+  (defstrand tpm-create-key 2 (pcr (hash "obtain" (hash n state)))
+    (esk esk1) (k k) (aik aik))
+  (defstrand tpm-decrypt 4 (m v) (pcr (hash "obtain" (hash n state)))
+    (k k) (aik aik))
+  (defstrand tpm-extend-enc 4 (value "obtain") (state (hash n state))
+    (tne tne-0) (tno tno-0) (esk esk-0) (tpmkey tpmkey-0))
+  (defstrand tpm-extend-enc 4 (value n) (state state) (tne tne-1)
+    (tno tno-1) (esk esk-1) (tpmkey tpmkey-1))
+  (deflistener
+    (cat esk-1 (hash "execute transport" (hash "extend" (enc n esk-1)))
+      tne-1 tno-1 "false"))
+  (deflistener (cat "execute transport" (hash "extend" (enc n esk-1))))
+  (deflistener (cat "extend" (enc n esk-1)))
+  (deflistener esk)
+  (defstrand tpm-decrypt 4 (m esk) (pcr pcr) (k tpmkey) (aik aik-0))
+  (defstrand tpm-quote 3 (nonce nonce)
+    (pcr (enc "created" tpmkey pcr aik-0)) (aik aik-1))
+  (precedes ((1 0) (10 0)) ((1 2) (8 0)) ((1 4) (2 0)) ((1 6) (3 0))
+    ((2 1) (1 5)) ((3 3) (0 0)) ((4 3) (3 2)) ((5 1) (6 0))
+    ((5 3) (4 3)) ((6 1) (5 2)) ((7 1) (6 0)) ((8 1) (7 0))
+    ((9 1) (8 0)) ((10 3) (9 0)) ((11 2) (10 1)))
+  (leadsto ((4 3) (3 2)) ((5 3) (4 3)))
+  (neq (tno n))
+  (non-orig esk1 aik aik-0 aik-1 (invk k) (invk tpmkey) (invk tpmkey-0)
+    (invk tpmkey-1))
+  (uniq-orig v n tno tne-0 tne-1 esk k)
+  (operation encryption-test (added-strand tpm-quote 3)
+    (enc "created" tpmkey pcr aik-0) (10 1))
+  (traces ((recv v) (send v))
+    ((send (cat "establish transport" tpmkey (enc esk tpmkey)))
+      (recv (cat "establish transport" tne))
+      (send
+        (cat "execute transport" (cat "extend" (enc n esk)) tno "false"
+          (hash esk
+            (hash "execute transport" (hash "extend" (enc n esk))) tne
+            tno "false"))) (recv state)
+      (send (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (send (enc v k)))
+    ((recv (enc "create key" (hash "obtain" (hash n state)) esk1))
+      (send (enc "created" k (hash "obtain" (hash n state)) aik)))
+    ((recv (cat "decrypt" (enc v k)))
+      (recv (enc "created" k (hash "obtain" (hash n state)) aik))
+      (obsv (hash "obtain" (hash n state))) (send v))
+    ((recv (cat "establish transport" tpmkey-0 (enc esk-0 tpmkey-0)))
+      (send (cat "establish transport" tne-0))
+      (recv
+        (cat "execute transport" (cat "extend" (enc "obtain" esk-0))
+          tno-0 "false"
+          (hash esk-0
+            (hash "execute transport"
+              (hash "extend" (enc "obtain" esk-0))) tne-0 tno-0
+            "false")))
+      (tran (hash n state) (hash "obtain" (hash n state))))
+    ((recv (cat "establish transport" tpmkey-1 (enc esk-1 tpmkey-1)))
+      (send (cat "establish transport" tne-1))
+      (recv
+        (cat "execute transport" (cat "extend" (enc n esk-1)) tno-1
+          "false"
+          (hash esk-1
+            (hash "execute transport" (hash "extend" (enc n esk-1)))
+            tne-1 tno-1 "false"))) (tran state (hash n state)))
+    ((recv
+       (cat esk-1
+         (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+         tno-1 "false"))
+      (send
+        (cat esk-1
+          (hash "execute transport" (hash "extend" (enc n esk-1))) tne-1
+          tno-1 "false")))
+    ((recv (cat "execute transport" (hash "extend" (enc n esk-1))))
+      (send (cat "execute transport" (hash "extend" (enc n esk-1)))))
+    ((recv (cat "extend" (enc n esk-1)))
+      (send (cat "extend" (enc n esk-1)))) ((recv esk) (send esk))
+    ((recv (cat "decrypt" (enc esk tpmkey)))
+      (recv (enc "created" tpmkey pcr aik-0)) (obsv pcr) (send esk))
+    ((recv (cat "quote" nonce)) (obsv (enc "created" tpmkey pcr aik-0))
+      (send
+        (enc "quote" (enc "created" tpmkey pcr aik-0) nonce aik-1))))
+  (label 94)
+  (parent 92)
+  (unrealized (11 1))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
diff --git a/tst/epmo-hash.scm b/tst/epmo-hash.scm
deleted file mode 100644
--- a/tst/epmo-hash.scm
+++ /dev/null
@@ -1,77 +0,0 @@
-(herald "Electronic Purchase with Money Order Protocol with Key Hashing"
-  (comment "Annotated with trust management formulas"))
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (nc nm nb data) (price text))
-    (trace
-     (recv (enc c nc nm price (pubk b)))
-     (send (cat (enc (hash c nc nb nm price) (privk b))
-		(enc nc nb (pubk c))))
-     (recv (enc (hash b nb nm) (privk m))))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace
-     (send (enc c nc goods price (pubk m)))
-     (recv (enc nc nm m goods price (pubk c)))
-     (send (enc c nc nm price (pubk b)))
-     (recv (cat (enc (hash c nc nb nm price) (privk b))
-		(enc nc nb (pubk c))))
-     (send (cat (enc (hash c nc nb nm price) (privk b)) nb)))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm))))
-      (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace
-     (recv (enc c nc goods price (pubk m)))
-     (send (enc nc nm m goods price (pubk c)))
-     (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-     (send (enc (hash b nb nm) (privk m))))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo (vars (b c m name))
-  (defstrand customer 5 (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m)))
-
-(defskeleton epmo (vars (b c m name) (goods name))
-  (defstrand bank 3 (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m)))
-
-(defskeleton epmo (vars (b c m name))
-  (defstrand merchant 4 (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m)))
diff --git a/tst/epmo-hash.tst b/tst/epmo-hash.tst
deleted file mode 100644
--- a/tst/epmo-hash.tst
+++ /dev/null
@@ -1,761 +0,0 @@
-(herald "Electronic Purchase with Money Order Protocol with Key Hashing"
-  (comment "Annotated with trust management formulas"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from epmo-hash.scm")
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (nc nm nb data) (price text))
-    (trace (recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))) (recv (enc (hash b nb nm) (privk m))))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b)) nb)))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm)))) (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m))))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc)
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b)) nb))))
-  (label 0)
-  (unrealized (0 1) (0 3))
-  (origs (nc (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm nm-0 data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 1)
-    (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm-0 m goods price (pubk c)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1) (0 3))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm)
-  (operation nonce-test (contracted (nm-0 nm)) nc (0 1)
-    (enc nc nm m goods price (pubk c)) (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 3))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 3)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation encryption-test (added-strand bank 2)
-    (enc (hash c nc nb nm price) (privk b)) (0 3))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))))
-  (label 3)
-  (parent 2)
-  (unrealized (2 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation nonce-test (displaced 3 0 customer 3) nc (2 0)
-    (enc nc nm m goods price (pubk c)) (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))))
-  (label 4)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((b b) (c c) (m m) (nb nb) (nc nc) (nm nm) (goods goods)
-        (price price))))
-  (origs (nc (0 0)) (nb (2 1)) (nm (1 1))))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm nm-0 data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((1 1) (2 0))
-    ((2 1) (0 3)) ((3 1) (2 0)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (2 0)
-    (enc nc nm m goods price (pubk c)) (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm-0 m goods price (pubk c)))))
-  (label 5)
-  (parent 3)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm nm-0 data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 2) (2 0)) ((1 1) (0 1))
-    ((2 1) (0 3)) ((3 1) (2 0)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm nm-0)
-  (operation nonce-test (displaced 4 0 customer 3) nc (2 0)
-    (enc nc nm m goods price (pubk c))
-    (enc nc nm-0 m goods price (pubk c))
-    (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm-0 m goods price (pubk c)))))
-  (label 6)
-  (parent 5)
-  (seen 4)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (nc nm nb data) (price text))
-    (trace (recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))) (recv (enc (hash b nb nm) (privk m))))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b)) nb)))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm)))) (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m))))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo
-  (vars (price text) (nc nm nb data) (b c m name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb)
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))) (recv (enc (hash b nb nm) (privk m)))))
-  (label 7)
-  (unrealized (0 2))
-  (origs (nb (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods price-0 text) (nc nm nb nc-0 data)
-    (b c m c-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price-0) (nb nb) (nc nc-0)
-    (nm nm) (b b) (c c-0) (m m))
-  (precedes ((0 1) (1 2)) ((1 1) (0 0)) ((1 3) (0 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nm nb)
-  (operation encryption-test (added-strand merchant 4)
-    (enc (hash b nb nm) (privk m)) (0 2))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))) (recv (enc (hash b nb nm) (privk m))))
-    ((recv (enc c-0 nc-0 goods price-0 (pubk m)))
-      (send (enc nc-0 nm m goods price-0 (pubk c-0)))
-      (recv (cat (enc (hash c-0 nc-0 nb nm price-0) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m)))))
-  (label 8)
-  (parent 7)
-  (unrealized (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods text) (nc nm nb data) (b c m name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (precedes ((0 1) (1 2)) ((1 1) (0 0)) ((1 3) (0 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nm nb)
-  (operation encryption-test (displaced 2 0 bank 2)
-    (enc (hash c-0 nc-0 nb nm price-0) (privk b)) (1 2))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))) (recv (enc (hash b nb nm) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m)))))
-  (label 9)
-  (parent 8)
-  (unrealized (0 0) (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods goods-0 price-0 text) (nc nm nb nm-0 data)
-    (b c m b-0 m-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand customer 5 (goods goods-0) (price price-0) (nb nb) (nc nc)
-    (nm nm-0) (b b-0) (c c) (m m-0))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 4) (1 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation nonce-test (added-strand customer 5) nb (1 2)
-    (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))) (recv (enc (hash b nb nm) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m))))
-    ((send (enc c nc goods-0 price-0 (pubk m-0)))
-      (recv (enc nc nm-0 m-0 goods-0 price-0 (pubk c)))
-      (send (enc c nc nm-0 price-0 (pubk b-0)))
-      (recv
-        (cat (enc (hash c nc nb nm-0 price-0) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm-0 price-0) (privk b-0)) nb))))
-  (label 10)
-  (parent 9)
-  (unrealized (0 0) (2 3))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods goods-0 text) (nc nm nb data) (b c m b-0 m-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand customer 5 (goods goods-0) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m-0))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation encryption-test (displaced 3 0 bank 2)
-    (hash c nc nb nm-0 price-0) (2 3))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))) (recv (enc (hash b nb nm) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m))))
-    ((send (enc c nc goods-0 price (pubk m-0)))
-      (recv (enc nc nm m-0 goods-0 price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b-0)) nb))))
-  (label 11)
-  (parent 10)
-  (unrealized (0 0) (2 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods goods-0 price-0 text) (nc nm nb nm-0 data)
-    (b c m b-0 m-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand customer 5 (goods goods-0) (price price-0) (nb nb) (nc nc)
-    (nm nm-0) (b b-0) (c c) (m m-0))
-  (deflistener (cat c nc nb nm-0 price-0))
-  (precedes ((0 1) (3 0)) ((1 1) (0 0)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 4) (1 2)) ((3 1) (2 3)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation encryption-test (added-listener (cat c nc nb nm-0 price-0))
-    (hash c nc nb nm-0 price-0) (2 3))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))) (recv (enc (hash b nb nm) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m))))
-    ((send (enc c nc goods-0 price-0 (pubk m-0)))
-      (recv (enc nc nm-0 m-0 goods-0 price-0 (pubk c)))
-      (send (enc c nc nm-0 price-0 (pubk b-0)))
-      (recv
-        (cat (enc (hash c nc nb nm-0 price-0) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm-0 price-0) (privk b-0)) nb)))
-    ((recv (cat c nc nb nm-0 price-0))
-      (send (cat c nc nb nm-0 price-0))))
-  (label 12)
-  (parent 10)
-  (unrealized (0 0) (3 0))
-  (comment "empty cohort"))
-
-(defskeleton epmo
-  (vars (price goods text) (nc nm nb data) (b c m b-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation nonce-test (contracted (m-0 m) (goods-0 goods)) nm (2 1)
-    (enc nc nm m goods price (pubk c)))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))) (recv (enc (hash b nb nm) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b-0)) nb))))
-  (label 13)
-  (parent 11)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods text) (nc nm nb data) (b c m b-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (0 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation nonce-test (displaced 3 2 customer 3) nm (0 0)
-    (enc nc nm m goods price (pubk c)))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))) (recv (enc (hash b nb nm) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b-0)) nb))))
-  (label 14)
-  (parent 13)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (c c) (m m) (nc nc) (nm nm) (nb nb) (price price))))
-  (origs (nc (2 0)) (nb (0 1)) (nm (1 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (nc nm nb data) (price text))
-    (trace (recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))) (recv (enc (hash b nb nm) (privk m))))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b)) nb)))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm)))) (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m))))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nm)
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m)))))
-  (label 15)
-  (unrealized (0 2))
-  (origs (nm (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nm)
-  (operation encryption-test (added-strand bank 2)
-    (enc (hash c nc nb nm price) (privk b)) (0 2))
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c))))))
-  (label 16)
-  (parent 15)
-  (unrealized (0 2) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m b-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (defstrand customer 3 (goods goods) (price price) (nc nc) (nm nm)
-    (b b-0) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (1 0)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation nonce-test (added-strand customer 3) nm (1 0)
-    (enc nc nm m goods price (pubk c)))
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))))
-  (label 17)
-  (parent 16)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c b-0 m name))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (2 3)) ((2 0) (0 0)) ((2 2) (1 0))
-    ((2 4) (0 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation nonce-test (displaced 2 3 customer 5) nb (0 2)
-    (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (hash c nc nb nm price) (privk b)) nb))
-      (send (enc (hash b nb nm) (privk m))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (hash c nc nb nm price) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (hash c nc nb nm price) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (hash c nc nb nm price) (privk b-0)) nb))))
-  (label 18)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((b b) (c c) (m m) (nb nb) (nc nc) (nm nm) (goods goods)
-        (price price))))
-  (origs (nc (2 0)) (nb (1 1)) (nm (0 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/epmo-key-hash.scm b/tst/epmo-key-hash.scm
deleted file mode 100644
--- a/tst/epmo-key-hash.scm
+++ /dev/null
@@ -1,77 +0,0 @@
-(herald "Electronic Purchase with Money Order Protocol with Key Hashing"
-  (comment "Annotated with trust management formulas"))
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (nc nm nb data) (price text))
-    (trace
-     (recv (enc c nc nm price (pubk b)))
-     (send (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-		(enc nc nb (pubk c))))
-     (recv (enc (enc "hash" (cat b nb nm)) (privk m))))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace
-     (send (enc c nc goods price (pubk m)))
-     (recv (enc nc nm m goods price (pubk c)))
-     (send (enc c nc nm price (pubk b)))
-     (recv (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-		(enc nc nb (pubk c))))
-     (send (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm))))
-      (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace
-     (recv (enc c nc goods price (pubk m)))
-     (send (enc nc nm m goods price (pubk c)))
-     (recv (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-     (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo (vars (b c m name))
-  (defstrand customer 5 (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m)))
-
-(defskeleton epmo (vars (b c m name) (goods name))
-  (defstrand bank 3 (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m)))
-
-(defskeleton epmo (vars (b c m name))
-  (defstrand merchant 4 (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m)))
diff --git a/tst/epmo-key-hash.tst b/tst/epmo-key-hash.tst
deleted file mode 100644
--- a/tst/epmo-key-hash.tst
+++ /dev/null
@@ -1,808 +0,0 @@
-(herald "Electronic Purchase with Money Order Protocol with Key Hashing"
-  (comment "Annotated with trust management formulas"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from epmo-key-hash.scm")
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (nc nm nb data) (price text))
-    (trace (recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b nb nm)) (privk m))))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm)))) (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc)
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))))
-  (label 0)
-  (unrealized (0 1) (0 3))
-  (origs (nc (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm nm-0 data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 1)
-    (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm-0 m goods price (pubk c)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1) (0 3))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm)
-  (operation nonce-test (contracted (nm-0 nm)) nc (0 1)
-    (enc nc nm m goods price (pubk c)) (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 3))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 3)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation encryption-test (added-strand bank 2)
-    (enc (enc "hash" (cat c nc nb nm price)) (privk b)) (0 3))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))))
-  (label 3)
-  (parent 2)
-  (unrealized (2 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation nonce-test (displaced 3 0 customer 3) nc (2 0)
-    (enc nc nm m goods price (pubk c)) (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))))
-  (label 4)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((b b) (c c) (m m) (nb nb) (nc nc) (nm nm) (goods goods)
-        (price price))))
-  (origs (nc (0 0)) (nb (2 1)) (nm (1 1))))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm nm-0 data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((1 1) (2 0))
-    ((2 1) (0 3)) ((3 1) (2 0)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (2 0)
-    (enc nc nm m goods price (pubk c)) (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm-0 m goods price (pubk c)))))
-  (label 5)
-  (parent 3)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm nm-0 data) (b c m name))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 2) (2 0)) ((1 1) (0 1))
-    ((2 1) (0 3)) ((3 1) (2 0)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm nm-0)
-  (operation nonce-test (displaced 4 0 customer 3) nc (2 0)
-    (enc nc nm m goods price (pubk c))
-    (enc nc nm-0 m goods price (pubk c))
-    (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm-0 m goods price (pubk c)))))
-  (label 6)
-  (parent 5)
-  (seen 4)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (nc nm nb data) (price text))
-    (trace (recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b nb nm)) (privk m))))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm)))) (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo
-  (vars (price text) (nc nm nb data) (b c m name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb)
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b nb nm)) (privk m)))))
-  (label 7)
-  (unrealized (0 2))
-  (origs (nb (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods price-0 text) (nc nm nb nc-0 data)
-    (b c m c-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price-0) (nb nb) (nc nc-0)
-    (nm nm) (b b) (c c-0) (m m))
-  (precedes ((0 1) (1 2)) ((1 1) (0 0)) ((1 3) (0 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nm nb)
-  (operation encryption-test (added-strand merchant 4)
-    (enc (enc "hash" (cat b nb nm)) (privk m)) (0 2))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((recv (enc c-0 nc-0 goods price-0 (pubk m)))
-      (send (enc nc-0 nm m goods price-0 (pubk c-0)))
-      (recv
-        (cat (enc (enc "hash" (cat c-0 nc-0 nb nm price-0)) (privk b))
-          nb)) (send (enc (enc "hash" (cat b nb nm)) (privk m)))))
-  (label 8)
-  (parent 7)
-  (unrealized (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods text) (nc nm nb data) (b c m name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (precedes ((0 1) (1 2)) ((1 1) (0 0)) ((1 3) (0 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nm nb)
-  (operation encryption-test (displaced 2 0 bank 2)
-    (enc (enc "hash" (cat c-0 nc-0 nb nm price-0)) (privk b)) (1 2))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m)))))
-  (label 9)
-  (parent 8)
-  (unrealized (0 0) (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods goods-0 price-0 text) (nc nm nb nm-0 data)
-    (b c m b-0 m-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand customer 5 (goods goods-0) (price price-0) (nb nb) (nc nc)
-    (nm nm-0) (b b-0) (c c) (m m-0))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 4) (1 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation nonce-test (added-strand customer 5) nb (1 2)
-    (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((send (enc c nc goods-0 price-0 (pubk m-0)))
-      (recv (enc nc nm-0 m-0 goods-0 price-0 (pubk c)))
-      (send (enc c nc nm-0 price-0 (pubk b-0)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm-0 price-0)) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm-0 price-0)) (privk b-0))
-          nb))))
-  (label 10)
-  (parent 9)
-  (unrealized (0 0) (2 3))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods goods-0 text) (nc nm nb data) (b c m b-0 m-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand customer 5 (goods goods-0) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m-0))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation encryption-test (displaced 3 0 bank 2)
-    (enc "hash" (cat c nc nb nm-0 price-0)) (2 3))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((send (enc c nc goods-0 price (pubk m-0)))
-      (recv (enc nc nm m-0 goods-0 price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b-0))
-          nb))))
-  (label 11)
-  (parent 10)
-  (unrealized (0 0) (2 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods goods-0 price-0 text) (nc nm nb nm-0 data)
-    (b c m b-0 m-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand customer 5 (goods goods-0) (price price-0) (nb nb) (nc nc)
-    (nm nm-0) (b b-0) (c c) (m m-0))
-  (deflistener (cat c nc nb nm-0 price-0))
-  (precedes ((0 1) (3 0)) ((1 1) (0 0)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 4) (1 2)) ((3 1) (2 3)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation encryption-test (added-listener (cat c nc nb nm-0 price-0))
-    (enc "hash" (cat c nc nb nm-0 price-0)) (2 3))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((send (enc c nc goods-0 price-0 (pubk m-0)))
-      (recv (enc nc nm-0 m-0 goods-0 price-0 (pubk c)))
-      (send (enc c nc nm-0 price-0 (pubk b-0)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm-0 price-0)) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm-0 price-0)) (privk b-0))
-          nb)))
-    ((recv (cat c nc nb nm-0 price-0))
-      (send (cat c nc nb nm-0 price-0))))
-  (label 12)
-  (parent 10)
-  (unrealized (0 0) (3 0))
-  (comment "empty cohort"))
-
-(defskeleton epmo
-  (vars (price goods text) (nc nm nb data) (b c m b-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation nonce-test (contracted (m-0 m) (goods-0 goods)) nm (2 1)
-    (enc nc nm m goods price (pubk c)))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b-0))
-          nb))))
-  (label 13)
-  (parent 11)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods text) (nc nm nb data) (b c m b-0 name))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (0 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation nonce-test (displaced 3 2 customer 3) nm (0 0)
-    (enc nc nm m goods price (pubk c)))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b-0))
-          nb))))
-  (label 14)
-  (parent 13)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (c c) (m m) (nc nc) (nm nm) (nb nb) (price price))))
-  (origs (nc (2 0)) (nb (0 1)) (nm (1 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (nc nm nb data) (price text))
-    (trace (recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b nb nm)) (privk m))))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm)))) (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (nb nc nm data) (goods price text))
-    (trace (recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nm)
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m)))))
-  (label 15)
-  (unrealized (0 2))
-  (origs (nm (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nm)
-  (operation encryption-test (added-strand bank 2)
-    (enc (enc "hash" (cat c nc nb nm price)) (privk b)) (0 2))
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))))
-  (label 16)
-  (parent 15)
-  (unrealized (0 2) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m b-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (defstrand customer 3 (goods goods) (price price) (nc nc) (nm nm)
-    (b b-0) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (1 0)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation nonce-test (added-strand customer 3) nm (1 0)
-    (enc nc nm m goods price (pubk c)))
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))))
-  (label 17)
-  (parent 16)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c b-0 m name))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (2 3)) ((2 0) (0 0)) ((2 2) (1 0))
-    ((2 4) (0 2)))
-  (non-orig (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation nonce-test (displaced 2 3 customer 5) nb (0 2)
-    (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b nb nm)) (privk m))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b-0))
-          nb))))
-  (label 18)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((b b) (c c) (m m) (nb nb) (nc nc) (nm nm) (goods goods)
-        (price price))))
-  (origs (nc (2 0)) (nb (1 1)) (nm (0 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/epmo.scm b/tst/epmo.scm
deleted file mode 100644
--- a/tst/epmo.scm
+++ /dev/null
@@ -1,80 +0,0 @@
-(herald "Electronic Purchase with Money Order Protocol"
-  (comment "Annotated with trust management formulas"))
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (hash akey) (nc nm nb data) (price text))
-    (trace
-     (recv (enc c nc nm price (pubk b)))
-     (send (cat (enc (enc c nc nb nm price hash) (privk b))
-		(enc nc nb (pubk c))))
-     (recv (enc (enc b nb nm hash) (privk m))))
-    (non-orig (invk hash))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (hash akey) (nb nc nm data) (goods price text))
-    (trace
-     (send (enc c nc goods price (pubk m)))
-     (recv (enc nc nm m goods price (pubk c)))
-     (send (enc c nc nm price (pubk b)))
-     (recv (cat (enc (enc c nc nb nm price hash) (privk b))
-		(enc nc nb (pubk c))))
-     (send (cat (enc (enc c nc nb nm price hash) (privk b)) nb)))
-    (non-orig (invk hash))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm))))
-      (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (hash akey) (nb nc nm data) (goods price text))
-    (trace
-     (recv (enc c nc goods price (pubk m)))
-     (send (enc nc nm m goods price (pubk c)))
-     (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-     (send (enc (enc b nb nm hash) (privk m))))
-    (non-orig (invk hash))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo (vars (b c m name))
-  (defstrand customer 5 (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m)))
-
-(defskeleton epmo (vars (b c m name) (goods name))
-  (defstrand bank 3 (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m)))
-
-(defskeleton epmo (vars (b c m name))
-  (defstrand merchant 4 (b b) (c c) (m m))
-  (non-orig (privk b) (privk c) (privk m)))
diff --git a/tst/epmo.tst b/tst/epmo.tst
deleted file mode 100644
--- a/tst/epmo.tst
+++ /dev/null
@@ -1,718 +0,0 @@
-(herald "Electronic Purchase with Money Order Protocol"
-  (comment "Annotated with trust management formulas"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from epmo.scm")
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (hash akey) (nc nm nb data) (price text))
-    (trace (recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc b nb nm hash) (privk m))))
-    (non-orig (invk hash))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (hash akey) (nb nc nm data) (goods price text))
-    (trace (send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b)) nb)))
-    (non-orig (invk hash))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm)))) (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (hash akey) (nb nc nm data) (goods price text))
-    (trace (recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m))))
-    (non-orig (invk hash))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name) (hash akey))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nc)
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b)) nb))))
-  (label 0)
-  (unrealized (0 1) (0 3))
-  (origs (nc (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm nm-0 data) (b c m name)
-    (hash akey))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nc nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 1)
-    (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm-0 m goods price (pubk c)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1) (0 3))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name) (hash akey))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nc nm)
-  (operation nonce-test (contracted (nm-0 nm)) nc (0 1)
-    (enc nc nm m goods price (pubk c)) (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 3))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name) (hash akey))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (hash hash))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 3)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation encryption-test (added-strand bank 2)
-    (enc (enc c nc nb nm price hash) (privk b)) (0 3))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))))
-  (label 3)
-  (parent 2)
-  (unrealized (2 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name) (hash akey))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (hash hash))
-  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation nonce-test (displaced 3 0 customer 3) nc (2 0)
-    (enc nc nm m goods price (pubk c)) (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))))
-  (label 4)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((b b) (c c) (m m) (hash hash) (nb nb) (nc nc) (nm nm)
-        (goods goods) (price price))))
-  (origs (nc (0 0)) (nb (2 1)) (nm (1 1))))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm nm-0 data) (b c m name)
-    (hash akey))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (hash hash))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((1 1) (2 0))
-    ((2 1) (0 3)) ((3 1) (2 0)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (2 0)
-    (enc nc nm m goods price (pubk c)) (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm-0 m goods price (pubk c)))))
-  (label 5)
-  (parent 3)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm nm-0 data) (b c m name)
-    (hash akey))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (hash hash))
-  (defstrand merchant 2 (goods goods) (price price) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 2) (2 0)) ((1 1) (0 1))
-    ((2 1) (0 3)) ((3 1) (2 0)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm nm-0)
-  (operation nonce-test (displaced 4 0 customer 3) nc (2 0)
-    (enc nc nm m goods price (pubk c))
-    (enc nc nm-0 m goods price (pubk c))
-    (enc c nc goods price (pubk m)))
-  (traces
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b)) nb)))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm-0 m goods price (pubk c)))))
-  (label 6)
-  (parent 5)
-  (seen 4)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (hash akey) (nc nm nb data) (price text))
-    (trace (recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc b nb nm hash) (privk m))))
-    (non-orig (invk hash))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (hash akey) (nb nc nm data) (goods price text))
-    (trace (send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b)) nb)))
-    (non-orig (invk hash))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm)))) (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (hash akey) (nb nc nm data) (goods price text))
-    (trace (recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m))))
-    (non-orig (invk hash))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo
-  (vars (price text) (nc nm nb data) (b c m name) (hash akey))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m) (hash hash))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nb)
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc b nb nm hash) (privk m)))))
-  (label 7)
-  (unrealized (0 2))
-  (origs (nb (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods price-0 text) (nc nm nb nc-0 data) (b c m c-0 name)
-    (hash akey))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price-0) (nb nb) (nc nc-0)
-    (nm nm) (b b) (c c-0) (m m) (hash hash))
-  (precedes ((0 1) (1 2)) ((1 1) (0 0)) ((1 3) (0 2)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nm nb)
-  (operation encryption-test (added-strand merchant 4)
-    (enc (enc b nb nm hash) (privk m)) (0 2))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc b nb nm hash) (privk m))))
-    ((recv (enc c-0 nc-0 goods price-0 (pubk m)))
-      (send (enc nc-0 nm m goods price-0 (pubk c-0)))
-      (recv (cat (enc (enc c-0 nc-0 nb nm price-0 hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m)))))
-  (label 8)
-  (parent 7)
-  (unrealized (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods text) (nc nm nb data) (b c m name) (hash akey))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (1 2)) ((1 1) (0 0)) ((1 3) (0 2)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nm nb)
-  (operation encryption-test (displaced 2 0 bank 2)
-    (enc (enc c-0 nc-0 nb nm price-0 hash) (privk b)) (1 2))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc b nb nm hash) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m)))))
-  (label 9)
-  (parent 8)
-  (unrealized (0 0) (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods goods-0 text) (nc nm nb data) (b c m b-0 m-0 name)
-    (hash akey))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (goods goods-0) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m-0) (hash hash))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation nonce-test (added-strand customer 5) nb (1 2)
-    (enc nc nb (pubk c)) (enc c nc nb nm price hash))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc b nb nm hash) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m))))
-    ((send (enc c nc goods-0 price (pubk m-0)))
-      (recv (enc nc nm m-0 goods-0 price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b-0)) nb))))
-  (label 10)
-  (parent 9)
-  (unrealized (0 0) (2 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods text) (nc nm nb data) (b c m b-0 name) (hash akey))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m) (hash hash))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation nonce-test (contracted (m-0 m) (goods-0 goods)) nm (2 1)
-    (enc nc nm m goods price (pubk c)))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc b nb nm hash) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b-0)) nb))))
-  (label 11)
-  (parent 10)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods text) (nc nm nb data) (b c m b-0 name) (hash akey))
-  (defstrand bank 3 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m) (hash hash))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (0 0)) ((2 4) (1 2)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nc nm nb)
-  (operation nonce-test (displaced 3 2 customer 3) nm (0 0)
-    (enc nc nm m goods price (pubk c)))
-  (traces
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc b nb nm hash) (privk m))))
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b-0)) nb))))
-  (label 12)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((b b) (c c) (m m) (hash hash) (nc nc) (nm nm) (nb nb)
-        (price price))))
-  (origs (nc (2 0)) (nb (0 1)) (nm (1 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol epmo basic
-  (defrole bank
-    (vars (b c m name) (hash akey) (nc nm nb data) (price text))
-    (trace (recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc b nb nm hash) (privk m))))
-    (non-orig (invk hash))
-    (uniq-orig nb)
-    (annotations b
-      (1
-        (implies
-          (and (forall ((pm name)) (says c (transfer b price pm nm)))
-            (forall ((pm name)) (says pm (transfer b price pm nm))))
-          (forall ((pm name)) (transfer b price pm nm))))
-      (2
-        (and (says c (transfer b price m nm))
-          (says m (transfer b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (hash akey) (nb nc nm data) (goods price text))
-    (trace (send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b)) nb)))
-    (non-orig (invk hash))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (forall ((pb name))
-            (implies (transfer pb price m nm) (ship m goods c)))))
-      (3
-        (says b
-          (implies
-            (and (forall ((pm name)) (says c (transfer b price pm nm)))
-              (forall ((pm name)) (says m (transfer b price pm nm))))
-            (transfer b price m nm)))) (4 (transfer b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (hash akey) (nb nc nm data) (goods price text))
-    (trace (recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m))))
-    (non-orig (invk hash))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (forall ((pb name))
-          (implies (transfer pb price m nm) (ship m goods c))))
-      (2
-        (and
-          (says b
-            (implies
-              (and
-                (forall ((pm name)) (says c (transfer b price pm nm)))
-                (forall ((pm name)) (says m (transfer b price pm nm))))
-              (transfer b price m nm)))
-          (says c (transfer b price m nm))))
-      (3 (and (transfer b price m nm) (ship m goods c))))))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name) (hash akey))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nm)
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m)))))
-  (label 13)
-  (unrealized (0 2))
-  (origs (nm (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m name) (hash akey))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (hash hash))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nb nm)
-  (operation encryption-test (added-strand bank 2)
-    (enc (enc c nc nb nm price hash) (privk b)) (0 2))
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c))))))
-  (label 14)
-  (parent 13)
-  (unrealized (0 2) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (goods price text) (nb nc nm data) (b c m b-0 name) (hash akey))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (hash hash))
-  (defstrand customer 3 (goods goods) (price price) (nc nc) (nm nm)
-    (b b-0) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (1 0)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation nonce-test (added-strand customer 3) nm (1 0)
-    (enc nc nm m goods price (pubk c)))
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))))
-  (label 15)
-  (parent 14)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo
-  (vars (price goods text) (nb nc nm data) (b c b-0 m name) (hash akey))
-  (defstrand merchant 4 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (price price) (nc nc) (nm nm) (nb nb) (b b) (c c)
-    (hash hash))
-  (defstrand customer 5 (goods goods) (price price) (nb nb) (nc nc)
-    (nm nm) (b b-0) (c c) (m m) (hash hash))
-  (precedes ((0 1) (2 1)) ((1 1) (2 3)) ((2 0) (0 0)) ((2 2) (1 0))
-    ((2 4) (0 2)))
-  (non-orig (invk hash) (privk b) (privk c) (privk m))
-  (uniq-orig nb nc nm)
-  (operation nonce-test (displaced 2 3 customer 5) nb (0 2)
-    (enc nc nb (pubk c)) (enc c nc nb nm price hash))
-  (traces
-    ((recv (enc c nc goods price (pubk m)))
-      (send (enc nc nm m goods price (pubk c)))
-      (recv (cat (enc (enc c nc nb nm price hash) (privk b)) nb))
-      (send (enc (enc b nb nm hash) (privk m))))
-    ((recv (enc c nc nm price (pubk b)))
-      (send
-        (cat (enc (enc c nc nb nm price hash) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods price (pubk m)))
-      (recv (enc nc nm m goods price (pubk c)))
-      (send (enc c nc nm price (pubk b-0)))
-      (recv
-        (cat (enc (enc c nc nb nm price hash) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send (cat (enc (enc c nc nb nm price hash) (privk b-0)) nb))))
-  (label 16)
-  (parent 15)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((b b) (c c) (m m) (hash hash) (nb nb) (nc nc) (nm nm)
-        (goods goods) (price price))))
-  (origs (nc (2 0)) (nb (1 1)) (nm (0 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/epmo_acctnum-key-hash.scm b/tst/epmo_acctnum-key-hash.scm
deleted file mode 100644
--- a/tst/epmo_acctnum-key-hash.scm
+++ /dev/null
@@ -1,100 +0,0 @@
-(herald "Electronic Purchase with Money Order Protocol Variant with Key Hashing"
-  (comment "This version includes account numbers in exchanges"))
-
-;; The results of running CPSA on this input produces interesting
-;; output.  One of the shapes is produced only as a result of
-;; generalization, not cohort reduction.  It is a counterexample to
-;; the hypthesis that all shapes are produced by cohort reduction, and
-;; the purpose of generalization is to distinguish the shapes from the
-;; other realized skeletons produced by cohort reduction.
-
-;; The shape in question identifies the bank's nonce with price of the
-;; goods.  The variable cannot be separated because the uniquely
-;; originating variable originates on the merchant strand, but after
-;; separation, it would originate on the bank's strand.
-
-;; Adding a role unique origination assumption to the bank role for
-;; its nonce eliminates the undesired shape.
-
-(defprotocol epmo_acctnum basic
-  (defrole bank
-    (vars (b c m name) (acctnum text) (nc nm nb price text))
-    (trace
-     (recv (enc c nc nm acctnum price (pubk b)))
-     (send (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-		(enc nc nb (pubk c))))
-     (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    (annotations b
-      (1
-        (forall ((pm name))
-          (implies
-            (and (authtransfer c acctnum b price pm nm)
-              (reqtransfer pm b price pm nm))
-            (dotransfer acctnum b price pm nm))))
-      (2
-        (and (says c (authtransfer c acctnum b price m nm))
-          (says m (reqtransfer m b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (acctnum nb nc nm goods price text))
-    (trace
-     (send (enc c nc goods (pubk m)))
-     (recv (enc nc nm m price (pubk c)))
-     (send (enc c nc nm acctnum price (pubk b)))
-     (recv (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-		(enc nc nb (pubk c))))
-     (send (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-		nb)))
-    (non-orig (privk b))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (implies
-            (exists ((acctnum2 text))
-              (dotransfer acctnum2 b price m nm)) (doship m goods c))))
-      (3
-        (says b
-          (forall ((pm name))
-            (implies
-              (and (authtransfer c acctnum b price m nm)
-                (reqtransfer pm b price pm nm))
-              (dotransfer acctnum b price pm nm)))))
-      (4 (authtransfer c acctnum b price m nm))))
-  (defrole merchant (vars (b c m name) (nb nc nm goods price text))
-    (trace
-     (recv (enc c nc goods (pubk m)))
-     (send (enc nc nm m price (pubk c)))
-     (recv (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-		nb))
-     (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (implies
-          (exists ((acctnum2 text)) (dotransfer acctnum2 b price m nm))
-          (doship m goods c)))
-      (2
-        (and
-          (says b
-            (forall ((pm name))
-              (exists ((acctnum2 text))
-                (implies
-                  (and (authtransfer c acctnum2 b price m nm)
-                    (reqtransfer pm b price pm nm))
-                  (dotransfer acctnum2 b price pm nm)))))
-          (says c
-            (exists ((acctnum2 text))
-              (authtransfer c acctnum2 b price m nm)))))
-      (3 (and (reqtransfer m b price m nm) (doship m goods c))))))
-
-(defskeleton epmo_acctnum
-  (vars (b m c name) (nm nc nb text))
-  (defstrand merchant 4 (b b) (m m) (c c) (nm nm) (nc nc) (nb nb))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nc nb))
-
-(defskeleton epmo_acctnum
-  (vars (b m c name) (nm nb nc text) (price acctnum text))
-  (defstrand bank 3 (b b) (m m) (c c) (nm nm) (nb nb) (nc nc))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nc nb))
diff --git a/tst/epmo_acctnum-key-hash.tst b/tst/epmo_acctnum-key-hash.tst
deleted file mode 100644
--- a/tst/epmo_acctnum-key-hash.tst
+++ /dev/null
@@ -1,931 +0,0 @@
-(herald
-  "Electronic Purchase with Money Order Protocol Variant with Key Hashing"
-  (comment "This version includes account numbers in exchanges"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from epmo_acctnum-key-hash.scm")
-
-(defprotocol epmo_acctnum basic
-  (defrole bank
-    (vars (b c m name) (acctnum nc nm nb price text))
-    (trace (recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    (annotations b
-      (1
-        (forall ((pm name))
-          (implies
-            (and (authtransfer c acctnum b price pm nm)
-              (reqtransfer pm b price pm nm))
-            (dotransfer acctnum b price pm nm))))
-      (2
-        (and (says c (authtransfer c acctnum b price m nm))
-          (says m (reqtransfer m b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (acctnum nb nc nm goods price text))
-    (trace (send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    (non-orig (privk b))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (implies
-            (exists ((acctnum2 text))
-              (dotransfer acctnum2 b price m nm)) (doship m goods c))))
-      (3
-        (says b
-          (forall ((pm name))
-            (implies
-              (and (authtransfer c acctnum b price m nm)
-                (reqtransfer pm b price pm nm))
-              (dotransfer acctnum b price pm nm)))))
-      (4 (authtransfer c acctnum b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (nb nc nm goods price text))
-    (trace (recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (implies
-          (exists ((acctnum2 text)) (dotransfer acctnum2 b price m nm))
-          (doship m goods c)))
-      (2
-        (and
-          (says b
-            (forall ((pm name))
-              (exists ((acctnum2 text))
-                (implies
-                  (and (authtransfer c acctnum2 b price m nm)
-                    (reqtransfer pm b price pm nm))
-                  (dotransfer acctnum2 b price pm nm)))))
-          (says c
-            (exists ((acctnum2 text))
-              (authtransfer c acctnum2 b price m nm)))))
-      (3 (and (reqtransfer m b price m nm) (doship m goods c))))))
-
-(defskeleton epmo_acctnum
-  (vars (nm nc nb goods price text) (b m c name))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nc nb)
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m)))))
-  (label 0)
-  (unrealized (0 2))
-  (origs (nm (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nc nb goods price acctnum text) (b m c name))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nc nb)
-  (operation encryption-test (added-strand bank 2)
-    (enc (enc "hash" (cat c nc nb nm price)) (privk b)) (0 2))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 2) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nc nb goods price acctnum acctnum-0 goods-0 text)
-    (b m c b-0 name))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c))
-  (defstrand customer 3 (acctnum acctnum-0) (nc nc) (nm nm)
-    (goods goods-0) (price price) (b b-0) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk b-0))
-  (uniq-orig nm nc nb)
-  (operation nonce-test (added-strand customer 3) nm (1 0)
-    (enc nc nm m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b-0)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nc nb goods price acctnum goods-0 text) (m c b name))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c))
-  (defstrand customer 3 (acctnum acctnum) (nc nc) (nm nm)
-    (goods goods-0) (price price) (b b) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (1 0)))
-  (non-orig (privk m) (privk c) (privk b))
-  (uniq-orig nm nc nb)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nm
-    (1 0) (enc nc nm m price (pubk c))
-    (enc c nc nm acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))))
-  (label 3)
-  (parent 2)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nc nb price acctnum goods text) (m c b name))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c))
-  (defstrand customer 3 (acctnum acctnum) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (1 0)))
-  (non-orig (privk m) (privk c) (privk b))
-  (uniq-orig nm nc nb)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))))
-  (label 4)
-  (parent 3)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nc nb goods price acctnum goods-0 nm-0 price-0 text)
-    (m c b name))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c))
-  (defstrand customer 3 (acctnum acctnum) (nc nc) (nm nm)
-    (goods goods-0) (price price) (b b) (c c) (m m))
-  (defstrand merchant 2 (nc nc) (nm nm-0) (goods goods-0)
-    (price price-0) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (3 0)) ((2 2) (1 0))
-    ((3 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk b))
-  (uniq-orig nm nc nb nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 5)
-  (parent 3)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nc nb acctnum nm goods price text) (c b m name))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c))
-  (defstrand customer 5 (acctnum acctnum) (nb nb) (nc nc) (nm nm)
-    (goods goods) (price price) (b b) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (2 3)) ((2 0) (0 0)) ((2 2) (1 0))
-    ((2 4) (0 2)))
-  (non-orig (privk c) (privk b) (privk m))
-  (uniq-orig nc nb nm)
-  (operation nonce-test (displaced 2 3 customer 5) nb (0 2)
-    (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))))
-  (label 6)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((b b) (m m) (c c) (nm nm) (nc nc) (nb nb) (goods goods)
-        (price price))))
-  (origs (nc (2 0)) (nm (0 1)) (nb (1 1))))
-
-(defskeleton epmo_acctnum
-  (vars (nm nc nb price acctnum goods nm-0 price-0 text) (m c b name))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c))
-  (defstrand customer 3 (acctnum acctnum) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 2 (nc nc) (nm nm-0) (goods goods) (price price-0)
-    (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (3 0)) ((2 2) (1 0))
-    ((3 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk b))
-  (uniq-orig nm nc nb nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 7)
-  (parent 5)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nc nb nm price acctnum nm-0 goods price-0 text) (c b m name))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm-0) (goods goods)
-    (price price-0) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (nc nc) (nm nm-0) (nb nb)
-    (price price-0) (b b) (c c))
-  (defstrand merchant 2 (nc nc) (nm nm) (goods goods) (price price)
-    (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum) (nb nb) (nc nc) (nm nm-0)
-    (goods goods) (price price-0) (b b) (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (3 3)) ((2 1) (0 0)) ((3 0) (2 0))
-    ((3 2) (1 0)) ((3 4) (0 2)))
-  (non-orig (privk c) (privk b) (privk m))
-  (uniq-orig nc nb nm nm-0)
-  (operation nonce-test (displaced 2 4 customer 5) nb (0 2)
-    (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm-0 price-0)) (privk b))
-          nb)) (send (enc (enc "hash" (cat b m nb nm-0)) (privk m))))
-    ((recv (enc c nc nm-0 acctnum price-0 (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm-0 price-0)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm-0 m price-0 (pubk c)))
-      (send (enc c nc nm-0 acctnum price-0 (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm-0 price-0)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm-0 price-0)) (privk b))
-          nb))))
-  (label 8)
-  (parent 7)
-  (seen 6)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
-
-(defprotocol epmo_acctnum basic
-  (defrole bank
-    (vars (b c m name) (acctnum nc nm nb price text))
-    (trace (recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    (annotations b
-      (1
-        (forall ((pm name))
-          (implies
-            (and (authtransfer c acctnum b price pm nm)
-              (reqtransfer pm b price pm nm))
-            (dotransfer acctnum b price pm nm))))
-      (2
-        (and (says c (authtransfer c acctnum b price m nm))
-          (says m (reqtransfer m b price m nm))))))
-  (defrole customer
-    (vars (b c m name) (acctnum nb nc nm goods price text))
-    (trace (send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    (non-orig (privk b))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (implies
-            (exists ((acctnum2 text))
-              (dotransfer acctnum2 b price m nm)) (doship m goods c))))
-      (3
-        (says b
-          (forall ((pm name))
-            (implies
-              (and (authtransfer c acctnum b price m nm)
-                (reqtransfer pm b price pm nm))
-              (dotransfer acctnum b price pm nm)))))
-      (4 (authtransfer c acctnum b price m nm))))
-  (defrole merchant
-    (vars (b c m name) (nb nc nm goods price text))
-    (trace (recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (implies
-          (exists ((acctnum2 text)) (dotransfer acctnum2 b price m nm))
-          (doship m goods c)))
-      (2
-        (and
-          (says b
-            (forall ((pm name))
-              (exists ((acctnum2 text))
-                (implies
-                  (and (authtransfer c acctnum2 b price m nm)
-                    (reqtransfer pm b price pm nm))
-                  (dotransfer acctnum2 b price pm nm)))))
-          (says c
-            (exists ((acctnum2 text))
-              (authtransfer c acctnum2 b price m nm)))))
-      (3 (and (reqtransfer m b price m nm) (doship m goods c))))))
-
-(defskeleton epmo_acctnum
-  (vars (nm nb nc acctnum price text) (b m c name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc)
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m)))))
-  (label 9)
-  (unrealized (0 2))
-  (origs (nb (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nb nc acctnum price nc-0 goods price-0 text)
-    (b m c c-0 name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc-0) (nm nm) (goods goods)
-    (price price-0) (b b) (c c-0) (m m))
-  (precedes ((0 1) (1 2)) ((1 1) (0 0)) ((1 3) (0 2)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc)
-  (operation encryption-test (added-strand merchant 4)
-    (enc (enc "hash" (cat b m nb nm)) (privk m)) (0 2))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c-0 nc-0 goods (pubk m)))
-      (send (enc nc-0 nm m price-0 (pubk c-0)))
-      (recv
-        (cat (enc (enc "hash" (cat c-0 nc-0 nb nm price-0)) (privk b))
-          nb)) (send (enc (enc "hash" (cat b m nb nm)) (privk m)))))
-  (label 10)
-  (parent 9)
-  (unrealized (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nb nc acctnum price goods text) (b m c name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (precedes ((0 1) (1 2)) ((1 1) (0 0)) ((1 3) (0 2)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc)
-  (operation encryption-test (displaced 2 0 bank 2)
-    (enc (enc "hash" (cat c-0 nc-0 nb nm price-0)) (privk b)) (1 2))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m)))))
-  (label 11)
-  (parent 10)
-  (unrealized (0 0) (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars
-    (nm nb nc acctnum price goods acctnum-0 nm-0 goods-0 price-0 text)
-    (b m c b-0 m-0 name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum-0) (nb nb) (nc nc) (nm nm-0)
-    (goods goods-0) (price price-0) (b b-0) (c c) (m m-0))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c) (privk b-0))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (added-strand customer 5) nb (1 2)
-    (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((send (enc c nc goods-0 (pubk m-0)))
-      (recv (enc nc nm-0 m-0 price-0 (pubk c)))
-      (send (enc c nc nm-0 acctnum-0 price-0 (pubk b-0)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm-0 price-0)) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm-0 price-0)) (privk b-0))
-          nb))))
-  (label 12)
-  (parent 11)
-  (unrealized (0 0) (2 3))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nb nc acctnum price goods acctnum-0 goods-0 text)
-    (b m c m-0 name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum-0) (nb nb) (nc nc) (nm nm)
-    (goods goods-0) (price price) (b b) (c c) (m m-0))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc)
-  (operation encryption-test (displaced 3 0 bank 2)
-    (enc (enc "hash" (cat c nc nb nm-0 price-0)) (privk b-0)) (2 3))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((send (enc c nc goods-0 (pubk m-0)))
-      (recv (enc nc nm m-0 price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))))
-  (label 13)
-  (parent 12)
-  (unrealized (0 0) (2 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nb nc acctnum price goods acctnum-0 goods-0 text)
-    (b m c name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum-0) (nb nb) (nc nc) (nm nm)
-    (goods goods-0) (price price) (b b) (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (contracted (m-0 m)) nm (2 1)
-    (enc nc nm m price (pubk c)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))))
-  (label 14)
-  (parent 13)
-  (unrealized (0 0) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nb nc acctnum price acctnum-0 goods text) (b m c name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum-0) (nb nb) (nc nc) (nm nm)
-    (goods goods) (price price) (b b) (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (contracted (goods-0 goods)) nc (1 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))))
-  (label 15)
-  (parent 14)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars
-    (nm nb nc acctnum price goods acctnum-0 goods-0 nm-0 price-0 text)
-    (b m c name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum-0) (nb nb) (nc nc) (nm nm)
-    (goods goods-0) (price price) (b b) (c c) (m m))
-  (defstrand merchant 2 (nc nc) (nm nm-0) (goods goods-0)
-    (price price-0) (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (3 0)) ((2 4) (1 2)) ((3 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 16)
-  (parent 14)
-  (unrealized (0 0) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nb nc acctnum price acctnum-0 goods text) (b m c name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum-0) (nb nb) (nc nc) (nm nm)
-    (goods goods) (price price) (b b) (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (0 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (displaced 3 2 customer 3) nm (0 0)
-    (enc nc nm m price (pubk c)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))))
-  (label 17)
-  (parent 15)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nb nc acctnum price acctnum-0 goods nm-0 price-0 text)
-    (b m c name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum-0) (nb nb) (nc nc) (nm nm)
-    (goods goods) (price price) (b b) (c c) (m m))
-  (defstrand merchant 2 (nc nc) (nm nm-0) (goods goods) (price price-0)
-    (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (3 0)) ((2 4) (1 2)) ((3 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (1 0)
-    (enc nc nm-0 m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 18)
-  (parent 16)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nb nc price acctnum goods text) (b m c name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum) (nb nb) (nc nc) (nm nm)
-    (goods goods) (price price) (b b) (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (0 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (contracted (acctnum-0 acctnum)) nm (0 0)
-    (enc nc nm m price (pubk c)) (enc c nc nm acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))))
-  (label 19)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((b b) (m m) (c c) (nm nm) (nb nb) (nc nc) (acctnum acctnum)
-        (price price))))
-  (origs (nc (2 0)) (nm (1 1)) (nb (0 1))))
-
-(defskeleton epmo_acctnum
-  (vars (nm nb nc acctnum price acctnum-0 goods nm-0 price-0 text)
-    (b m c name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum-0) (nb nb) (nc nc) (nm nm)
-    (goods goods) (price price) (b b) (c c) (m m))
-  (defstrand merchant 2 (nc nc) (nm nm-0) (goods goods) (price price-0)
-    (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (3 0))
-    ((2 2) (0 0)) ((2 4) (1 2)) ((3 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (displaced 4 2 customer 3) nm (0 0)
-    (enc nc nm m price (pubk c)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 20)
-  (parent 18)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton epmo_acctnum
-  (vars (nm nb nc price acctnum goods nm-0 price-0 text) (b m c name))
-  (defstrand bank 3 (acctnum acctnum) (nc nc) (nm nm) (nb nb)
-    (price price) (b b) (c c) (m m))
-  (defstrand merchant 4 (nb nb) (nc nc) (nm nm) (goods goods)
-    (price price) (b b) (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum) (nb nb) (nc nc) (nm nm)
-    (goods goods) (price price) (b b) (c c) (m m))
-  (defstrand merchant 2 (nc nc) (nm nm-0) (goods goods) (price price-0)
-    (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (3 0))
-    ((2 2) (0 0)) ((2 4) (1 2)) ((3 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (contracted (acctnum-0 acctnum)) nm (0 0)
-    (enc nc nm m price (pubk c)) (enc c nc nm acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb))
-      (send (enc (enc "hash" (cat b m nb nm)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" (cat c nc nb nm price)) (privk b)) nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 21)
-  (parent 20)
-  (seen 19)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
diff --git a/tst/epmo_acctnum.lisp b/tst/epmo_acctnum.lisp
deleted file mode 100644
--- a/tst/epmo_acctnum.lisp
+++ /dev/null
@@ -1,103 +0,0 @@
-(herald "Electronic Purchase with Money Order Protocol Variant"
-  (bound 12) (limit 5000)
-  (comment "This version includes account numbers in exchanges"))
-
-;; The results of running CPSA on this input produces interesting
-;; output.  One of the shapes is produced only as a result of
-;; generalization, not cohort reduction.  It is a counterexample to
-;; the hypthesis that all shapes are produced by cohort reduction, and
-;; the purpose of generalization is to distinguish the shapes from the
-;; other realized skeletons produced by cohort reduction.
-
-;; The shape in question identifies the bank's nonce with price of the
-;; goods.  The variable cannot be separated because the uniquely
-;; originating variable originates on the merchant strand, but after
-;; separation, it would originate on the bank's strand.
-
-;; Adding a role unique origination assumption to the bank role for
-;; its nonce eliminates the undesired shape.
-
-(defprotocol epmo_acctnum basic
-  (defrole bank
-    (vars (b c m name) (acctnum text) (hash name) (nc nm nb price text))
-    (trace
-     (recv (enc c nc nm acctnum price (pubk b)))
-     (send (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-		(enc nc nb (pubk c))))
-     (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    (non-orig (privk hash))
-    (annotations b
-      (1
-        (forall ((pm name))
-          (implies
-            (and (authtransfer c acctnum b price pm nm)
-              (reqtransfer pm b price pm nm))
-            (dotransfer acctnum b price pm nm))))
-      (2
-        (and (says c (authtransfer c acctnum b price m nm))
-          (says m (reqtransfer m b price m nm))))))
-  (defrole customer
-    (vars (b c m hash name) (acctnum nb nc nm goods price text))
-    (trace
-     (send (enc c nc goods (pubk m)))
-     (recv (enc nc nm m price (pubk c)))
-     (send (enc c nc nm acctnum price (pubk b)))
-     (recv (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-		(enc nc nb (pubk c))))
-     (send (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-		nb)))
-    (non-orig (privk b) (privk hash))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (implies
-            (exists ((acctnum2 text))
-              (dotransfer acctnum2 b price m nm)) (doship m goods c))))
-      (3
-        (says b
-          (forall ((pm name))
-            (implies
-              (and (authtransfer c acctnum b price m nm)
-                (reqtransfer pm b price pm nm))
-              (dotransfer acctnum b price pm nm)))))
-      (4 (authtransfer c acctnum b price m nm))))
-  (defrole merchant (vars (b c m hash name) (nb nc nm goods price text))
-    (trace
-     (recv (enc c nc goods (pubk m)))
-     (send (enc nc nm m price (pubk c)))
-     (recv (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-		nb))
-     (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    (non-orig (privk hash))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (implies
-          (exists ((acctnum2 text)) (dotransfer acctnum2 b price m nm))
-          (doship m goods c)))
-      (2
-        (and
-          (says b
-            (forall ((pm name))
-              (exists ((acctnum2 text))
-                (implies
-                  (and (authtransfer c acctnum2 b price m nm)
-                    (reqtransfer pm b price pm nm))
-                  (dotransfer acctnum2 b price pm nm)))))
-          (says c
-            (exists ((acctnum2 text))
-              (authtransfer c acctnum2 b price m nm)))))
-      (3 (and (reqtransfer m b price m nm) (doship m goods c))))))
-
-(defskeleton epmo_acctnum
-  (vars (b m c name) (nm nc nb text) (hash name))
-  (defstrand merchant 4 (b b) (m m) (c c) (nm nm) (nc nc) (nb nb) (hash hash))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nc nb))
-
-(defskeleton epmo_acctnum
-  (vars (b m c name) (nm nb nc text) (hash name) (price acctnum text))
-  (defstrand bank 3 (b b) (m m) (c c) (nm nm) (nb nb) (nc nc) (hash hash))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nc nb))
diff --git a/tst/ffgg.tst b/tst/ffgg.tst
--- a/tst/ffgg.tst
+++ b/tst/ffgg.tst
@@ -1,7 +1,7 @@
 (herald "The ffgg Protocol"
   (comment "From A Necessarily Parallel Attack by Jon K. Millen"))
 
-(comment "CPSA 2.5.4")
+(comment "CPSA 3.2.2")
 (comment "All input read from ffgg.scm")
 
 (defprotocol ffgg basic
diff --git a/tst/fnof_or.scm b/tst/fnof_or.scm
new file mode 100644
--- /dev/null
+++ b/tst/fnof_or.scm
@@ -0,0 +1,85 @@
+(herald "Otway-Rees Protocol"
+	(comment "Version using variables of sort mesg, with ltk function emulated."))
+
+(defprotocol or basic
+  (defrole init (vars (a b s name) (na text) (ltkas k skey) (m text))
+    (trace
+     ;; Including (init s) so that s occurs in the trace.
+     (init s)
+     (send (cat m a b (enc na m a b ltkas)))
+     (recv (cat m (enc na k ltkas))))
+  (fn-of ("ltk" (ltkas (cat a s))))
+  (fn-of ("ltkinv" ((cat a s) ltkas)))
+ )
+  (defrole resp
+    (vars (a b s name) (nb text) (k ltkbs ltkas skey) (m text) (x y mesg))
+    (trace
+     ;; Including (init s ltkas) so that s and ltkas occur in the trace.
+     (init (cat s ltkas))
+     (recv (cat m a b x))
+     (send (cat m a b x (enc nb m a b ltkbs)))
+     (recv (cat m y (enc nb k ltkbs)))
+     (send y))
+  (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))
+  (fn-of ("ltkinv" ((cat a s) ltkas) ((cat b s) ltkbs)))
+ )
+  (defrole serv (vars (a b s name) (na nb text) (k ltkas ltkbs skey) (m text))
+    (trace
+     ;; Including (init s) so that s occurs in the trace.
+     (init s)
+     (recv (cat m a b (enc na m a b ltkas)
+		(enc nb m a b ltkbs)))
+     (send (cat m (enc na k ltkas) (enc nb k ltkbs))))
+    (uniq-orig k)
+  (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))
+  (fn-of ("ltkinv" ((cat a s) ltkas) ((cat b s) ltkbs)))
+ )
+)
+
+(defskeleton or
+  (vars (nb text) (s a b name) (ltkas ltkbs skey))
+  (defstrand resp 4 (a a) (b b) (s s) (nb nb) (ltkas ltkas) (ltkbs ltkbs))
+  (non-orig ltkas ltkbs)
+  (uniq-orig nb))
+
+;;;  In this version, fn-of is only used for the "forward" direction
+;;; of the ltk function.  In other words, if y = ltk(a,b) and z =
+;;; ltk(a,b) then y = z.  But if y = ltk(a,b) and z = ltk(c,d) it is
+;;; not necessarily the case that if y=z then a = b and c = d.
+(defprotocol or2 basic
+  (defrole init (vars (a b s name) (na text) (ltkas k skey) (m text))
+    (trace
+     ;; Including (init s) so that s occurs in the trace.
+     (init s)
+     (send (cat m a b (enc na m a b ltkas)))
+     (recv (cat m (enc na k ltkas))))
+  (fn-of ("ltk" (ltkas (cat a s))))
+ )
+  (defrole resp
+    (vars (a b s name) (nb text) (k ltkbs ltkas skey) (m text) (x y mesg))
+    (trace
+     ;; Including (init s ltkas) so that s and ltkas occur in the trace.
+     (init (cat s ltkas))
+     (recv (cat m a b x))
+     (send (cat m a b x (enc nb m a b ltkbs)))
+     (recv (cat m y (enc nb k ltkbs)))
+     (send y))
+  (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))
+ )
+  (defrole serv (vars (a b s name) (na nb text) (k ltkas ltkbs skey) (m text))
+    (trace
+     ;; Including (init s) so that s occurs in the trace.
+     (init s)
+     (recv (cat m a b (enc na m a b ltkas)
+		(enc nb m a b ltkbs)))
+     (send (cat m (enc na k ltkas) (enc nb k ltkbs))))
+    (uniq-orig k)
+  (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))
+ )
+)
+
+(defskeleton or2
+  (vars (nb text) (s a b name) (ltkas ltkbs skey))
+  (defstrand resp 4 (a a) (b b) (s s) (nb nb) (ltkas ltkas) (ltkbs ltkbs))
+  (non-orig ltkas ltkbs)
+  (uniq-orig nb))
diff --git a/tst/fnof_or.tst b/tst/fnof_or.tst
new file mode 100644
--- /dev/null
+++ b/tst/fnof_or.tst
@@ -0,0 +1,477 @@
+(herald "Otway-Rees Protocol"
+  (comment
+    "Version using variables of sort mesg, with ltk function emulated."))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from fnof_or.scm")
+
+(defprotocol or basic
+  (defrole init
+    (vars (a b s name) (na text) (ltkas k skey) (m text))
+    (trace (init s) (send (cat m a b (enc na m a b ltkas)))
+      (recv (cat m (enc na k ltkas))))
+    (fn-of ("ltk" (ltkas (cat a s))) ("ltkinv" ((cat a s) ltkas))))
+  (defrole resp
+    (vars (a b s name) (nb text) (k ltkbs ltkas skey) (m text)
+      (x y mesg))
+    (trace (init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))) (send y))
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)))
+      ("ltkinv" ((cat a s) ltkas) ((cat b s) ltkbs))))
+  (defrole serv
+    (vars (a b s name) (na nb text) (k ltkas ltkbs skey) (m text))
+    (trace (init s)
+      (recv (cat m a b (enc na m a b ltkas) (enc nb m a b ltkbs)))
+      (send (cat m (enc na k ltkas) (enc nb k ltkbs))))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)))
+      ("ltkinv" ((cat a s) ltkas) ((cat b s) ltkbs)))))
+
+(defskeleton or
+  (vars (x y mesg) (nb m text) (s a b name) (ltkas ltkbs k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkas))
+  (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)))
+    ("ltkinv" ((cat a s) ltkas) ((cat b s) ltkbs)))
+  (non-orig ltkas ltkbs)
+  (uniq-orig nb)
+  (traces
+    ((init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs)))))
+  (label 0)
+  (unrealized (0 3))
+  (origs (nb (0 2)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton or
+  (vars (x y mesg) (nb m na m-0 text) (s a b a-0 name)
+    (ltkas ltkbs k ltkas-0 skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkas))
+  (defstrand serv 3 (na na) (nb nb) (m m-0) (a a-0) (b b) (s s) (k k)
+    (ltkas ltkas-0) (ltkbs ltkbs))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)))
+  (fn-of
+    ("ltk" (ltkas-0 (cat a-0 s)) (ltkbs (cat b s)) (ltkas (cat a s)))
+    ("ltkinv" ((cat a-0 s) ltkas-0) ((cat b s) ltkbs)
+      ((cat a s) ltkas)))
+  (non-orig ltkas ltkbs)
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand serv 3) (enc nb k ltkbs)
+    (0 3))
+  (traces
+    ((init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s)
+      (recv
+        (cat m-0 a-0 b (enc na m-0 a-0 b ltkas-0)
+          (enc nb m-0 a-0 b ltkbs)))
+      (send (cat m-0 (enc na k ltkas-0) (enc nb k ltkbs)))))
+  (label 1)
+  (parent 0)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton or
+  (vars (x y mesg) (nb m nb-0 m-0 text) (s a b b-0 name)
+    (ltkas ltkbs k ltkbs-0 skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkas))
+  (defstrand serv 3 (na nb) (nb nb-0) (m m-0) (a b) (b b-0) (s s) (k k)
+    (ltkas ltkbs) (ltkbs ltkbs-0))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)))
+  (fn-of
+    ("ltk" (ltkbs (cat b s)) (ltkbs-0 (cat b-0 s)) (ltkas (cat a s)))
+    ("ltkinv" ((cat b s) ltkbs) ((cat b-0 s) ltkbs-0)
+      ((cat a s) ltkas)))
+  (non-orig ltkas ltkbs)
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand serv 3) (enc nb k ltkbs)
+    (0 3))
+  (traces
+    ((init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s)
+      (recv
+        (cat m-0 b b-0 (enc nb m-0 b b-0 ltkbs)
+          (enc nb-0 m-0 b b-0 ltkbs-0)))
+      (send (cat m-0 (enc nb k ltkbs) (enc nb-0 k ltkbs-0)))))
+  (label 2)
+  (parent 0)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton or
+  (vars (x y mesg) (nb m na text) (s a b name) (ltkbs k ltkas skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkas))
+  (defstrand serv 3 (na na) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkas ltkas) (ltkbs ltkbs))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)))
+  (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)))
+    ("ltkinv" ((cat a s) ltkas) ((cat b s) ltkbs)))
+  (non-orig ltkbs ltkas)
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 3)
+    (enc nb m-0 a-0 b ltkbs) (1 1))
+  (traces
+    ((init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s)
+      (recv (cat m a b (enc na m a b ltkas) (enc nb m a b ltkbs)))
+      (send (cat m (enc na k ltkas) (enc nb k ltkbs)))))
+  (label 3)
+  (parent 1)
+  (unrealized (1 1))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton or
+  (vars (x y mesg) (nb m nb-0 text) (s a name) (k ltkbs skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkbs))
+  (defstrand serv 3 (na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k)
+    (ltkas ltkbs) (ltkbs ltkbs))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)))
+  (fn-of ("ltk" (ltkbs (cat a s))) ("ltkinv" ((cat a s) ltkbs)))
+  (non-orig ltkbs)
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 3)
+    (enc nb m-0 b b-0 ltkbs-0) (1 1))
+  (traces
+    ((init (cat s ltkbs)) (recv (cat m a a x))
+      (send (cat m a a x (enc nb m a a ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s)
+      (recv (cat m a a (enc nb m a a ltkbs) (enc nb-0 m a a ltkbs)))
+      (send (cat m (enc nb k ltkbs) (enc nb-0 k ltkbs)))))
+  (label 4)
+  (parent 2)
+  (seen 6)
+  (unrealized (1 1))
+  (comment "3 in cohort - 2 not yet seen"))
+
+(defskeleton or
+  (vars (x y mesg) (nb m na text) (s a b name) (ltkbs k ltkas skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkas))
+  (defstrand serv 3 (na na) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkas ltkas) (ltkbs ltkbs))
+  (defstrand init 2 (na na) (m m) (a a) (b b) (s s) (ltkas ltkas))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)) ((2 1) (1 1)))
+  (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)))
+    ("ltkinv" ((cat a s) ltkas) ((cat b s) ltkbs)))
+  (non-orig ltkbs ltkas)
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand init 2) (enc na m a b ltkas)
+    (1 1))
+  (traces
+    ((init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s)
+      (recv (cat m a b (enc na m a b ltkas) (enc nb m a b ltkbs)))
+      (send (cat m (enc na k ltkas) (enc nb k ltkbs))))
+    ((init s) (send (cat m a b (enc na m a b ltkas)))))
+  (label 5)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((nb nb) (s s) (a a) (b b) (ltkas ltkas) (ltkbs ltkbs) (k k) (m m)
+        (x x) (y y))))
+  (origs (k (1 2)) (nb (0 2))))
+
+(defskeleton or
+  (vars (x y mesg) (nb m text) (s b name) (ltkbs k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a b) (b b) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkbs))
+  (defstrand serv 3 (na nb) (nb nb) (m m) (a b) (b b) (s s) (k k)
+    (ltkas ltkbs) (ltkbs ltkbs))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)))
+  (fn-of ("ltk" (ltkbs (cat b s))) ("ltkinv" ((cat b s) ltkbs)))
+  (non-orig ltkbs)
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 3) (enc na m a b ltkas)
+    (1 1))
+  (traces
+    ((init (cat s ltkbs)) (recv (cat m b b x))
+      (send (cat m b b x (enc nb m b b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s)
+      (recv (cat m b b (enc nb m b b ltkbs) (enc nb m b b ltkbs)))
+      (send (cat m (enc nb k ltkbs) (enc nb k ltkbs)))))
+  (label 6)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((nb nb) (s s) (a b) (b b) (ltkas ltkbs) (ltkbs ltkbs) (k k) (m m)
+        (x x) (y y))))
+  (origs (k (1 2)) (nb (0 2))))
+
+(defskeleton or
+  (vars (x y x-0 mesg) (nb m na text) (s a name) (ltkbs k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkbs))
+  (defstrand serv 3 (na na) (nb nb) (m m) (a a) (b a) (s s) (k k)
+    (ltkas ltkbs) (ltkbs ltkbs))
+  (defstrand resp 3 (x x-0) (nb na) (m m) (a a) (b a) (s s)
+    (ltkbs ltkbs) (ltkas ltkbs))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)) ((2 2) (1 1)))
+  (fn-of ("ltk" (ltkbs (cat a s))) ("ltkinv" ((cat a s) ltkbs)))
+  (non-orig ltkbs)
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand resp 3) (enc na m a a ltkbs)
+    (1 1))
+  (traces
+    ((init (cat s ltkbs)) (recv (cat m a a x))
+      (send (cat m a a x (enc nb m a a ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s)
+      (recv (cat m a a (enc na m a a ltkbs) (enc nb m a a ltkbs)))
+      (send (cat m (enc na k ltkbs) (enc nb k ltkbs))))
+    ((init (cat s ltkbs)) (recv (cat m a a x-0))
+      (send (cat m a a x-0 (enc na m a a ltkbs)))))
+  (label 7)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((nb nb) (s s) (a a) (b a) (ltkas ltkbs) (ltkbs ltkbs) (k k) (m m)
+        (x x) (y y))))
+  (origs (k (1 2)) (nb (0 2))))
+
+(defskeleton or
+  (vars (x y mesg) (nb m nb-0 text) (s a name) (k ltkbs skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkbs))
+  (defstrand serv 3 (na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k)
+    (ltkas ltkbs) (ltkbs ltkbs))
+  (defstrand init 2 (na nb-0) (m m) (a a) (b a) (s s) (ltkas ltkbs))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)) ((2 1) (1 1)))
+  (fn-of ("ltk" (ltkbs (cat a s))) ("ltkinv" ((cat a s) ltkbs)))
+  (non-orig ltkbs)
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand init 2)
+    (enc nb-0 m a a ltkbs) (1 1))
+  (traces
+    ((init (cat s ltkbs)) (recv (cat m a a x))
+      (send (cat m a a x (enc nb m a a ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s)
+      (recv (cat m a a (enc nb m a a ltkbs) (enc nb-0 m a a ltkbs)))
+      (send (cat m (enc nb k ltkbs) (enc nb-0 k ltkbs))))
+    ((init s) (send (cat m a a (enc nb-0 m a a ltkbs)))))
+  (label 8)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((nb nb) (s s) (a a) (b a) (ltkas ltkbs) (ltkbs ltkbs) (k k) (m m)
+        (x x) (y y))))
+  (origs (k (1 2)) (nb (0 2))))
+
+(defskeleton or
+  (vars (x y x-0 mesg) (nb m nb-0 text) (s a name) (k ltkbs skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b a) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkbs))
+  (defstrand serv 3 (na nb) (nb nb-0) (m m) (a a) (b a) (s s) (k k)
+    (ltkas ltkbs) (ltkbs ltkbs))
+  (defstrand resp 3 (x x-0) (nb nb-0) (m m) (a a) (b a) (s s)
+    (ltkbs ltkbs) (ltkas ltkbs))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)) ((2 2) (1 1)))
+  (fn-of ("ltk" (ltkbs (cat a s))) ("ltkinv" ((cat a s) ltkbs)))
+  (non-orig ltkbs)
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand resp 3)
+    (enc nb-0 m a a ltkbs) (1 1))
+  (traces
+    ((init (cat s ltkbs)) (recv (cat m a a x))
+      (send (cat m a a x (enc nb m a a ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s)
+      (recv (cat m a a (enc nb m a a ltkbs) (enc nb-0 m a a ltkbs)))
+      (send (cat m (enc nb k ltkbs) (enc nb-0 k ltkbs))))
+    ((init (cat s ltkbs)) (recv (cat m a a x-0))
+      (send (cat m a a x-0 (enc nb-0 m a a ltkbs)))))
+  (label 9)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((nb nb) (s s) (a a) (b a) (ltkas ltkbs) (ltkbs ltkbs) (k k) (m m)
+        (x x) (y y))))
+  (origs (k (1 2)) (nb (0 2))))
+
+(comment "Nothing left to do")
+
+(defprotocol or2 basic
+  (defrole init
+    (vars (a b s name) (na text) (ltkas k skey) (m text))
+    (trace (init s) (send (cat m a b (enc na m a b ltkas)))
+      (recv (cat m (enc na k ltkas))))
+    (fn-of ("ltk" (ltkas (cat a s)))))
+  (defrole resp
+    (vars (a b s name) (nb text) (k ltkbs ltkas skey) (m text)
+      (x y mesg))
+    (trace (init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))) (send y))
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)))))
+  (defrole serv
+    (vars (a b s name) (na nb text) (k ltkas ltkbs skey) (m text))
+    (trace (init s)
+      (recv (cat m a b (enc na m a b ltkas) (enc nb m a b ltkbs)))
+      (send (cat m (enc na k ltkas) (enc nb k ltkbs))))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))))
+
+(defskeleton or2
+  (vars (x y mesg) (nb m text) (s a b name) (ltkas ltkbs k skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkas))
+  (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))
+  (non-orig ltkas ltkbs)
+  (uniq-orig nb)
+  (traces
+    ((init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs)))))
+  (label 10)
+  (unrealized (0 3))
+  (origs (nb (0 2)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton or2
+  (vars (x y mesg) (nb m na m-0 text) (s a b a-0 b-0 s-0 name)
+    (ltkas ltkbs k ltkas-0 skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkas))
+  (defstrand serv 3 (na na) (nb nb) (m m-0) (a a-0) (b b-0) (s s-0)
+    (k k) (ltkas ltkas-0) (ltkbs ltkbs))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)))
+  (fn-of
+    ("ltk" (ltkas-0 (cat a-0 s-0)) (ltkbs (cat b-0 s-0))
+      (ltkas (cat a s)) (ltkbs (cat b s))))
+  (non-orig ltkas ltkbs)
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand serv 3) (enc nb k ltkbs)
+    (0 3))
+  (traces
+    ((init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s-0)
+      (recv
+        (cat m-0 a-0 b-0 (enc na m-0 a-0 b-0 ltkas-0)
+          (enc nb m-0 a-0 b-0 ltkbs)))
+      (send (cat m-0 (enc na k ltkas-0) (enc nb k ltkbs)))))
+  (label 11)
+  (parent 10)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton or2
+  (vars (x y mesg) (nb m nb-0 m-0 text) (s a b a-0 b-0 s-0 name)
+    (ltkas ltkbs k ltkbs-0 skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkas))
+  (defstrand serv 3 (na nb) (nb nb-0) (m m-0) (a a-0) (b b-0) (s s-0)
+    (k k) (ltkas ltkbs) (ltkbs ltkbs-0))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)))
+  (fn-of
+    ("ltk" (ltkbs (cat a-0 s-0)) (ltkbs-0 (cat b-0 s-0))
+      (ltkas (cat a s)) (ltkbs (cat b s))))
+  (non-orig ltkas ltkbs)
+  (uniq-orig nb k)
+  (operation encryption-test (added-strand serv 3) (enc nb k ltkbs)
+    (0 3))
+  (traces
+    ((init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s-0)
+      (recv
+        (cat m-0 a-0 b-0 (enc nb m-0 a-0 b-0 ltkbs)
+          (enc nb-0 m-0 a-0 b-0 ltkbs-0)))
+      (send (cat m-0 (enc nb k ltkbs) (enc nb-0 k ltkbs-0)))))
+  (label 12)
+  (parent 10)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton or2
+  (vars (x y mesg) (nb m na text) (s a b s-0 name)
+    (ltkas ltkbs k ltkas-0 skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkas))
+  (defstrand serv 3 (na na) (nb nb) (m m) (a a) (b b) (s s-0) (k k)
+    (ltkas ltkas-0) (ltkbs ltkbs))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)))
+  (fn-of
+    ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)) (ltkas-0 (cat a s-0))
+      (ltkbs (cat b s-0))))
+  (non-orig ltkas ltkbs)
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 3)
+    (enc nb m-0 a-0 b-0 ltkbs) (1 1))
+  (traces
+    ((init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s-0)
+      (recv (cat m a b (enc na m a b ltkas-0) (enc nb m a b ltkbs)))
+      (send (cat m (enc na k ltkas-0) (enc nb k ltkbs)))))
+  (label 13)
+  (parent 11)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((nb nb) (s s) (a a) (b b) (ltkas ltkas) (ltkbs ltkbs) (k k) (m m)
+        (x x) (y y))))
+  (origs (k (1 2)) (nb (0 2))))
+
+(defskeleton or2
+  (vars (x y mesg) (nb m nb-0 text) (s a b s-0 name)
+    (ltkas ltkbs k ltkbs-0 skey))
+  (defstrand resp 4 (x x) (y y) (nb nb) (m m) (a a) (b b) (s s) (k k)
+    (ltkbs ltkbs) (ltkas ltkas))
+  (defstrand serv 3 (na nb) (nb nb-0) (m m) (a a) (b b) (s s-0) (k k)
+    (ltkas ltkbs) (ltkbs ltkbs-0))
+  (precedes ((0 2) (1 1)) ((1 2) (0 3)))
+  (fn-of
+    ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)) (ltkbs (cat a s-0))
+      (ltkbs-0 (cat b s-0))))
+  (non-orig ltkas ltkbs)
+  (uniq-orig nb k)
+  (operation encryption-test (displaced 2 0 resp 3)
+    (enc nb m-0 a-0 b-0 ltkbs) (1 1))
+  (traces
+    ((init (cat s ltkas)) (recv (cat m a b x))
+      (send (cat m a b x (enc nb m a b ltkbs)))
+      (recv (cat m y (enc nb k ltkbs))))
+    ((init s-0)
+      (recv (cat m a b (enc nb m a b ltkbs) (enc nb-0 m a b ltkbs-0)))
+      (send (cat m (enc nb k ltkbs) (enc nb-0 k ltkbs-0)))))
+  (label 14)
+  (parent 12)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((nb nb) (s s) (a a) (b b) (ltkas ltkas) (ltkbs ltkbs) (k k) (m m)
+        (x x) (y y))))
+  (origs (k (1 2)) (nb (0 2))))
+
+(comment "Nothing left to do")
diff --git a/tst/fnof_test.scm b/tst/fnof_test.scm
new file mode 100644
--- /dev/null
+++ b/tst/fnof_test.scm
@@ -0,0 +1,86 @@
+(herald "Function constraint test protocol"
+   (comment "Skeletons 2, 4, and 7 should have no shapes."))
+
+(defprotocol fnoftest basic
+  (defrole init
+     (vars (an0 an1 n0 n1 text) (k skey))
+     (trace
+       (send (cat n0 (enc an0 an1 n0 n1 k)))
+       (recv n1))
+     (non-orig k)
+     (uniq-orig n0 n1)
+  )
+)
+
+;;; In this skeleton, after n0 and n1 are unified, an0 and an1 will
+;;; remain distinct.
+(defskeleton fnoftest
+   (vars (an0 an1 n0 n1 text) (k skey))
+   (defstrand init 2 (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+)
+
+;;; This skeleton will be dead.  The fn-of declaration forces an0 =
+;;; an1 which violates the neq declaration.
+(defskeleton fnoftest
+   (vars (an0 an1 n0 n1 text) (k skey))
+   (defstrand init 2 (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+   (neq (an0 an1))
+   (fn-of (a (an0 n0) (an1 n1)))
+)
+
+;;; Tests whether rectification will happen properly on initial load,
+;;; since n1 and n0 are already unified.
+(defskeleton fnoftest
+   (vars (an0 an1 n1 text) (k skey))
+   (defstrand init 2 (an0 an0) (an1 an1) (n0 n1) (n1 n1) (k k))
+   (fn-of (a (an0 n1) (an1 n1)))
+)
+
+;;; Tests whether rectification will happen properly on initial load
+;;; when it leads to an impossibility.
+(defskeleton fnoftest
+   (vars (an0 an1 n1 text) (k skey))
+   (defstrand init 2 (an0 an0) (an1 an1) (n0 n1) (n1 n1) (k k))
+   (fn-of (a (an0 n1) (an1 n1)))
+   (neq (an0 an1))
+)
+
+(defprotocol fnoftest2 basic
+  (defrole init
+     (vars (bn0 bn1 name) (an0 an1 n0 n1 text) (k skey))
+     (trace
+       (send (cat n0 (enc bn0 bn1 an0 an1 n0 n1 k)))
+       (recv n1))
+     (non-orig k)
+     (uniq-orig n0 n1)
+     (fn-of (a (an0 n0) (an1 n1)))
+     (fn-of (b ((pubk bn0) an0)))
+  )
+)
+
+;;; This skeleton should be fine, but bn0 = bn1.  Tests cascading
+;;; requirements, as the bn0 = bn1 requirement only arises after an0 =
+;;; an1 happens.
+(defskeleton fnoftest2
+   (vars (bn0 bn1 name) (an0 an1 n0 n1 text) (k skey))
+   (defstrand init 2 (bn0 bn0) (bn1 bn1) (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+   (fn-of (b ((pubk bn1) an1)))
+)
+
+;;; Here, bn0 and bn1 are not unified because they are the result of
+;;; different functions, even once the inputs are unified.
+(defskeleton fnoftest2
+   (vars (bn0 bn1 name) (an0 an1 n0 n1 text) (k skey))
+   (defstrand init 2 (bn0 bn0) (bn1 bn1) (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+   (fn-of (c ((pubk bn1) an1)))
+   (decl foo ((n0 n1) (0 1)) ((k k k n0) (0 0) (0 0) (0 1)))
+)
+
+;;; This should be dead due to a cascade, because pubk bn0 cannot be
+;;; unified with privk bn0.
+(defskeleton fnoftest2
+   (vars (bn0 bn1 name) (an0 an1 n0 n1 text) (k skey))
+   (defstrand init 2 (bn0 bn0) (bn1 bn1) (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+   (fn-of (b ((privk bn0) an1)))
+   (decl foo ((n0 n1) (0 1)) ((k k k n0) (0 0) (0 0) (0 1)))
+)
diff --git a/tst/fnof_test.tst b/tst/fnof_test.tst
new file mode 100644
--- /dev/null
+++ b/tst/fnof_test.tst
@@ -0,0 +1,227 @@
+(herald "Function constraint test protocol"
+  (comment "Skeletons 2, 4, and 7 should have no shapes."))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from fnof_test.scm")
+
+(defprotocol fnoftest basic
+  (defrole init
+    (vars (an0 an1 n0 n1 text) (k skey))
+    (trace (send (cat n0 (enc an0 an1 n0 n1 k))) (recv n1))
+    (non-orig k)
+    (uniq-orig n0 n1)))
+
+(defskeleton fnoftest
+  (vars (an0 an1 n0 n1 text) (k skey))
+  (defstrand init 2 (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+  (non-orig k)
+  (uniq-orig n0 n1)
+  (traces ((send (cat n0 (enc an0 an1 n0 n1 k))) (recv n1)))
+  (label 0)
+  (unrealized (0 1))
+  (origs (n0 (0 0)) (n1 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton fnoftest
+  (vars (an0 an1 n0 text) (k skey))
+  (defstrand init 2 (an0 an0) (an1 an1) (n0 n0) (n1 n0) (k k))
+  (non-orig k)
+  (uniq-orig n0)
+  (operation nonce-test (displaced 1 0 init 1) n1 (0 1)
+    (enc an0 an1 n0 n1 k))
+  (traces ((send (cat n0 (enc an0 an1 n0 n0 k))) (recv n0)))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((an0 an0) (an1 an1) (n0 n0) (n1 n0) (k k))))
+  (origs (n0 (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol fnoftest basic
+  (defrole init
+    (vars (an0 an1 n0 n1 text) (k skey))
+    (trace (send (cat n0 (enc an0 an1 n0 n1 k))) (recv n1))
+    (non-orig k)
+    (uniq-orig n0 n1)))
+
+(defskeleton fnoftest
+  (vars (an0 an1 n0 n1 text) (k skey))
+  (defstrand init 2 (an0 an0) (an1 an1) (n0 n0) (n1 n1) (k k))
+  (fn-of (a (an0 n0) (an1 n1)))
+  (neq (an0 an1))
+  (non-orig k)
+  (uniq-orig n0 n1)
+  (traces ((send (cat n0 (enc an0 an1 n0 n1 k))) (recv n1)))
+  (label 2)
+  (unrealized (0 1))
+  (origs (n0 (0 0)) (n1 (0 0)))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol fnoftest basic
+  (defrole init
+    (vars (an0 an1 n0 n1 text) (k skey))
+    (trace (send (cat n0 (enc an0 an1 n0 n1 k))) (recv n1))
+    (non-orig k)
+    (uniq-orig n0 n1)))
+
+(defskeleton fnoftest
+  (vars (an0 an1 n1 text) (k skey))
+  (defstrand init 2 (an0 an0) (an1 an1) (n0 n1) (n1 n1) (k k))
+  (fn-of (a (an0 n1) (an1 n1)))
+  (non-orig k)
+  (uniq-orig n1)
+  (traces ((send (cat n1 (enc an0 an1 n1 n1 k))) (recv n1)))
+  (label 3)
+  (unrealized)
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton fnoftest
+  (vars (an1 n1 text) (k skey))
+  (defstrand init 2 (an0 an1) (an1 an1) (n0 n1) (n1 n1) (k k))
+  (fn-of (a (an1 n1)))
+  (non-orig k)
+  (uniq-orig n1)
+  (traces ((send (cat n1 (enc an1 an1 n1 n1 k))) (recv n1)))
+  (label 4)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((an1 an1) (n1 n1) (k k))))
+  (origs (n1 (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol fnoftest basic
+  (defrole init
+    (vars (an0 an1 n0 n1 text) (k skey))
+    (trace (send (cat n0 (enc an0 an1 n0 n1 k))) (recv n1))
+    (non-orig k)
+    (uniq-orig n0 n1)))
+
+(defskeleton fnoftest
+  (vars (an0 an1 n1 text) (k skey))
+  (defstrand init 2 (an0 an0) (an1 an1) (n0 n1) (n1 n1) (k k))
+  (fn-of (a (an0 n1) (an1 n1)))
+  (neq (an0 an1))
+  (non-orig k)
+  (uniq-orig n1)
+  (traces ((send (cat n1 (enc an0 an1 n1 n1 k))) (recv n1)))
+  (label 5)
+  (unrealized)
+  (comment "Input cannot be made into a skeleton--nothing to do"))
+
+(defprotocol fnoftest2 basic
+  (defrole init
+    (vars (bn0 bn1 name) (an0 an1 n0 n1 text) (k skey))
+    (trace (send (cat n0 (enc bn0 bn1 an0 an1 n0 n1 k))) (recv n1))
+    (non-orig k)
+    (uniq-orig n0 n1)
+    (fn-of (a (an0 n0) (an1 n1)) (b ((pubk bn0) an0)))))
+
+(defskeleton fnoftest2
+  (vars (an0 an1 n0 n1 text) (bn0 bn1 name) (k skey))
+  (defstrand init 2 (an0 an0) (an1 an1) (n0 n0) (n1 n1) (bn0 bn0)
+    (bn1 bn1) (k k))
+  (fn-of (a (an0 n0) (an1 n1)) (b ((pubk bn1) an1) ((pubk bn0) an0)))
+  (non-orig k)
+  (uniq-orig n0 n1)
+  (traces ((send (cat n0 (enc bn0 bn1 an0 an1 n0 n1 k))) (recv n1)))
+  (label 6)
+  (unrealized (0 1))
+  (origs (n0 (0 0)) (n1 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton fnoftest2
+  (vars (an1 n0 text) (bn1 name) (k skey))
+  (defstrand init 2 (an0 an1) (an1 an1) (n0 n0) (n1 n0) (bn0 bn1)
+    (bn1 bn1) (k k))
+  (fn-of (a (an1 n0)) (b ((pubk bn1) an1)))
+  (non-orig k)
+  (uniq-orig n0)
+  (operation nonce-test (displaced 1 0 init 1) n1 (0 1)
+    (enc bn0 bn1 an0 an1 n0 n1 k))
+  (traces ((send (cat n0 (enc bn1 bn1 an1 an1 n0 n0 k))) (recv n0)))
+  (label 7)
+  (parent 6)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((bn0 bn1) (bn1 bn1) (an0 an1) (an1 an1) (n0 n0) (n1 n0) (k k))))
+  (origs (n0 (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol fnoftest2 basic
+  (defrole init
+    (vars (bn0 bn1 name) (an0 an1 n0 n1 text) (k skey))
+    (trace (send (cat n0 (enc bn0 bn1 an0 an1 n0 n1 k))) (recv n1))
+    (non-orig k)
+    (uniq-orig n0 n1)
+    (fn-of (a (an0 n0) (an1 n1)) (b ((pubk bn0) an0)))))
+
+(defskeleton fnoftest2
+  (vars (an0 an1 n0 n1 text) (bn0 bn1 name) (k skey))
+  (defstrand init 2 (an0 an0) (an1 an1) (n0 n0) (n1 n1) (bn0 bn0)
+    (bn1 bn1) (k k))
+  (decl foo ((n0 n1) (0 1)) ((k k k n0) (0 0) (0 0) (0 1)))
+  (fn-of (a (an0 n0) (an1 n1)) (b ((pubk bn0) an0))
+    (c ((pubk bn1) an1)))
+  (non-orig k)
+  (uniq-orig n0 n1)
+  (traces ((send (cat n0 (enc bn0 bn1 an0 an1 n0 n1 k))) (recv n1)))
+  (label 8)
+  (unrealized (0 1))
+  (origs (n0 (0 0)) (n1 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton fnoftest2
+  (vars (an1 n0 text) (bn0 bn1 name) (k skey))
+  (defstrand init 2 (an0 an1) (an1 an1) (n0 n0) (n1 n0) (bn0 bn0)
+    (bn1 bn1) (k k))
+  (decl foo ((n0 n0) (0 1)) ((k k k n0) (0 0) (0 0) (0 1)))
+  (fn-of (a (an1 n0)) (b ((pubk bn0) an1)) (c ((pubk bn1) an1)))
+  (non-orig k)
+  (uniq-orig n0)
+  (operation nonce-test (displaced 1 0 init 1) n1 (0 1)
+    (enc bn0 bn1 an0 an1 n0 n1 k))
+  (traces ((send (cat n0 (enc bn0 bn1 an1 an1 n0 n0 k))) (recv n0)))
+  (label 9)
+  (parent 8)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((bn0 bn0) (bn1 bn1) (an0 an1) (an1 an1) (n0 n0) (n1 n0) (k k))))
+  (origs (n0 (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol fnoftest2 basic
+  (defrole init
+    (vars (bn0 bn1 name) (an0 an1 n0 n1 text) (k skey))
+    (trace (send (cat n0 (enc bn0 bn1 an0 an1 n0 n1 k))) (recv n1))
+    (non-orig k)
+    (uniq-orig n0 n1)
+    (fn-of (a (an0 n0) (an1 n1)) (b ((pubk bn0) an0)))))
+
+(defskeleton fnoftest2
+  (vars (an0 an1 n0 n1 text) (bn0 bn1 name) (k skey))
+  (defstrand init 2 (an0 an0) (an1 an1) (n0 n0) (n1 n1) (bn0 bn0)
+    (bn1 bn1) (k k))
+  (decl foo ((n0 n1) (0 1)) ((k k k n0) (0 0) (0 0) (0 1)))
+  (fn-of (a (an0 n0) (an1 n1)) (b ((privk bn0) an1) ((pubk bn0) an0)))
+  (non-orig k)
+  (uniq-orig n0 n1)
+  (traces ((send (cat n0 (enc bn0 bn1 an0 an1 n0 n1 k))) (recv n1)))
+  (label 10)
+  (unrealized (0 1))
+  (origs (n0 (0 0)) (n1 (0 0)))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
diff --git a/tst/fnof_woolam.scm b/tst/fnof_woolam.scm
new file mode 100644
--- /dev/null
+++ b/tst/fnof_woolam.scm
@@ -0,0 +1,78 @@
+(herald "Woo-Lam Protocol, using fnof to emulate ltk function")
+
+(defprotocol woolam basic
+  (defrole init (vars (a s name) (n text) (ltkas skey))
+    (trace
+     (init s)
+     (send a)
+     (recv n)
+     (send (enc n ltkas)))
+    (non-orig ltkas)
+    (fn-of ("ltk" (ltkas (cat a s))))
+    (fn-of ("ltk-inv" ((cat a s) ltkas)))
+ )
+  (defrole resp (vars (a s b name) (n text) (ltkas ltkbs skey))
+    (trace
+     (init (cat b s))
+     (recv a)
+     (send n)
+     (recv (enc n ltkas))
+     (send (enc a (enc n ltkas) ltkbs))
+     (recv (enc a n ltkbs)))
+    (non-orig ltkbs)
+    (uniq-orig n)
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))
+    (fn-of ("ltk-inv" ((cat a s) ltkas) ((cat b s) ltkbs)))
+ )
+  (defrole serv (vars (a s b name) (n text) (ltkbs ltkas skey))
+    (trace
+     (init (cat b s))
+     (recv (enc a (enc n ltkas) ltkbs))
+     (send (enc a n ltkbs)))
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))
+    (fn-of ("ltk-inv" ((cat a s) ltkas) ((cat b s) ltkbs)))
+ )
+)
+
+(defskeleton woolam (vars (n text) (a s name) (ltkas skey))
+  (defstrand resp 5 (a a) (s s) (ltkas ltkas))
+  (non-orig ltkas))
+
+;;;  In this version, fn-of is only used for the "forward" direction
+;;; of the ltk function.  In other words, if y = ltk(a,b) and z =
+;;; ltk(a,b) then y = z.  But if y = ltk(a,b) and z = ltk(c,d) it is
+;;; not necessarily the case that a = b and c = d.
+(defprotocol woolam2 basic
+  (defrole init (vars (a s name) (n text) (ltkas skey))
+    (trace
+     (init s)
+     (send a)
+     (recv n)
+     (send (enc n ltkas)))
+    (non-orig ltkas)
+    (fn-of ("ltk" (ltkas (cat a s))))
+ )
+  (defrole resp (vars (a s b name) (n text) (ltkas ltkbs skey))
+    (trace
+     (init (cat b s))
+     (recv a)
+     (send n)
+     (recv (enc n ltkas))
+     (send (enc a (enc n ltkas) ltkbs))
+     (recv (enc a n ltkbs)))
+    (non-orig ltkbs)
+    (uniq-orig n)
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))
+ )
+  (defrole serv (vars (a s b name) (n text) (ltkbs ltkas skey))
+    (trace
+     (init (cat b s))
+     (recv (enc a (enc n ltkas) ltkbs))
+     (send (enc a n ltkbs)))
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))
+ )
+)
+
+(defskeleton woolam2 (vars (n text) (ltkas skey) (a s name))
+  (defstrand resp 5 (a a) (s s) (ltkas ltkas))
+  (non-orig ltkas))
diff --git a/tst/fnof_woolam.tst b/tst/fnof_woolam.tst
new file mode 100644
--- /dev/null
+++ b/tst/fnof_woolam.tst
@@ -0,0 +1,119 @@
+(herald "Woo-Lam Protocol, using fnof to emulate ltk function")
+
+(comment "CPSA 3.2.2")
+(comment "All input read from fnof_woolam.scm")
+
+(defprotocol woolam basic
+  (defrole init
+    (vars (a s name) (n text) (ltkas skey))
+    (trace (init s) (send a) (recv n) (send (enc n ltkas)))
+    (non-orig ltkas)
+    (fn-of ("ltk" (ltkas (cat a s))) ("ltk-inv" ((cat a s) ltkas))))
+  (defrole resp
+    (vars (a s b name) (n text) (ltkas ltkbs skey))
+    (trace (init (cat b s)) (recv a) (send n) (recv (enc n ltkas))
+      (send (enc a (enc n ltkas) ltkbs)) (recv (enc a n ltkbs)))
+    (non-orig ltkbs)
+    (uniq-orig n)
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)))
+      ("ltk-inv" ((cat a s) ltkas) ((cat b s) ltkbs))))
+  (defrole serv
+    (vars (a s b name) (n text) (ltkbs ltkas skey))
+    (trace (init (cat b s)) (recv (enc a (enc n ltkas) ltkbs))
+      (send (enc a n ltkbs)))
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)))
+      ("ltk-inv" ((cat a s) ltkas) ((cat b s) ltkbs)))))
+
+(defskeleton woolam
+  (vars (n text) (a s b name) (ltkas ltkbs skey))
+  (defstrand resp 5 (n n) (a a) (s s) (b b) (ltkas ltkas) (ltkbs ltkbs))
+  (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)))
+    ("ltk-inv" ((cat a s) ltkas) ((cat b s) ltkbs)))
+  (non-orig ltkas ltkbs)
+  (uniq-orig n)
+  (traces
+    ((init (cat b s)) (recv a) (send n) (recv (enc n ltkas))
+      (send (enc a (enc n ltkas) ltkbs))))
+  (label 0)
+  (unrealized (0 3))
+  (origs (n (0 2)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton woolam
+  (vars (n text) (a s b name) (ltkas ltkbs skey))
+  (defstrand resp 5 (n n) (a a) (s s) (b b) (ltkas ltkas) (ltkbs ltkbs))
+  (defstrand init 4 (n n) (a a) (s s) (ltkas ltkas))
+  (precedes ((0 2) (1 2)) ((1 3) (0 3)))
+  (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)))
+    ("ltk-inv" ((cat a s) ltkas) ((cat b s) ltkbs)))
+  (non-orig ltkas ltkbs)
+  (uniq-orig n)
+  (operation encryption-test (added-strand init 4) (enc n ltkas) (0 3))
+  (traces
+    ((init (cat b s)) (recv a) (send n) (recv (enc n ltkas))
+      (send (enc a (enc n ltkas) ltkbs)))
+    ((init s) (send a) (recv n) (send (enc n ltkas))))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (s s) (ltkas ltkas) (b b) (n n) (ltkbs ltkbs))))
+  (origs (n (0 2))))
+
+(comment "Nothing left to do")
+
+(defprotocol woolam2 basic
+  (defrole init
+    (vars (a s name) (n text) (ltkas skey))
+    (trace (init s) (send a) (recv n) (send (enc n ltkas)))
+    (non-orig ltkas)
+    (fn-of ("ltk" (ltkas (cat a s)))))
+  (defrole resp
+    (vars (a s b name) (n text) (ltkas ltkbs skey))
+    (trace (init (cat b s)) (recv a) (send n) (recv (enc n ltkas))
+      (send (enc a (enc n ltkas) ltkbs)) (recv (enc a n ltkbs)))
+    (non-orig ltkbs)
+    (uniq-orig n)
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s)))))
+  (defrole serv
+    (vars (a s b name) (n text) (ltkbs ltkas skey))
+    (trace (init (cat b s)) (recv (enc a (enc n ltkas) ltkbs))
+      (send (enc a n ltkbs)))
+    (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))))
+
+(defskeleton woolam2
+  (vars (n text) (a s b name) (ltkas ltkbs skey))
+  (defstrand resp 5 (n n) (a a) (s s) (b b) (ltkas ltkas) (ltkbs ltkbs))
+  (fn-of ("ltk" (ltkas (cat a s)) (ltkbs (cat b s))))
+  (non-orig ltkas ltkbs)
+  (uniq-orig n)
+  (traces
+    ((init (cat b s)) (recv a) (send n) (recv (enc n ltkas))
+      (send (enc a (enc n ltkas) ltkbs))))
+  (label 2)
+  (unrealized (0 3))
+  (origs (n (0 2)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton woolam2
+  (vars (n text) (a s b a-0 s-0 name) (ltkas ltkbs skey))
+  (defstrand resp 5 (n n) (a a) (s s) (b b) (ltkas ltkas) (ltkbs ltkbs))
+  (defstrand init 4 (n n) (a a-0) (s s-0) (ltkas ltkas))
+  (precedes ((0 2) (1 2)) ((1 3) (0 3)))
+  (fn-of
+    ("ltk" (ltkas (cat a-0 s-0)) (ltkas (cat a s)) (ltkbs (cat b s))))
+  (non-orig ltkas ltkbs)
+  (uniq-orig n)
+  (operation encryption-test (added-strand init 4) (enc n ltkas) (0 3))
+  (traces
+    ((init (cat b s)) (recv a) (send n) (recv (enc n ltkas))
+      (send (enc a (enc n ltkas) ltkbs)))
+    ((init s-0) (send a-0) (recv n) (send (enc n ltkas))))
+  (label 3)
+  (parent 2)
+  (unrealized)
+  (shape)
+  (maps ((0) ((ltkas ltkas) (a a) (s s) (b b) (n n) (ltkbs ltkbs))))
+  (origs (n (0 2))))
+
+(comment "Nothing left to do")
diff --git a/tst/fnof_yahalom.scm b/tst/fnof_yahalom.scm
new file mode 100644
--- /dev/null
+++ b/tst/fnof_yahalom.scm
@@ -0,0 +1,135 @@
+(herald "Yahalom Protocol with Forwarding Removed, using fnof to emulate ltk function"
+   (bound 12))
+
+(defprotocol yahalom basic
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init (c ltkac) to force c, ltkac to be present in the
+    ; trace.
+    (trace (init (cat c ltkac))
+           (send (cat a n-a))
+	   (recv (enc b k n-a n-b ltkac))
+	   (send (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+    (fn-of ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  )
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init (c ltkac) to force c, ltkac to be present in the
+    ; trace.
+    (trace (init (cat c ltkac))
+           (recv (cat a n-a))
+	   (send (cat b (enc a n-a n-b ltkbc)))
+	   (recv (enc a k ltkbc))
+	   (recv (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+    (fn-of ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  )
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init c to force c to be present in the trace.
+    (trace (init c)
+           (recv (cat b (enc a n-a n-b ltkbc)))
+	   (send (enc b k n-a n-b ltkac))
+	   (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+    (fn-of ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  )
+)
+
+(defskeleton yahalom
+  (vars (a b c name) (n-b text) (ltkac ltkbc skey))
+  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc))
+  (non-orig ltkbc ltkac)
+  (uniq-orig n-b)
+)
+
+;;; Ensure encryption key remains secret.
+(defskeleton yahalom
+  (vars (a b c name) (n-b text) (ltkac ltkbc k skey))
+  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b) (k k) (ltkac ltkac) (ltkbc ltkbc))
+  (deflistener k)
+  (non-orig ltkbc ltkac)
+  (uniq-orig n-b)
+)
+
+;;;  In this version, fn-of is only used for the "forward" direction
+;;; of the ltk function.  In other words, if y = ltk(a,b) and z =
+;;; ltk(a,b) then y = z.  But if y = ltk(a,b) and z = ltk(c,d) it is
+;;; not necessarily the case that if y = z then a = b and c = d.
+(defprotocol yahalom2 basic
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init (c ltkac) to force c, ltkac to be present in the
+    ; trace.
+    (trace (init (cat c ltkac))
+           (send (cat a n-a))
+	   (recv (enc b k n-a n-b ltkac))
+	   (send (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init (c ltkac) to force c, ltkac to be present in the
+    ; trace.
+    (trace (init (cat c ltkac))
+           (recv (cat a n-a))
+	   (send (cat b (enc a n-a n-b ltkbc)))
+	   (recv (enc a k ltkbc))
+	   (recv (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    ; Including init c to force c to be present in the trace.
+    (trace (init c)
+           (recv (cat b (enc a n-a n-b ltkbc)))
+	   (send (enc b k n-a n-b ltkac))
+	   (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+)
+
+(defprotocol yahalom2 basic
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (send (cat a n-a (hash ltkbc)))
+	   (recv (enc b k n-a n-b ltkac))
+	   (send (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat a n-a))
+	   (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+	   (recv (enc a k ltkbc))
+	   (recv (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat b (enc a n-a n-b ltkbc)))
+	   (send (cat (hash c) (enc b k n-a n-b ltkac)))
+	   (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  )
+)
+
+(defskeleton yahalom2
+  (vars (a b c name) (n-b text) (ltkac ltkbc skey))
+  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc))
+  (non-orig ltkbc ltkac)
+  (uniq-orig n-b)
+)
+
+;;; Ensure encryption key remains secret.
+(defskeleton yahalom2
+  (vars (a b c name) (n-b text) (ltkac ltkbc k skey))
+  (defstrand resp 4 (a a) (b b) (c c) (n-b n-b) (k k) (ltkac ltkac) (ltkbc ltkbc))
+  (deflistener k)
+  (non-orig ltkbc ltkac)
+  (uniq-orig n-b)
+)
diff --git a/tst/fnof_yahalom.tst b/tst/fnof_yahalom.tst
new file mode 100644
--- /dev/null
+++ b/tst/fnof_yahalom.tst
@@ -0,0 +1,646 @@
+(herald
+  "Yahalom Protocol with Forwarding Removed, using fnof to emulate ltk function"
+  (bound 12))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from fnof_yahalom.scm")
+
+(defprotocol yahalom basic
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (ltkac k skey))
+    (trace (init (cat c ltkac)) (send (cat a n-a))
+      (recv (enc b k n-a n-b ltkac)) (send (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c))) ("ltk-inv" ((cat a c) ltkac))))
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc))
+      (recv (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))
+      ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc))))
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (init c) (recv (cat b (enc a n-a n-b ltkbc)))
+      (send (enc b k n-a n-b ltkac)) (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))
+      ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))))
+
+(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))
+    ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b)
+  (traces
+    ((init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc))))
+  (label 0)
+  (unrealized (0 3))
+  (origs (n-b (0 2)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 4 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b)
+    (ltkac ltkac) (ltkbc ltkbc) (k k))
+  (precedes ((1 3) (0 3)))
+  (fn-of ("ltk" (ltkbc (cat b c)) (ltkac (cat a c)))
+    ("ltk-inv" ((cat b c) ltkbc) ((cat a c) ltkac)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand serv 4) (enc a k ltkbc)
+    (0 3))
+  (traces
+    ((init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc)))
+    ((init c) (recv (cat b (enc a n-a-0 n-b-0 ltkbc)))
+      (send (enc b k n-a-0 n-b-0 ltkac)) (send (enc a k ltkbc))))
+  (label 1)
+  (parent 0)
+  (unrealized (1 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 4 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (precedes ((0 2) (1 1)) ((1 3) (0 3)))
+  (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))
+    ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (displaced 2 0 resp 3)
+    (enc a n-a-0 n-b-0 ltkbc) (1 1))
+  (traces
+    ((init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc)))
+    ((init c) (recv (cat b (enc a n-a n-b ltkbc)))
+      (send (enc b k n-a n-b ltkac)) (send (enc a k ltkbc))))
+  (label 2)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (n-a n-a)
+        (k k))))
+  (origs (k (1 2)) (n-b (0 2))))
+
+(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 4 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b)
+    (ltkac ltkac) (ltkbc ltkbc) (k k))
+  (defstrand resp 3 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c)
+    (ltkac ltkac) (ltkbc ltkbc))
+  (precedes ((1 3) (0 3)) ((2 2) (1 1)))
+  (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))
+    ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand resp 3)
+    (enc a n-a-0 n-b-0 ltkbc) (1 1))
+  (traces
+    ((init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc)))
+    ((init c) (recv (cat b (enc a n-a-0 n-b-0 ltkbc)))
+      (send (enc b k n-a-0 n-b-0 ltkac)) (send (enc a k ltkbc)))
+    ((init (cat c ltkac)) (recv (cat a n-a-0))
+      (send (cat b (enc a n-a-0 n-b-0 ltkbc)))))
+  (label 3)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (n-a n-a)
+        (k k))))
+  (origs (k (1 2)) (n-b (0 2))))
+
+(comment "Nothing left to do")
+
+(defprotocol yahalom basic
+  (defrole init
+    (vars (a b c name) (n-a n-b text) (ltkac k skey))
+    (trace (init (cat c ltkac)) (send (cat a n-a))
+      (recv (enc b k n-a n-b ltkac)) (send (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c))) ("ltk-inv" ((cat a c) ltkac))))
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc))
+      (recv (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))
+      ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc))))
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (init c) (recv (cat b (enc a n-a n-b ltkbc)))
+      (send (enc b k n-a n-b ltkac)) (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))
+      ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))))
+
+(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))
+    ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b)
+  (traces
+    ((init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc)))
+    ((recv k) (send k)))
+  (label 4)
+  (unrealized (0 3))
+  (origs (n-b (0 2)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 4 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b)
+    (ltkac ltkac) (ltkbc ltkbc) (k k))
+  (precedes ((2 2) (1 0)) ((2 3) (0 3)))
+  (fn-of ("ltk" (ltkbc (cat b c)) (ltkac (cat a c)))
+    ("ltk-inv" ((cat b c) ltkbc) ((cat a c) ltkac)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand serv 4) (enc a k ltkbc)
+    (0 3))
+  (traces
+    ((init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc)))
+    ((recv k) (send k))
+    ((init c) (recv (cat b (enc a n-a-0 n-b-0 ltkbc)))
+      (send (enc b k n-a-0 n-b-0 ltkac)) (send (enc a k ltkbc))))
+  (label 5)
+  (parent 4)
+  (unrealized (1 0) (2 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 4 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (precedes ((0 2) (2 1)) ((2 2) (1 0)) ((2 3) (0 3)))
+  (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))
+    ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (displaced 3 0 resp 3)
+    (enc a n-a-0 n-b-0 ltkbc) (2 1))
+  (traces
+    ((init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc)))
+    ((recv k) (send k))
+    ((init c) (recv (cat b (enc a n-a n-b ltkbc)))
+      (send (enc b k n-a n-b ltkac)) (send (enc a k ltkbc))))
+  (label 6)
+  (parent 5)
+  (unrealized (1 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 4 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b)
+    (ltkac ltkac) (ltkbc ltkbc) (k k))
+  (defstrand resp 3 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c)
+    (ltkac ltkac) (ltkbc ltkbc))
+  (precedes ((2 2) (1 0)) ((2 3) (0 3)) ((3 2) (2 1)))
+  (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))
+    ("ltk-inv" ((cat a c) ltkac) ((cat b c) ltkbc)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand resp 3)
+    (enc a n-a-0 n-b-0 ltkbc) (2 1))
+  (traces
+    ((init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc)))
+    ((recv k) (send k))
+    ((init c) (recv (cat b (enc a n-a-0 n-b-0 ltkbc)))
+      (send (enc b k n-a-0 n-b-0 ltkac)) (send (enc a k ltkbc)))
+    ((init (cat c ltkac)) (recv (cat a n-a-0))
+      (send (cat b (enc a n-a-0 n-b-0 ltkbc)))))
+  (label 7)
+  (parent 5)
+  (unrealized (1 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton yahalom
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 4 (n-a n-a) (n-b n-b) (c c) (a a) (b b) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (precedes ((0 2) (2 1)) ((2 3) (0 3)) ((2 3) (1 0)))
+  (fn-of ("ltk" (ltkbc (cat b c)) (ltkac (cat a c)))
+    ("ltk-inv" ((cat b c) ltkbc) ((cat a c) ltkac)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation nonce-test (displaced 3 2 serv 4) k (1 0)
+    (enc b k n-a n-b ltkac))
+  (traces
+    ((init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc)))
+    ((recv k) (send k))
+    ((init c) (recv (cat b (enc a n-a n-b ltkbc)))
+      (send (enc b k n-a n-b ltkac)) (send (enc a k ltkbc))))
+  (label 8)
+  (parent 6)
+  (unrealized (1 0))
+  (comment "empty cohort"))
+
+(defskeleton yahalom
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 4 (n-a n-a-0) (n-b n-b-0) (c c) (a a) (b b)
+    (ltkac ltkac) (ltkbc ltkbc) (k k))
+  (defstrand resp 3 (n-a n-a-0) (n-b n-b-0) (b b) (a a) (c c)
+    (ltkac ltkac) (ltkbc ltkbc))
+  (precedes ((2 3) (0 3)) ((2 3) (1 0)) ((3 2) (2 1)))
+  (fn-of ("ltk" (ltkbc (cat b c)) (ltkac (cat a c)))
+    ("ltk-inv" ((cat b c) ltkbc) ((cat a c) ltkac)))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation nonce-test (displaced 4 2 serv 4) k (1 0)
+    (enc b k n-a-0 n-b-0 ltkac))
+  (traces
+    ((init (cat c ltkac)) (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc))) (recv (enc a k ltkbc)))
+    ((recv k) (send k))
+    ((init c) (recv (cat b (enc a n-a-0 n-b-0 ltkbc)))
+      (send (enc b k n-a-0 n-b-0 ltkac)) (send (enc a k ltkbc)))
+    ((init (cat c ltkac)) (recv (cat a n-a-0))
+      (send (cat b (enc a n-a-0 n-b-0 ltkbc)))))
+  (label 9)
+  (parent 7)
+  (unrealized (1 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol yahalom2 basic
+  (defrole init
+    (vars (a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (send (cat a n-a (hash ltkbc)))
+      (recv (enc b k n-a n-b ltkac)) (send (enc n-b k))))
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))))
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat b (enc a n-a n-b ltkbc)))
+      (send (cat (hash c) (enc b k n-a n-b ltkac)))
+      (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))))
+
+(defskeleton yahalom2
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b)
+  (traces
+    ((recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k))))
+  (label 10)
+  (unrealized (0 2) (0 3))
+  (origs (n-b (0 1)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 name)
+    (ltkac ltkbc k ltkac-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (precedes ((1 2) (0 2)))
+  (fn-of
+    ("ltk" (ltkac-0 (cat a c-0)) (ltkbc (cat b-0 c-0)) (ltkac (cat a c))
+      (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand serv 3) (enc a k ltkbc)
+    (0 2))
+  (traces
+    ((recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k)))
+    ((recv (cat b-0 (enc a n-a-0 n-b-0 ltkbc)))
+      (send (cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0)))
+      (send (enc a k ltkbc))))
+  (label 11)
+  (parent 10)
+  (unrealized (0 3) (1 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton yahalom2
+  (vars (n-b n-a text) (a b c c-0 b-0 name)
+    (ltkac ltkbc k ltkac-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (precedes ((0 1) (1 0)) ((1 2) (0 2)))
+  (fn-of
+    ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)) (ltkac-0 (cat a c-0))
+      (ltkbc (cat b-0 c-0))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc a n-a-0 n-b-0 ltkbc) (1 0))
+  (traces
+    ((recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k)))
+    ((recv (cat b-0 (enc a n-a n-b ltkbc)))
+      (send (cat (hash c-0) (enc b-0 k n-a n-b ltkac-0)))
+      (send (enc a k ltkbc))))
+  (label 12)
+  (parent 11)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (n-a n-a)
+        (k k))))
+  (origs (k (1 1)) (n-b (0 1))))
+
+(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 b-1 c-1 name)
+    (ltkac ltkbc k ltkac-0 ltkac-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1)
+    (ltkac ltkac-1) (ltkbc ltkbc))
+  (precedes ((1 2) (0 2)) ((2 1) (1 0)))
+  (fn-of
+    ("ltk" (ltkac-1 (cat a c-1)) (ltkbc (cat b-1 c-1))
+      (ltkac-0 (cat a c-0)) (ltkbc (cat b-0 c-0)) (ltkac (cat a c))
+      (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand resp 2)
+    (enc a n-a-0 n-b-0 ltkbc) (1 0))
+  (traces
+    ((recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k)))
+    ((recv (cat b-0 (enc a n-a-0 n-b-0 ltkbc)))
+      (send (cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0)))
+      (send (enc a k ltkbc)))
+    ((recv (cat a n-a-0))
+      (send (cat b-1 (enc a n-a-0 n-b-0 ltkbc) (hash c-1 ltkac-1)))))
+  (label 13)
+  (parent 11)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 b-1 c-1 c-2 b-2 name)
+    (ltkac ltkbc k ltkac-0 ltkac-1 ltkac-2 k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1)
+    (ltkac ltkac-1) (ltkbc ltkbc))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c-2) (a a) (b b-2)
+    (ltkac ltkac-2) (ltkbc ltkbc) (k k-0))
+  (precedes ((0 1) (3 0)) ((1 2) (0 2)) ((2 1) (1 0)) ((3 1) (0 3)))
+  (fn-of
+    ("ltk" (ltkac-2 (cat a c-2)) (ltkbc (cat b-2 c-2))
+      (ltkac-1 (cat a c-1)) (ltkbc (cat b-1 c-1)) (ltkac-0 (cat a c-0))
+      (ltkbc (cat b-0 c-0)) (ltkac (cat a c)) (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-strand serv 2) n-b (0 3)
+    (enc a n-a n-b ltkbc))
+  (traces
+    ((recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k)))
+    ((recv (cat b-0 (enc a n-a-0 n-b-0 ltkbc)))
+      (send (cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0)))
+      (send (enc a k ltkbc)))
+    ((recv (cat a n-a-0))
+      (send (cat b-1 (enc a n-a-0 n-b-0 ltkbc) (hash c-1 ltkac-1))))
+    ((recv (cat b-2 (enc a n-a n-b ltkbc)))
+      (send (cat (hash c-2) (enc b-2 k-0 n-a n-b ltkac-2)))))
+  (label 14)
+  (parent 13)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (n-a n-a)
+        (k k))))
+  (origs (k-0 (3 1)) (k (1 1)) (n-b (0 1))))
+
+(comment "Nothing left to do")
+
+(defprotocol yahalom2 basic
+  (defrole init
+    (vars (a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (send (cat a n-a (hash ltkbc)))
+      (recv (enc b k n-a n-b ltkac)) (send (enc n-b k))))
+  (defrole resp
+    (vars (b a c name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k)))
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)))))
+  (defrole serv
+    (vars (c a b name) (n-a n-b text) (ltkac ltkbc k skey))
+    (trace (recv (cat b (enc a n-a n-b ltkbc)))
+      (send (cat (hash c) (enc b k n-a n-b ltkac)))
+      (send (enc a k ltkbc)))
+    (uniq-orig k)
+    (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))))
+
+(defskeleton yahalom2
+  (vars (n-b n-a text) (a b c name) (ltkac ltkbc k skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (fn-of ("ltk" (ltkac (cat a c)) (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b)
+  (traces
+    ((recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k))) ((recv k) (send k)))
+  (label 15)
+  (unrealized (0 2) (0 3))
+  (origs (n-b (0 1)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 name)
+    (ltkac ltkbc k ltkac-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (precedes ((2 1) (1 0)) ((2 2) (0 2)))
+  (fn-of
+    ("ltk" (ltkac-0 (cat a c-0)) (ltkbc (cat b-0 c-0)) (ltkac (cat a c))
+      (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand serv 3) (enc a k ltkbc)
+    (0 2))
+  (traces
+    ((recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k))) ((recv k) (send k))
+    ((recv (cat b-0 (enc a n-a-0 n-b-0 ltkbc)))
+      (send (cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0)))
+      (send (enc a k ltkbc))))
+  (label 16)
+  (parent 15)
+  (unrealized (0 3) (2 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton yahalom2
+  (vars (n-b n-a text) (a b c c-0 b-0 name)
+    (ltkac ltkbc k ltkac-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a) (n-b n-b) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (precedes ((0 1) (2 0)) ((2 1) (1 0)) ((2 2) (0 2)))
+  (fn-of
+    ("ltk" (ltkac (cat a c)) (ltkbc (cat b c)) (ltkac-0 (cat a c-0))
+      (ltkbc (cat b-0 c-0))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (displaced 3 0 resp 2)
+    (enc a n-a-0 n-b-0 ltkbc) (2 0))
+  (traces
+    ((recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k))) ((recv k) (send k))
+    ((recv (cat b-0 (enc a n-a n-b ltkbc)))
+      (send (cat (hash c-0) (enc b-0 k n-a n-b ltkac-0)))
+      (send (enc a k ltkbc))))
+  (label 17)
+  (parent 16)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (k k)
+        (n-a n-a))))
+  (origs (k (2 1)) (n-b (0 1))))
+
+(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 b-1 c-1 name)
+    (ltkac ltkbc k ltkac-0 ltkac-1 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1)
+    (ltkac ltkac-1) (ltkbc ltkbc))
+  (precedes ((2 1) (1 0)) ((2 2) (0 2)) ((3 1) (2 0)))
+  (fn-of
+    ("ltk" (ltkac-1 (cat a c-1)) (ltkbc (cat b-1 c-1))
+      (ltkac-0 (cat a c-0)) (ltkbc (cat b-0 c-0)) (ltkac (cat a c))
+      (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k)
+  (operation encryption-test (added-strand resp 2)
+    (enc a n-a-0 n-b-0 ltkbc) (2 0))
+  (traces
+    ((recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k))) ((recv k) (send k))
+    ((recv (cat b-0 (enc a n-a-0 n-b-0 ltkbc)))
+      (send (cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0)))
+      (send (enc a k ltkbc)))
+    ((recv (cat a n-a-0))
+      (send (cat b-1 (enc a n-a-0 n-b-0 ltkbc) (hash c-1 ltkac-1)))))
+  (label 18)
+  (parent 16)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton yahalom2
+  (vars (n-b n-a n-a-0 n-b-0 text) (a b c c-0 b-0 b-1 c-1 c-2 b-2 name)
+    (ltkac ltkbc k ltkac-0 ltkac-1 ltkac-2 k-0 skey))
+  (defstrand resp 4 (n-a n-a) (n-b n-b) (b b) (a a) (c c) (ltkac ltkac)
+    (ltkbc ltkbc) (k k))
+  (deflistener k)
+  (defstrand serv 3 (n-a n-a-0) (n-b n-b-0) (c c-0) (a a) (b b-0)
+    (ltkac ltkac-0) (ltkbc ltkbc) (k k))
+  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (b b-1) (a a) (c c-1)
+    (ltkac ltkac-1) (ltkbc ltkbc))
+  (defstrand serv 2 (n-a n-a) (n-b n-b) (c c-2) (a a) (b b-2)
+    (ltkac ltkac-2) (ltkbc ltkbc) (k k-0))
+  (precedes ((0 1) (4 0)) ((2 1) (1 0)) ((2 2) (0 2)) ((3 1) (2 0))
+    ((4 1) (0 3)))
+  (fn-of
+    ("ltk" (ltkac-2 (cat a c-2)) (ltkbc (cat b-2 c-2))
+      (ltkac-1 (cat a c-1)) (ltkbc (cat b-1 c-1)) (ltkac-0 (cat a c-0))
+      (ltkbc (cat b-0 c-0)) (ltkac (cat a c)) (ltkbc (cat b c))))
+  (non-orig ltkac ltkbc)
+  (uniq-orig n-b k k-0)
+  (operation nonce-test (added-strand serv 2) n-b (0 3)
+    (enc a n-a n-b ltkbc))
+  (traces
+    ((recv (cat a n-a))
+      (send (cat b (enc a n-a n-b ltkbc) (hash c ltkac)))
+      (recv (enc a k ltkbc)) (recv (enc n-b k))) ((recv k) (send k))
+    ((recv (cat b-0 (enc a n-a-0 n-b-0 ltkbc)))
+      (send (cat (hash c-0) (enc b-0 k n-a-0 n-b-0 ltkac-0)))
+      (send (enc a k ltkbc)))
+    ((recv (cat a n-a-0))
+      (send (cat b-1 (enc a n-a-0 n-b-0 ltkbc) (hash c-1 ltkac-1))))
+    ((recv (cat b-2 (enc a n-a n-b ltkbc)))
+      (send (cat (hash c-2) (enc b-2 k-0 n-a n-b ltkac-2)))))
+  (label 19)
+  (parent 18)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1)
+      ((a a) (b b) (c c) (n-b n-b) (ltkac ltkac) (ltkbc ltkbc) (k k)
+        (n-a n-a))))
+  (origs (k-0 (4 1)) (k (2 1)) (n-b (0 1))))
+
+(comment "Nothing left to do")
diff --git a/tst/fragile_pruning.scm b/tst/fragile_pruning.scm
deleted file mode 100644
--- a/tst/fragile_pruning.scm
+++ /dev/null
@@ -1,45 +0,0 @@
-;;; Illustrates how delicate pruning must be:
-;;; to find a shape we must allow 3 almost
-;;; identical instances of "adder", without
-;;; pruning them even though they are renamings of
-;;; each other.
-;;; This goes to show that pruning is not justified
-;;; in some cases even when the two strands are
-;;; isomorphic.  What is lost by pruning here is merely
-;;; the ability for a fresh variable of sort text to
-;;; unify with a different already-existing variable of
-;;; sort text without unifying the two existing ones.
-
-(defprotocol fragile_pruning basic
-  (defrole init (vars (k akey) (n n1 n2 n3 text))
-    (trace
-	(send (enc n k))
-      (recv (enc n n1 k))
-      (recv (enc n n2 k))
-      (recv (enc n n3 k))
-      (send (enc n n1 n2 n3 k))
-      (recv (enc n n1 n2 n3 n k))
-    )
-    (uniq-orig n)
-    (non-orig (invk k))
-  )
-  (defrole adder (vars (k akey) (n new text))
-    (trace
-      (recv (enc n k))
-      (send (enc n new k))
-    )
-    (uniq-orig new)
-  )
-  (defrole final (vars (k akey) (n n1 n2 n3 text))
-    (trace
-       (recv (enc n n1 n2 n3 k))
-       (send (enc n n1 n2 n3 n k))
-    )
-  )
-)
-
-(defskeleton fragile_pruning
-  (vars (k akey) (n n1 n2 n3  text))
-  (defstrand init 6 (k k) (n n) (n1 n1) (n2 n2) (n3 n3))
-  (uniq-orig n1 n2 n3)
-)
diff --git a/tst/fragile_pruning.tst b/tst/fragile_pruning.tst
deleted file mode 100644
--- a/tst/fragile_pruning.tst
+++ /dev/null
@@ -1,4859 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from fragile_pruning.scm")
-
-(defprotocol fragile_pruning basic
-  (defrole init
-    (vars (k akey) (n n1 n2 n3 text))
-    (trace (send (enc n k)) (recv (enc n n1 k)) (recv (enc n n2 k))
-      (recv (enc n n3 k)) (send (enc n n1 n2 n3 k))
-      (recv (enc n n1 n2 n3 n k)))
-    (non-orig (invk k))
-    (uniq-orig n))
-  (defrole adder
-    (vars (k akey) (n new text))
-    (trace (recv (enc n k)) (send (enc n new k)))
-    (uniq-orig new))
-  (defrole final
-    (vars (k akey) (n n1 n2 n3 text))
-    (trace (recv (enc n n1 n2 n3 k)) (send (enc n n1 n2 n3 n k)))))
-
-(defskeleton fragile_pruning
-  (vars (n n1 n2 n3 text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n2) (n3 n3) (k k))
-  (non-orig (invk k))
-  (uniq-orig n n1 n2 n3)
-  (traces
-    ((send (enc n k)) (recv (enc n n1 k)) (recv (enc n n2 k))
-      (recv (enc n n3 k)) (send (enc n n1 n2 n3 k))
-      (recv (enc n n1 n2 n3 n k))))
-  (label 0)
-  (unrealized (0 1) (0 2) (0 3) (0 5))
-  (origs (n (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n n1 n2 n3 new text) (k akey))
-  (defstrand init 6 (n n) (n1 n1) (n2 n2) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n n1 n2 n3 new)
-  (operation nonce-test (added-strand adder 2) n (0 1) (enc n k))
-  (traces
-    ((send (enc n k)) (recv (enc n n1 k)) (recv (enc n n2 k))
-      (recv (enc n n3 k)) (send (enc n n1 n2 n3 k))
-      (recv (enc n n1 n2 n3 n k)))
-    ((recv (enc n k)) (send (enc n new k))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1) (0 2) (0 3) (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n n2 n3 new text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 n2) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n n2 n3 new)
-  (operation nonce-test (contracted (n1 new)) n (0 1) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n n2 k))
-      (recv (enc n n3 k)) (send (enc n new n2 n3 k))
-      (recv (enc n new n2 n3 n k)))
-    ((recv (enc n k)) (send (enc n new k))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 2) (0 3) (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n n3 new text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n n3 new)
-  (operation nonce-test (contracted (n2 new)) n (0 2) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n n3 k)) (send (enc n new new n3 k))
-      (recv (enc n new new n3 n k)))
-    ((recv (enc n k)) (send (enc n new k))))
-  (label 3)
-  (parent 2)
-  (unrealized (0 3) (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n n2 n3 new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 n2) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig n n2 n3 new new-0)
-  (operation nonce-test (added-strand adder 2) n (0 2) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n n2 k))
-      (recv (enc n n3 k)) (send (enc n new n2 n3 k))
-      (recv (enc n new n2 n3 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 4)
-  (parent 2)
-  (unrealized (0 2) (0 3) (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n new)
-  (operation nonce-test (contracted (n3 new)) n (0 3) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k))))
-  (label 5)
-  (parent 3)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n n3 new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n n3 new new-0)
-  (operation nonce-test (added-strand adder 2) n (0 3) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n n3 k)) (send (enc n new new n3 k))
-      (recv (enc n new new n3 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 6)
-  (parent 3)
-  (unrealized (0 3) (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n n3 new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig n n3 new new-0)
-  (operation nonce-test (contracted (n2 new)) n (0 2) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n n3 k)) (send (enc n new new n3 k))
-      (recv (enc n new new n3 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 7)
-  (parent 4)
-  (unrealized (0 3) (0 5))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n n3 new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig n n3 new new-0)
-  (operation nonce-test (contracted (n2 new-0)) n (0 2) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n n3 k)) (send (enc n new new-0 n3 k))
-      (recv (enc n new new-0 n3 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 8)
-  (parent 4)
-  (unrealized (0 3) (0 5))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 9)
-  (parent 5)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 10)
-  (parent 5)
-  (unrealized (2 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (contracted (n3 new)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 11)
-  (parent 6)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (contracted (n3 new-0)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 12)
-  (parent 6)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (contracted (n3 new)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 13)
-  (parent 7)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (contracted (n3 new-0)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 14)
-  (parent 7)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n n3 new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n n3 new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n n3 k)) (send (enc n new new n3 k))
-      (recv (enc n new new n3 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 15)
-  (parent 7)
-  (unrealized (0 3) (0 5))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (contracted (n3 new)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 16)
-  (parent 8)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 2)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (contracted (n3 new-0)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 17)
-  (parent 8)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n n3 new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 n3) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n n3 new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n n3 k)) (send (enc n new new-0 n3 k))
-      (recv (enc n new new-0 n3 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 18)
-  (parent 8)
-  (unrealized (0 3) (0 5))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 5)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 19)
-  (parent 9)
-  (seen 21)
-  (unrealized (3 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 4) (2 0)) ((1 1) (0 1)) ((2 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new)
-  (operation nonce-test (displaced 3 0 init 5) n (2 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 20)
-  (parent 10)
-  (unrealized)
-  (shape)
-  (maps ((0) ((k k) (n n) (n1 new) (n2 new) (n3 new))))
-  (origs (n (0 0)) (new (1 1))))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((1 1) (2 0))
-    ((2 1) (0 5)) ((3 1) (2 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (added-strand adder 2) n (2 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 21)
-  (parent 10)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 3)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 22)
-  (parent 11)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 3)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 23)
-  (parent 11)
-  (unrealized (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 3)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 24)
-  (parent 12)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 3)) ((2 1) (3 0)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 25)
-  (parent 12)
-  (unrealized (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 26)
-  (parent 13)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 2)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 27)
-  (parent 13)
-  (unrealized (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 28)
-  (parent 14)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 2)) ((2 1) (3 0)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 29)
-  (parent 14)
-  (unrealized (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (contracted (n3 new)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 30)
-  (parent 15)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (contracted (n3 new-0)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 31)
-  (parent 15)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (contracted (n3 new-1)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 32)
-  (parent 15)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new-0 new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 33)
-  (parent 16)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 2)) ((2 1) (3 0)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new-0 new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k))))
-  (label 34)
-  (parent 16)
-  (unrealized (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new-0 new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 35)
-  (parent 17)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 2)) ((2 1) (3 0)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new new-0 new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k))))
-  (label 36)
-  (parent 17)
-  (unrealized (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (contracted (n3 new)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 37)
-  (parent 18)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (contracted (n3 new-0)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 38)
-  (parent 18)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 3)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (contracted (n3 new-1)) n (0 3) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-1 k)) (send (enc n new new-0 new-1 k))
-      (recv (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 39)
-  (parent 18)
-  (unrealized (0 5))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 4) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 5)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (displaced 4 0 init 5) n (3 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 40)
-  (parent 19)
-  (seen 20)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((1 1) (3 0)) ((2 1) (0 5)) ((3 1) (0 5)) ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (3 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 41)
-  (parent 19)
-  (unrealized (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((0 4) (2 0)) ((1 1) (0 1))
-    ((2 1) (0 5)) ((3 1) (2 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (displaced 4 0 init 5) n (2 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-0 k))))
-  (label 42)
-  (parent 21)
-  (seen 20)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 3)) ((3 1) (0 5)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 43)
-  (parent 22)
-  (seen 45)
-  (unrealized (4 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 3)) ((2 1) (3 0)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (displaced 4 2 adder 2) n (3 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 44)
-  (parent 23)
-  (unrealized (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((1 1) (3 0)) ((2 1) (0 3)) ((3 1) (0 5)) ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (3 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 45)
-  (parent 23)
-  (seen 77)
-  (unrealized (3 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 3)) ((2 1) (4 0)) ((3 1) (0 5))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 46)
-  (parent 24)
-  (seen 48)
-  (unrealized (4 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 4) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 3)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (displaced 4 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 47)
-  (parent 25)
-  (unrealized)
-  (shape)
-  (maps ((0) ((k k) (n n) (n1 new) (n2 new) (n3 new-0))))
-  (origs (n (0 0)) (new-0 (2 1)) (new (1 1))))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((1 1) (3 0)) ((2 1) (0 3)) ((2 1) (3 0)) ((3 1) (0 5))
-    ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 48)
-  (parent 25)
-  (unrealized (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((3 1) (0 5)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 49)
-  (parent 26)
-  (seen 51)
-  (unrealized (4 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((1 1) (3 0))
-    ((2 1) (0 2)) ((2 1) (3 0)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (displaced 4 2 adder 2) n (3 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 50)
-  (parent 27)
-  (unrealized (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((1 1) (3 0)) ((2 1) (0 2)) ((3 1) (0 5)) ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (3 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 51)
-  (parent 27)
-  (seen 84)
-  (unrealized (3 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 5))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 52)
-  (parent 28)
-  (seen 54)
-  (unrealized (4 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 4) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (displaced 4 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 53)
-  (parent 29)
-  (seen 47)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((1 1) (3 0)) ((2 1) (0 2)) ((2 1) (3 0)) ((3 1) (0 5))
-    ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 54)
-  (parent 29)
-  (unrealized (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 55)
-  (parent 30)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 56)
-  (parent 30)
-  (unrealized (4 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 57)
-  (parent 31)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 3))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 58)
-  (parent 31)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 59)
-  (parent 32)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((3 1) (0 3)) ((3 1) (4 0))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k))))
-  (label 60)
-  (parent 32)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 5))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new-0 new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k))))
-  (label 61)
-  (parent 33)
-  (seen 63)
-  (unrealized (4 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 4) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (displaced 4 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k))))
-  (label 62)
-  (parent 34)
-  (unrealized)
-  (shape)
-  (maps ((0) ((k k) (n n) (n1 new) (n2 new-0) (n3 new))))
-  (origs (n (0 0)) (new-0 (2 1)) (new (1 1))))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((1 1) (3 0)) ((2 1) (0 2)) ((2 1) (3 0)) ((3 1) (0 5))
-    ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 63)
-  (parent 34)
-  (unrealized (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 5))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new-0 new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k))))
-  (label 64)
-  (parent 35)
-  (seen 66)
-  (unrealized (4 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 4) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (displaced 4 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k))))
-  (label 65)
-  (parent 36)
-  (unrealized)
-  (shape)
-  (maps ((0) ((k k) (n n) (n1 new) (n2 new-0) (n3 new-0))))
-  (origs (n (0 0)) (new-0 (2 1)) (new (1 1))))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((1 1) (3 0)) ((2 1) (0 2)) ((2 1) (3 0)) ((3 1) (0 5))
-    ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 66)
-  (parent 36)
-  (unrealized (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new-0 new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 67)
-  (parent 37)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 3))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new-0 new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k))))
-  (label 68)
-  (parent 37)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new-0 new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 69)
-  (parent 38)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 3))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new-0 new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k))))
-  (label 70)
-  (parent 38)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new-0 new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-1 k)) (send (enc n new new-0 new-1 k))
-      (recv (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 71)
-  (parent 39)
-  (unrealized (0 5))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 3))
-    ((3 1) (4 0)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k)
-    (enc n new new-0 new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-1 k)) (send (enc n new new-0 new-1 k))
-      (recv (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-1 k))
-      (send (enc n new new-0 new-1 n k))))
-  (label 72)
-  (parent 39)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((0 4) (3 0))
-    ((1 1) (0 1)) ((2 1) (0 5)) ((3 1) (0 5)) ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 73)
-  (parent 41)
-  (seen 42)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 3)) ((2 1) (4 0)) ((3 1) (0 5))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 2 adder 2) n (4 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 74)
-  (parent 43)
-  (seen 77)
-  (unrealized (4 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 3)) ((3 1) (0 5))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 75)
-  (parent 43)
-  (seen 114)
-  (unrealized (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 4) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 3)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (displaced 4 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 76)
-  (parent 44)
-  (seen 20)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((1 1) (3 0)) ((2 1) (0 3)) ((2 1) (3 0)) ((3 1) (0 5))
-    ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 77)
-  (parent 44)
-  (unrealized (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 3)) ((3 1) (0 5)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 78)
-  (parent 46)
-  (seen 47)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 3)) ((2 1) (4 0))
-    ((3 1) (0 5)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 79)
-  (parent 46)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((0 4) (3 0))
-    ((1 1) (0 1)) ((2 1) (0 3)) ((3 1) (0 5)) ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 80)
-  (parent 48)
-  (seen 47)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 5))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 2 adder 2) n (4 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 81)
-  (parent 49)
-  (seen 84)
-  (unrealized (4 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((3 1) (0 5))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 82)
-  (parent 49)
-  (seen 118)
-  (unrealized (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 4) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 2)) ((3 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0)
-  (operation nonce-test (displaced 4 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 83)
-  (parent 50)
-  (seen 20)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((1 1) (3 0)) ((2 1) (0 2)) ((2 1) (3 0)) ((3 1) (0 5))
-    ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (added-strand adder 2) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 84)
-  (parent 50)
-  (unrealized (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 85)
-  (parent 52)
-  (seen 53)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 5)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 86)
-  (parent 52)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((0 4) (3 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5)) ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 87)
-  (parent 54)
-  (seen 53)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k)
-    (enc n new new new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 88)
-  (parent 55)
-  (seen 91)
-  (unrealized (5 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 3))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 2 adder 2) n (4 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 89)
-  (parent 56)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((3 1) (0 3)) ((3 1) (4 0))
-    ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 3 adder 2) n (4 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 90)
-  (parent 56)
-  (seen 124)
-  (unrealized (4 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 91)
-  (parent 56)
-  (seen 125 126)
-  (unrealized (4 0))
-  (comment "2 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k)
-    (enc n new new new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 92)
-  (parent 57)
-  (seen 94)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 3))
-    ((3 1) (4 0)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 3 adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 93)
-  (parent 58)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 94)
-  (parent 58)
-  (seen 130)
-  (unrealized (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((3 1) (5 0)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k)
-    (enc n new new new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k))))
-  (label 95)
-  (parent 59)
-  (seen 97)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 3))
-    ((3 1) (4 0)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 2 adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k))))
-  (label 96)
-  (parent 60)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((3 1) (4 0)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 97)
-  (parent 60)
-  (seen 134)
-  (unrealized (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k))))
-  (label 98)
-  (parent 61)
-  (seen 62)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 5)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 99)
-  (parent 61)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((0 4) (3 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5)) ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 100)
-  (parent 63)
-  (seen 62)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k))))
-  (label 101)
-  (parent 64)
-  (seen 65)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 5)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 102)
-  (parent 64)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((0 4) (3 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5)) ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 103)
-  (parent 66)
-  (seen 65)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k)
-    (enc n new new-0 new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k))))
-  (label 104)
-  (parent 67)
-  (seen 106)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 3))
-    ((3 1) (4 0)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 3 adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k))))
-  (label 105)
-  (parent 68)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 106)
-  (parent 68)
-  (seen 140)
-  (unrealized (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k)
-    (enc n new new-0 new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k))))
-  (label 107)
-  (parent 69)
-  (seen 109)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 3))
-    ((3 1) (4 0)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 3 adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k))))
-  (label 108)
-  (parent 70)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 109)
-  (parent 70)
-  (seen 144)
-  (unrealized (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand final 2) n (0 5) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k)
-    (enc n new new-0 new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-1 k)) (send (enc n new new-0 new-1 k))
-      (recv (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new-1 k))
-      (send (enc n new new-0 new-1 n k))))
-  (label 110)
-  (parent 71)
-  (seen 112)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-1 k)) (send (enc n new new-0 new-1 k))
-      (recv (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-1 k))
-      (send (enc n new new-0 new-1 n k))))
-  (label 111)
-  (parent 72)
-  (unrealized)
-  (shape)
-  (maps ((0) ((k k) (n n) (n1 new) (n2 new-0) (n3 new-1))))
-  (origs (n (0 0)) (new-1 (3 1)) (new-0 (2 1)) (new (1 1))))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 3)) ((3 1) (4 0)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-1 k)) (send (enc n new new-0 new-1 k))
-      (recv (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-1 k))
-      (send (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 112)
-  (parent 72)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 3)) ((3 1) (0 5)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 113)
-  (parent 74)
-  (seen 40)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 3)) ((2 1) (4 0))
-    ((3 1) (0 5)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 114)
-  (parent 74)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((0 4) (3 0))
-    ((1 1) (0 1)) ((2 1) (0 3)) ((3 1) (0 5)) ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 115)
-  (parent 77)
-  (seen 42)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 3)) ((3 1) (0 5))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 116)
-  (parent 79)
-  (seen 80)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 117)
-  (parent 81)
-  (seen 40)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 5)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 118)
-  (parent 81)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (4 0)) ((0 4) (3 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5)) ((4 1) (3 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (3 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-1 k))))
-  (label 119)
-  (parent 84)
-  (seen 42)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 120)
-  (parent 86)
-  (seen 87)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 2 adder 2) n (5 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 121)
-  (parent 88)
-  (seen 125)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((3 1) (5 0)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 3 adder 2) n (5 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 122)
-  (parent 88)
-  (seen 126 150)
-  (unrealized (5 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 123)
-  (parent 88)
-  (seen 151 152)
-  (unrealized (5 0))
-  (comment "2 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (0 3))
-    ((3 1) (4 0)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 3 adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 124)
-  (parent 89)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 125)
-  (parent 89)
-  (seen 154)
-  (unrealized (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((3 1) (4 0)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 126)
-  (parent 90)
-  (seen 154)
-  (unrealized (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 3 adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 127)
-  (parent 92)
-  (seen 130)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((2 1) (5 0)) ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5))
-    ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 128)
-  (parent 92)
-  (seen 156)
-  (unrealized (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 129)
-  (parent 93)
-  (seen 53)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 3)) ((3 1) (4 0)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 130)
-  (parent 93)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 2 adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k))))
-  (label 131)
-  (parent 95)
-  (seen 134)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5)) ((5 1) (0 5))
-    ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 132)
-  (parent 95)
-  (seen 159)
-  (unrealized (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k))))
-  (label 133)
-  (parent 96)
-  (seen 47)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 3)) ((3 1) (4 0)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 134)
-  (parent 96)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 135)
-  (parent 99)
-  (seen 100)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 136)
-  (parent 102)
-  (seen 103)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 3 adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k))))
-  (label 137)
-  (parent 104)
-  (seen 140)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((2 1) (5 0)) ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5))
-    ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 138)
-  (parent 104)
-  (seen 162)
-  (unrealized (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k))))
-  (label 139)
-  (parent 105)
-  (seen 62)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 3)) ((3 1) (4 0)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 140)
-  (parent 105)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 3 adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k))))
-  (label 141)
-  (parent 107)
-  (seen 144)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((2 1) (5 0)) ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5))
-    ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 142)
-  (parent 107)
-  (seen 165)
-  (unrealized (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k))))
-  (label 143)
-  (parent 108)
-  (seen 65)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 3)) ((3 1) (4 0)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 144)
-  (parent 108)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-1 k)) (send (enc n new new-0 new-1 k))
-      (recv (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new-1 k))
-      (send (enc n new new-0 new-1 n k))))
-  (label 145)
-  (parent 110)
-  (seen 111)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((2 1) (5 0)) ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5))
-    ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-1 k)) (send (enc n new new-0 new-1 k))
-      (recv (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new-1 k))
-      (send (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 146)
-  (parent 110)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-1 k)) (send (enc n new new-0 new-1 k))
-      (recv (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-1 k))
-      (send (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 147)
-  (parent 112)
-  (seen 111)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 3)) ((3 1) (0 5))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 148)
-  (parent 114)
-  (seen 73)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 5))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 149)
-  (parent 118)
-  (seen 73)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 3 adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 150)
-  (parent 121)
-  (seen 154)
-  (unrealized (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((2 1) (5 0)) ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5))
-    ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 151)
-  (parent 121)
-  (seen 169)
-  (unrealized (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5)) ((5 1) (0 5))
-    ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 152)
-  (parent 122)
-  (seen 169)
-  (unrealized (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 4) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3)) ((4 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1)
-  (operation nonce-test (displaced 5 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 153)
-  (parent 124)
-  (seen 76)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (4 0))
-    ((3 1) (0 3)) ((3 1) (4 0)) ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (added-strand adder 2) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 154)
-  (parent 124)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k))))
-  (label 155)
-  (parent 127)
-  (seen 85)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((2 1) (5 0)) ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5))
-    ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 156)
-  (parent 127)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 157)
-  (parent 130)
-  (seen 87)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k))))
-  (label 158)
-  (parent 131)
-  (seen 78)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((2 1) (5 0)) ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5))
-    ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 159)
-  (parent 131)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 160)
-  (parent 134)
-  (seen 80)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k))))
-  (label 161)
-  (parent 137)
-  (seen 98)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((2 1) (5 0)) ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5))
-    ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 162)
-  (parent 137)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 163)
-  (parent 140)
-  (seen 100)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k))))
-  (label 164)
-  (parent 141)
-  (seen 101)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((2 1) (5 0)) ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5))
-    ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 165)
-  (parent 141)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 166)
-  (parent 144)
-  (seen 103)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (displaced 7 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-3 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-1 k)) (send (enc n new new-0 new-1 k))
-      (recv (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new-1 k))
-      (send (enc n new new-0 new-1 n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 167)
-  (parent 146)
-  (seen 147)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (0 5)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k))))
-  (label 168)
-  (parent 150)
-  (seen 113)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((1 1) (5 0)) ((2 1) (0 2))
-    ((2 1) (5 0)) ((3 1) (0 3)) ((3 1) (5 0)) ((4 1) (0 5))
-    ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (added-strand adder 2) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 169)
-  (parent 150)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (5 0))
-    ((0 4) (4 0)) ((1 1) (0 1)) ((2 1) (0 2)) ((3 1) (0 3))
-    ((4 1) (0 5)) ((5 1) (4 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2)
-  (operation nonce-test (displaced 6 0 init 5) n (4 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-2 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-2 k))))
-  (label 170)
-  (parent 154)
-  (seen 115)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (displaced 7 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-3 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-0 k)) (send (enc n new new new-0 k))
-      (recv (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-0 k)) (send (enc n new new new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 171)
-  (parent 156)
-  (seen 120)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new-1) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (displaced 7 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-3 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new-1 k)) (send (enc n new new new-1 k))
-      (recv (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new-1 k)) (send (enc n new new new-1 n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 172)
-  (parent 159)
-  (seen 116)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (displaced 7 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-3 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new k)) (send (enc n new new-0 new k))
-      (recv (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new k)) (send (enc n new new-0 new n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 173)
-  (parent 162)
-  (seen 135)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new-0) (n3 new-0) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (displaced 7 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-3 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new-0 k))
-      (recv (enc n new-0 k)) (send (enc n new new-0 new-0 k))
-      (recv (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new-0 new-0 k))
-      (send (enc n new new-0 new-0 n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 174)
-  (parent 165)
-  (seen 136)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton fragile_pruning
-  (vars (n new new-0 new-1 new-2 new-3 text) (k akey))
-  (defstrand init 6 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new) (k k))
-  (defstrand adder 2 (n n) (new new-0) (k k))
-  (defstrand adder 2 (n n) (new new-1) (k k))
-  (defstrand adder 2 (n n) (new new-2) (k k))
-  (defstrand final 2 (n n) (n1 new) (n2 new) (n3 new) (k k))
-  (defstrand adder 2 (n n) (new new-3) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((0 0) (6 0)) ((0 4) (5 0)) ((1 1) (0 1)) ((2 1) (0 2))
-    ((3 1) (0 3)) ((4 1) (0 5)) ((5 1) (0 5)) ((6 1) (5 0)))
-  (non-orig (invk k))
-  (uniq-orig n new new-0 new-1 new-2 new-3)
-  (operation nonce-test (displaced 7 0 init 5) n (5 0) (enc n k)
-    (enc n new k) (enc n new-0 k) (enc n new-1 k) (enc n new-3 k))
-  (traces
-    ((send (enc n k)) (recv (enc n new k)) (recv (enc n new k))
-      (recv (enc n new k)) (send (enc n new new new k))
-      (recv (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new k)))
-    ((recv (enc n k)) (send (enc n new-0 k)))
-    ((recv (enc n k)) (send (enc n new-1 k)))
-    ((recv (enc n k)) (send (enc n new-2 k)))
-    ((recv (enc n new new new k)) (send (enc n new new new n k)))
-    ((recv (enc n k)) (send (enc n new-3 k))))
-  (label 175)
-  (parent 169)
-  (seen 148)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
diff --git a/tst/goals.tst b/tst/goals.tst
--- a/tst/goals.tst
+++ b/tst/goals.tst
@@ -1,6 +1,6 @@
 (herald goals)
 
-(comment "CPSA 2.5.4")
+(comment "CPSA 3.2.2")
 (comment "All input read from goals.scm")
 
 (defprotocol ns basic
@@ -108,7 +108,7 @@
   (parent 2)
   (unrealized)
   (shape)
-  (satisfies yes)
+  (satisfies (no (b b) (n1 n1) (z0 (0 2))))
   (maps ((0) ((b b) (n1 n1) (a a) (n2 n2))))
   (origs (n1 (0 0))))
 
@@ -855,7 +855,7 @@
   (defstrand init 3 (n1 n1-0) (n2 n2-0) (a a) (b b))
   (non-orig (privk a) (privk b))
   (uniq-orig n1 n1-0)
-  (goals
+  (subgoals
     (forall ((n1 n1-0 n2 n2-0 text) (a b name) (z z-0 z-1 z-2 node))
       (implies
         (and (p "init" 0 z) (p "init" 2 z-0) (p "init" 0 z-1)
@@ -1018,8 +1018,8 @@
   (unrealized)
   (shape)
   (satisfies
-    (no (n1-0 n1) (n1 n1-0) (n2-0 n2-0) (n2 n2) (a a) (b b) (z-2 (0 0))
-      (z-1 (0 2)) (z-0 (1 0)) (z (1 2))))
+    (no (n1 n1) (n1-0 n1-0) (n2 n2-0) (n2-0 n2) (a a) (b b) (z (0 0))
+      (z-0 (0 2)) (z-1 (1 0)) (z-2 (1 2))))
   (maps ((0 1) ((a a) (b b) (n1 n1) (n1-0 n1-0) (n2 n2-0) (n2-0 n2))))
   (origs (n1 (0 0)) (n1-0 (1 0))))
 
@@ -1108,7 +1108,7 @@
   (parent 42)
   (unrealized)
   (shape)
-  (satisfies (no (n2 n2) (a a) (b b) (z-0 (1 1)) (z (0 0))))
+  (satisfies (no (n2 n2) (a a) (b b) (z (1 1)) (z-0 (0 0))))
   (maps ((0 1) ((n2 n2) (a a) (b b) (n1 a-0))))
   (origs (n2 (1 1))))
 
@@ -1130,7 +1130,7 @@
   (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
   (non-orig (privk a))
   (uniq-orig n2)
-  (goals
+  (subgoals
     (forall ((n1 n2 text) (a b name) (z z-0 node))
       (implies
         (and (p "init" 0 z) (p "init" 2 z-0) (p "init" "n1" z-0 n1)
@@ -1192,7 +1192,7 @@
   (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
   (non-orig (privk a))
   (uniq-orig n2)
-  (goals
+  (subgoals
     (forall ((n1 n2 text) (a b name) (z z-0 node))
       (implies
         (and (p "init" 0 z) (p "init" 2 z-0) (p "init" "n1" z-0 n1)
@@ -1248,7 +1248,7 @@
   (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
   (non-orig (privk a) (privk b))
   (uniq-orig n1)
-  (goals
+  (subgoals
     (forall ((n1 n2 text) (a b name) (z z-0 node))
       (implies
         (and (p "init" 0 z) (p "init" 2 z-0) (p "init" "n1" z-0 n1)
@@ -1299,7 +1299,7 @@
   (parent 50)
   (unrealized)
   (shape)
-  (satisfies (no (n1 n1) (n2 n2) (a a) (b b) (z-0 (0 0)) (z (0 2))))
+  (satisfies (no (n1 n1) (n2 n2) (a a) (b b) (z (0 0)) (z-0 (0 2))))
   (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
   (origs (n1 (0 0))))
 
diff --git a/tst/hashtest-key-hash.scm b/tst/hashtest-key-hash.scm
deleted file mode 100644
--- a/tst/hashtest-key-hash.scm
+++ /dev/null
@@ -1,25 +0,0 @@
-;;; Hashtest.scm is designed to test if the
-;;; hash is working properly.
-(herald "Hashtest")
-
-(defprotocol hashtest basic
-  (defrole init (vars (n data) (k akey))
-     (trace
-       (send (enc n k))
-       (recv (enc "h" n))
-     )
-     (uniq-orig n)
-     (non-orig (invk k))
-   )
-   (defrole resp (vars (k akey) (n data))
-     (trace
-       (recv (enc n k))
-       (send (enc "h" n))
-     )
-   )
-)
-
-(defskeleton hashtest
-   (vars)
-   (defstrand init 2)
-)
diff --git a/tst/hashtest-key-hash.tst b/tst/hashtest-key-hash.tst
deleted file mode 100644
--- a/tst/hashtest-key-hash.tst
+++ /dev/null
@@ -1,73 +0,0 @@
-(herald "Hashtest")
-
-(comment "CPSA 2.5.4")
-(comment "All input read from hashtest-key-hash.scm")
-
-(defprotocol hashtest basic
-  (defrole init
-    (vars (n data) (k akey))
-    (trace (send (enc n k)) (recv (enc "h" n)))
-    (non-orig (invk k))
-    (uniq-orig n))
-  (defrole resp
-    (vars (k akey) (n data))
-    (trace (recv (enc n k)) (send (enc "h" n)))))
-
-(defskeleton hashtest
-  (vars (n data) (k akey))
-  (defstrand init 2 (n n) (k k))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (traces ((send (enc n k)) (recv (enc "h" n))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (n (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton hashtest
-  (vars (n data) (k k-0 akey))
-  (defstrand init 2 (n n) (k k))
-  (defstrand resp 2 (n n) (k k-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation encryption-test (added-strand resp 2) (enc "h" n) (0 1))
-  (traces ((send (enc n k)) (recv (enc "h" n)))
-    ((recv (enc n k-0)) (send (enc "h" n))))
-  (label 1)
-  (parent 0)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton hashtest
-  (vars (n data) (k akey))
-  (defstrand init 2 (n n) (k k))
-  (deflistener n)
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation encryption-test (added-listener n) (enc "h" n) (0 1))
-  (traces ((send (enc n k)) (recv (enc "h" n))) ((recv n) (send n)))
-  (label 2)
-  (parent 0)
-  (unrealized (1 0))
-  (comment "empty cohort"))
-
-(defskeleton hashtest
-  (vars (n data) (k akey))
-  (defstrand init 2 (n n) (k k))
-  (defstrand resp 2 (n n) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (contracted (k-0 k)) n (1 0) (enc n k))
-  (traces ((send (enc n k)) (recv (enc "h" n)))
-    ((recv (enc n k)) (send (enc "h" n))))
-  (label 3)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((n n) (k k))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/hashtest.scm b/tst/hashtest.scm
deleted file mode 100644
--- a/tst/hashtest.scm
+++ /dev/null
@@ -1,25 +0,0 @@
-;;; Hashtest.scm is designed to test if the
-;;; hash is working properly.
-(herald "Hashtest")
-
-(defprotocol hashtest basic
-  (defrole init (vars (n data) (k akey))
-     (trace
-       (send (enc n k))
-       (recv (hash n))
-     )
-     (uniq-orig n)
-     (non-orig (invk k))
-   )
-   (defrole resp (vars (k akey) (n data))
-     (trace
-       (recv (enc n k))
-       (send (hash n))
-     )
-   )
-)
-
-(defskeleton hashtest
-   (vars)
-   (defstrand init 2)
-)
diff --git a/tst/hashtest.tst b/tst/hashtest.tst
deleted file mode 100644
--- a/tst/hashtest.tst
+++ /dev/null
@@ -1,73 +0,0 @@
-(herald "Hashtest")
-
-(comment "CPSA 2.5.4")
-(comment "All input read from hashtest.scm")
-
-(defprotocol hashtest basic
-  (defrole init
-    (vars (n data) (k akey))
-    (trace (send (enc n k)) (recv (hash n)))
-    (non-orig (invk k))
-    (uniq-orig n))
-  (defrole resp
-    (vars (k akey) (n data))
-    (trace (recv (enc n k)) (send (hash n)))))
-
-(defskeleton hashtest
-  (vars (n data) (k akey))
-  (defstrand init 2 (n n) (k k))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (traces ((send (enc n k)) (recv (hash n))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (n (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton hashtest
-  (vars (n data) (k k-0 akey))
-  (defstrand init 2 (n n) (k k))
-  (defstrand resp 2 (n n) (k k-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation encryption-test (added-strand resp 2) (hash n) (0 1))
-  (traces ((send (enc n k)) (recv (hash n)))
-    ((recv (enc n k-0)) (send (hash n))))
-  (label 1)
-  (parent 0)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton hashtest
-  (vars (n data) (k akey))
-  (defstrand init 2 (n n) (k k))
-  (deflistener n)
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation encryption-test (added-listener n) (hash n) (0 1))
-  (traces ((send (enc n k)) (recv (hash n))) ((recv n) (send n)))
-  (label 2)
-  (parent 0)
-  (unrealized (1 0))
-  (comment "empty cohort"))
-
-(defskeleton hashtest
-  (vars (n data) (k akey))
-  (defstrand init 2 (n n) (k k))
-  (defstrand resp 2 (n n) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (contracted (k-0 k)) n (1 0) (enc n k))
-  (traces ((send (enc n k)) (recv (hash n)))
-    ((recv (enc n k)) (send (hash n))))
-  (label 3)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((n n) (k k))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/iadh_um.scm b/tst/iadh_um.scm
new file mode 100644
--- /dev/null
+++ b/tst/iadh_um.scm
@@ -0,0 +1,88 @@
+(herald "IADH: unified model (UM)" (bound 20) (algebra diffie-hellman))
+
+(defprotocol iadh-um diffie-hellman
+  (defrole init
+    (vars (l e expn) (hl he base) (A B CA name) (key n data))
+    (trace 
+     (recv (enc "cert" (exp (gen) l) A (privk CA)))
+     (recv (enc "cert" hl B (privk CA)))
+     (send (exp (gen) e))
+     (recv he)
+     (send key))
+    (non-orig (privk CA))
+    (fn-of (foo ((hash (exp hl l) (exp he e)) key)))
+    (neq (he (gen)) (hl (exp (gen) l))))
+  (defrole ltkgen
+    (vars (P name) (l expn))
+    (trace
+     (send (enc "cert-req" P (exp (gen) l) (privk P))))
+    (fn-of ("principal-of" (P (exp (gen) l)))))
+  (defrole ca-gen
+    (vars (P CA name) (h base))
+    (trace 
+     (recv (enc "cert-req" P h (privk P)))
+     (send (enc "cert" h P (privk CA))))
+    (non-orig (privk P))
+    (neq (h (gen)))
+    (fn-of ("principal-of" (P h)))))
+
+;; Implicit authentication: resp and init will agree on the resulting key
+;; foo(key).  Therefore they should agree on the names A and B.
+(defskeleton iadh-um
+  (vars (key data) (e ep l lp expn))
+  (defstrand init 5 (key key) (e e) (l l))
+  (defstrand init 5 (key key) (e ep) (l lp))
+  (defstrand ltkgen 1 (l l))
+  (defstrand ltkgen 1 (l lp))
+  (uniq-gen e ep l lp)
+)
+
+;; Key privacy: all keys good
+(defskeleton iadh-um
+  (vars (he base) (e l ep lp expn))
+  (defstrand init 4 (e e) (l l) (hl (exp (gen) lp)) (he he))
+  (defstrand ltkgen 1 (l l))
+  (defstrand ltkgen 1 (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (uniq-gen e lp l)
+)
+
+;; Key privacy: both long term keys good, own ephemeral key leaks.
+(defskeleton iadh-um
+  (vars (he base) (e l ep lp expn))
+  (defstrand init 4 (e e) (l l) (hl (exp (gen) lp)) (he he))
+  (defstrand ltkgen 1 (l l))
+  (defstrand ltkgen 1 (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (uniq-gen lp l)
+)
+
+;; Participant's point of view: own LTK compromised, partner's good
+(defskeleton iadh-um
+  (vars (he base) (e l ep lp expn))
+  (defstrand init 4 (e e) (hl (exp (gen) lp)) (he he))
+  (defstrand ltkgen 1 (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (uniq-gen e lp)
+)
+;)
+
+;; Participant's point of view: partner's LTK compromised, own good
+(defskeleton iadh-um
+  (vars (he hl base) (e ep l lp expn))
+  (defstrand init 4 (e e) (l l) (hl hl) (he he))
+  (defstrand ltkgen 1 (l l))
+  (deflistener (hash (exp hl l) (exp he e)))
+  (uniq-gen e l)
+)
+;)
+
+;; Participant's point of view: both LTKs compromised
+(defskeleton iadh-um
+  (vars (he hl base) (e l ep lp expn))
+  (defstrand init 4 (e e) (l l) (he he) (hl hl))
+  (deflistener (hash (exp hl l) (exp he e)))
+  (uniq-gen e)
+)
+;)
+
diff --git a/tst/iadh_um.tst b/tst/iadh_um.tst
new file mode 100644
--- /dev/null
+++ b/tst/iadh_um.tst
@@ -0,0 +1,3732 @@
+(herald "IADH: unified model (UM)" (bound 20) (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from iadh_um.scm")
+(comment "Strand count bounded at 20")
+
+(defprotocol iadh-um diffie-hellman
+  (defrole init
+    (vars (l e expn) (hl he base) (A B CA name) (key data))
+    (trace (recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    (non-orig (privk CA))
+    (fn-of (foo ((hash (exp hl l) (exp he e)) key)))
+    (neq (he (gen)) (hl (exp (gen) l))))
+  (defrole ltkgen
+    (vars (P name) (l expn))
+    (trace (send (enc "cert-req" P (exp (gen) l) (privk P))))
+    (fn-of ("principal-of" (P (exp (gen) l)))))
+  (defrole ca-gen
+    (vars (P CA name) (h base))
+    (trace (recv (enc "cert-req" P h (privk P)))
+      (send (enc "cert" h P (privk CA))))
+    (non-orig (privk P))
+    (fn-of ("principal-of" (P h)))
+    (neq (h (gen)))))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA A-0 B-0 CA-0 P P-0 name)
+    (hl he hl-0 he-0 base) (e ep l lp expn))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl hl) (he he) (l l)
+    (e e))
+  (defstrand init 5 (key key) (A A-0) (B B-0) (CA CA-0) (hl hl-0)
+    (he he-0) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo ((hash (exp hl-0 lp) (exp he-0 ep)) key)
+      ((hash (exp hl l) (exp he e)) key)))
+  (neq (hl-0 (exp (gen) lp)) (he-0 (gen)) (hl (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA) (privk CA-0))
+  (uniq-gen e ep l lp)
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) A-0 (privk CA-0)))
+      (recv (enc "cert" hl-0 B-0 (privk CA-0))) (send (exp (gen) ep))
+      (recv he-0) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))))
+  (label 0)
+  (unrealized (0 0) (0 1) (1 0) (1 1))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA A-0 B-0 CA-0 P P-0 name) (hl he base)
+    (l lp e ep expn))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl hl) (he he) (l l)
+    (e e))
+  (defstrand init 5 (key key) (A A-0) (B B-0) (CA CA-0)
+    (hl (exp hl (mul l (rec lp)))) (he (exp he (mul e (rec ep)))) (l lp)
+    (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (precedes ((0 2) (1 3)) ((2 0) (0 0)) ((2 0) (1 1)) ((3 0) (1 0)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo ((hash (exp hl l) (exp he e)) key)))
+  (neq ((exp hl (mul l (rec lp))) (exp (gen) lp))
+    ((exp he (mul e (rec ep))) (gen)) (hl (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA) (privk CA-0))
+  (uniq-gen l lp e ep)
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) A-0 (privk CA-0)))
+      (recv (enc "cert" (exp hl (mul l (rec lp))) B-0 (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp he (mul e (rec ep)))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 0) (0 1) (1 0) (1 1) (1 3))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA A-0 B-0 CA-0 P name) (hl he base)
+    (e ep lp expn))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl hl) (he he) (l lp)
+    (e e))
+  (defstrand init 5 (key key) (A A-0) (B B-0) (CA CA-0) (hl hl)
+    (he (exp he (mul e (rec ep)))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (precedes ((0 2) (1 3)) ((2 0) (0 0)) ((2 0) (1 0)))
+  (fn-of ("principal-of" (P (exp (gen) lp)))
+    (foo ((hash (exp hl lp) (exp he e)) key)))
+  (neq (hl (exp (gen) lp)) ((exp he (mul e (rec ep))) (gen)) (he (gen)))
+  (non-orig (privk CA) (privk CA-0))
+  (uniq-gen e ep lp)
+  (operation collapsed 3 2)
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) A-0 (privk CA-0)))
+      (recv (enc "cert" hl B-0 (privk CA-0))) (send (exp (gen) ep))
+      (recv (exp he (mul e (rec ep)))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P)))))
+  (label 2)
+  (parent 1)
+  (unrealized (0 0) (0 1) (1 0) (1 1) (1 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA P name) (hl he base) (lp ep expn))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl hl) (he he) (l lp)
+    (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (precedes ((1 0) (0 0)))
+  (fn-of ("principal-of" (P (exp (gen) lp)))
+    (foo ((hash (exp hl lp) (exp he ep)) key)))
+  (neq (hl (exp (gen) lp)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen lp ep)
+  (operation collapsed 1 0)
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) ep))
+      (recv he) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P)))))
+  (label 3)
+  (parent 2)
+  (unrealized (0 0) (0 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA B-0 CA-0 P P-0 name) (hl he base)
+    (l lp e ep expn))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl hl) (he he) (l l)
+    (e e))
+  (defstrand init 5 (key key) (A P-0) (B B-0) (CA CA-0)
+    (hl (exp hl (mul l (rec lp)))) (he (exp he (mul e (rec ep)))) (l lp)
+    (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((2 0) (0 0)) ((2 0) (1 1)) ((3 0) (4 0))
+    ((4 1) (1 0)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo ((hash (exp hl l) (exp he e)) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp hl (mul l (rec lp))) (exp (gen) lp))
+    ((exp he (mul e (rec ep))) (gen)) (hl (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA) (privk CA-0) (privk P-0))
+  (uniq-gen l lp e ep)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) lp) P-0 (privk CA-0)) (1 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp hl (mul l (rec lp))) B-0 (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp he (mul e (rec ep)))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))))
+  (label 4)
+  (parent 1)
+  (unrealized (0 0) (0 1) (1 1) (1 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA B-0 CA-0 P name) (hl he base) (e ep lp expn))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl hl) (he he) (l lp)
+    (e e))
+  (defstrand init 5 (key key) (A P) (B B-0) (CA CA-0) (hl hl)
+    (he (exp he (mul e (rec ep)))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((2 0) (0 0)) ((2 0) (3 0)) ((3 1) (1 0)))
+  (fn-of ("principal-of" (P (exp (gen) lp)))
+    (foo ((hash (exp hl lp) (exp he e)) key)))
+  (neq ((exp (gen) lp) (gen)) (hl (exp (gen) lp))
+    ((exp he (mul e (rec ep))) (gen)) (he (gen)))
+  (non-orig (privk CA) (privk CA-0) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) lp) P (privk CA-0)) (1 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA-0)))
+      (recv (enc "cert" hl B-0 (privk CA-0))) (send (exp (gen) ep))
+      (recv (exp he (mul e (rec ep)))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA-0)))))
+  (label 5)
+  (parent 2)
+  (unrealized (0 0) (0 1) (1 1) (1 3))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (hl he base) (lp ep expn))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl hl) (he he) (l lp)
+    (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (precedes ((1 0) (2 0)) ((2 1) (0 0)))
+  (fn-of ("principal-of" (P (exp (gen) lp)))
+    (foo ((hash (exp hl lp) (exp he ep)) key)))
+  (neq ((exp (gen) lp) (gen)) (hl (exp (gen) lp)) (he (gen)))
+  (non-orig (privk CA) (privk P))
+  (uniq-gen lp ep)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) lp) P (privk CA)) (0 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) ep))
+      (recv he) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA)))))
+  (label 6)
+  (parent 3)
+  (unrealized (0 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA B-0 CA-0 P P-0 name) (hl he base)
+    (e ep l lp expn))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl hl) (he he) (l l)
+    (e e))
+  (defstrand init 5 (key key) (A P-0) (B B-0) (CA CA-0)
+    (hl (exp hl (mul l (rec lp)))) (he (exp he (mul e (rec ep)))) (l lp)
+    (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B-0) (CA CA-0) (h (exp hl (mul l (rec lp)))))
+  (precedes ((0 2) (1 3)) ((2 0) (0 0)) ((2 0) (5 0)) ((3 0) (4 0))
+    ((3 0) (5 0)) ((4 1) (1 0)) ((5 1) (1 1)))
+  (fn-of
+    ("principal-of" (B-0 (exp hl (mul l (rec lp)))) (P-0 (exp (gen) lp))
+      (P (exp (gen) l))) (foo ((hash (exp hl l) (exp he e)) key)))
+  (neq ((exp hl (mul l (rec lp))) (gen)) ((exp (gen) lp) (gen))
+    ((exp hl (mul l (rec lp))) (exp (gen) lp))
+    ((exp he (mul e (rec ep))) (gen)) (hl (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA) (privk B-0) (privk CA-0) (privk P-0))
+  (uniq-gen e ep l lp)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp hl (mul l (rec lp))) B-0 (privk CA-0)) (1 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp hl (mul l (rec lp))) B-0 (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp he (mul e (rec ep)))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" B-0 (exp hl (mul l (rec lp))) (privk B-0)))
+      (send (enc "cert" (exp hl (mul l (rec lp))) B-0 (privk CA-0)))))
+  (label 7)
+  (parent 4)
+  (unrealized (0 0) (0 1) (1 3) (5 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA B-0 CA-0 P name) (hl he base) (e ep lp expn))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl hl) (he he) (l lp)
+    (e e))
+  (defstrand init 5 (key key) (A P) (B B-0) (CA CA-0) (hl hl)
+    (he (exp he (mul e (rec ep)))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B-0) (CA CA-0) (h hl))
+  (precedes ((0 2) (1 3)) ((2 0) (0 0)) ((2 0) (3 0)) ((3 1) (1 0))
+    ((4 1) (1 1)))
+  (fn-of ("principal-of" (B-0 hl) (P (exp (gen) lp)))
+    (foo ((hash (exp hl lp) (exp he e)) key)))
+  (neq (hl (gen)) ((exp (gen) lp) (gen)) (hl (exp (gen) lp))
+    ((exp he (mul e (rec ep))) (gen)) (he (gen)))
+  (non-orig (privk CA) (privk B-0) (privk CA-0) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" hl B-0 (privk CA-0)) (1 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA-0)))
+      (recv (enc "cert" hl B-0 (privk CA-0))) (send (exp (gen) ep))
+      (recv (exp he (mul e (rec ep)))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA-0))))
+    ((recv (enc "cert-req" B-0 hl (privk B-0)))
+      (send (enc "cert" hl B-0 (privk CA-0)))))
+  (label 8)
+  (parent 5)
+  (unrealized (0 0) (0 1) (1 3) (4 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (hl he base) (lp ep expn))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl hl) (he he) (l lp)
+    (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h hl))
+  (precedes ((1 0) (2 0)) ((2 1) (0 0)) ((3 1) (0 1)))
+  (fn-of ("principal-of" (B hl) (P (exp (gen) lp)))
+    (foo ((hash (exp hl lp) (exp he ep)) key)))
+  (neq (hl (gen)) ((exp (gen) lp) (gen)) (hl (exp (gen) lp)) (he (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen lp ep)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" hl B (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) ep))
+      (recv he) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B hl (privk B)))
+      (send (enc "cert" hl B (privk CA)))))
+  (label 9)
+  (parent 6)
+  (unrealized (3 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA CA-0 P P-0 name) (he base) (e ep lp l expn))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl (exp (gen) lp))
+    (he he) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA-0) (hl (exp (gen) l))
+    (he (exp he (mul e (rec ep)))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((2 0) (0 0)) ((2 0) (5 0)) ((3 0) (0 1))
+    ((3 0) (4 0)) ((3 0) (5 0)) ((4 1) (1 0)) ((5 1) (1 1)))
+  (fn-of ("principal-of" (P (exp (gen) l)) (P-0 (exp (gen) lp)))
+    (foo ((hash (exp (gen) (mul lp l)) (exp he e)) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp he (mul e (rec ep))) (gen))
+    ((exp (gen) lp) (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA) (privk CA-0) (privk P) (privk P-0))
+  (uniq-gen e ep lp l)
+  (operation encryption-test (displaced 6 2 ltkgen 1)
+    (enc "cert-req" B-0 (exp (gen) l-0) (privk B-0)) (5 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv he) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp he (mul e (rec ep)))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA-0)))))
+  (label 10)
+  (parent 7)
+  (unrealized (0 0) (0 1) (1 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA B-0 CA-0 P P-0 name) (he base)
+    (e ep l lp l-0 expn))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA)
+    (hl (exp (gen) (mul (rec l) lp l-0))) (he he) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B B-0) (CA CA-0)
+    (hl (exp (gen) l-0)) (he (exp he (mul e (rec ep)))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B-0) (CA CA-0) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B-0) (l l-0))
+  (precedes ((0 2) (1 3)) ((2 0) (0 0)) ((2 0) (5 0)) ((3 0) (0 1))
+    ((3 0) (4 0)) ((3 0) (5 0)) ((4 1) (1 0)) ((5 1) (1 1))
+    ((6 0) (5 0)))
+  (fn-of
+    ("principal-of" (B-0 (exp (gen) l-0)) (P-0 (exp (gen) lp))
+      (P (exp (gen) l)))
+    (foo ((hash (exp (gen) (mul lp l-0)) (exp he e)) key)))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l-0) (exp (gen) lp)) ((exp he (mul e (rec ep))) (gen))
+    ((exp (gen) (mul (rec l) lp l-0)) (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA) (privk B-0) (privk CA-0) (privk P-0))
+  (uniq-gen e ep l lp)
+  (operation encryption-test (added-strand ltkgen 1)
+    (enc "cert-req" B-0 (exp (gen) l-0) (privk B-0)) (5 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) (mul (rec l) lp l-0)) B (privk CA)))
+      (send (exp (gen) e)) (recv he) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l-0) B-0 (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp he (mul e (rec ep)))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" B-0 (exp (gen) l-0) (privk B-0)))
+      (send (enc "cert" (exp (gen) l-0) B-0 (privk CA-0))))
+    ((send (enc "cert-req" B-0 (exp (gen) l-0) (privk B-0)))))
+  (label 11)
+  (parent 7)
+  (unrealized (0 0) (0 1) (1 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA B-0 CA-0 P name) (he base) (e ep lp l expn))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl (exp (gen) l))
+    (he he) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B-0) (CA CA-0) (hl (exp (gen) l))
+    (he (exp he (mul e (rec ep)))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B-0) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B-0) (l l))
+  (precedes ((0 2) (1 3)) ((2 0) (0 0)) ((2 0) (3 0)) ((3 1) (1 0))
+    ((4 1) (1 1)) ((5 0) (4 0)))
+  (fn-of ("principal-of" (B-0 (exp (gen) l)) (P (exp (gen) lp)))
+    (foo ((hash (exp (gen) (mul lp l)) (exp he e)) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp he (mul e (rec ep))) (gen))
+    (he (gen)))
+  (non-orig (privk CA) (privk B-0) (privk CA-0) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (added-strand ltkgen 1)
+    (enc "cert-req" B-0 (exp (gen) l) (privk B-0)) (4 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) A (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv he) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) B-0 (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp he (mul e (rec ep)))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA-0))))
+    ((recv (enc "cert-req" B-0 (exp (gen) l) (privk B-0)))
+      (send (enc "cert" (exp (gen) l) B-0 (privk CA-0))))
+    ((send (enc "cert-req" B-0 (exp (gen) l) (privk B-0)))))
+  (label 12)
+  (parent 8)
+  (unrealized (0 0) (0 1) (1 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (he base) (lp ep l expn))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he he) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (precedes ((1 0) (2 0)) ((2 1) (0 0)) ((3 1) (0 1)) ((4 0) (3 0)))
+  (fn-of ("principal-of" (B (exp (gen) l)) (P (exp (gen) lp)))
+    (foo ((hash (exp (gen) (mul lp l)) (exp he ep)) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) (he (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen lp ep)
+  (operation encryption-test (added-strand ltkgen 1)
+    (enc "cert-req" B (exp (gen) l) (privk B)) (3 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) ep)) (recv he) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B)))))
+  (label 13)
+  (parent 9)
+  (unrealized)
+  (shape)
+  (maps)
+  (origs))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA CA-0 P P-0 name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (0 0)) ((2 0) (5 0))
+    ((3 0) (0 1)) ((3 0) (4 0)) ((3 0) (5 0)) ((4 1) (1 0))
+    ((5 1) (1 1)))
+  (fn-of ("principal-of" (P (exp (gen) l)) (P-0 (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk CA-0) (privk P) (privk P-0))
+  (uniq-gen e ep lp l)
+  (operation nonce-test
+    (algebra-contracted (he (exp (gen) (mul (rec e) ep l l-0))))
+    (exp (gen) (mul l l-0)) (1 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA-0)))))
+  (label 14)
+  (parent 10)
+  (unrealized (0 0) (0 1) (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA B-0 CA-0 P P-0 name) (e ep l lp l-0 expn)
+    (l-1 expr))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA)
+    (hl (exp (gen) (mul (rec l) lp l-0)))
+    (he (exp (gen) (mul (rec e) ep l-0 l-1))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B B-0) (CA CA-0)
+    (hl (exp (gen) l-0)) (he (exp (gen) (mul l-0 l-1))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B-0) (CA CA-0) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B-0) (l l-0))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (0 0)) ((2 0) (5 0))
+    ((3 0) (0 1)) ((3 0) (4 0)) ((3 0) (5 0)) ((4 1) (1 0))
+    ((5 1) (1 1)) ((6 0) (5 0)))
+  (fn-of
+    ("principal-of" (B-0 (exp (gen) l-0)) (P-0 (exp (gen) lp))
+      (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l-0)) (exp (gen) (mul ep l-0 l-1)))
+        key)))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l-0) (exp (gen) lp)) ((exp (gen) (mul l-0 l-1)) (gen))
+    ((exp (gen) (mul (rec l) lp l-0)) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep l-0 l-1)) (gen)))
+  (non-orig (privk CA) (privk B-0) (privk CA-0) (privk P-0))
+  (uniq-gen e ep l lp)
+  (operation nonce-test
+    (algebra-contracted (he (exp (gen) (mul (rec e) ep l-0 l-1))))
+    (exp (gen) (mul l-0 l-1)) (1 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) (mul (rec l) lp l-0)) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l-0 l-1)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l-0) B-0 (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l-0 l-1))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" B-0 (exp (gen) l-0) (privk B-0)))
+      (send (enc "cert" (exp (gen) l-0) B-0 (privk CA-0))))
+    ((send (enc "cert-req" B-0 (exp (gen) l-0) (privk B-0)))))
+  (label 15)
+  (parent 11)
+  (unrealized (0 0) (0 1) (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (A B CA B-0 CA-0 P name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A A) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B-0) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B-0) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B-0) (l l))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (0 0)) ((2 0) (3 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)))
+  (fn-of ("principal-of" (B-0 (exp (gen) l)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk B-0) (privk CA-0) (privk P))
+  (uniq-gen e ep lp)
+  (operation nonce-test
+    (algebra-contracted (he (exp (gen) (mul (rec e) ep l l-0))))
+    (exp (gen) (mul l l-0)) (1 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) A (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) B-0 (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA-0))))
+    ((recv (enc "cert-req" B-0 (exp (gen) l) (privk B-0)))
+      (send (enc "cert" (exp (gen) l) B-0 (privk CA-0))))
+    ((send (enc "cert-req" B-0 (exp (gen) l) (privk B-0)))))
+  (label 16)
+  (parent 12)
+  (unrealized (0 0) (0 1) (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P P-0 name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (4 0))
+    ((3 0) (5 0)) ((4 1) (1 0)) ((5 1) (0 0)) ((5 1) (1 1)))
+  (fn-of ("principal-of" (P (exp (gen) l)) (P-0 (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen e ep lp l)
+  (operation encryption-test (displaced 6 5 ca-gen 2)
+    (enc "cert" (exp (gen) l) A (privk CA-0)) (0 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 17)
+  (parent 14)
+  (unrealized (0 1) (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA CA-0 P P-0 name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (6 0))
+    ((3 0) (0 1)) ((3 0) (4 0)) ((3 0) (5 0)) ((4 1) (1 0))
+    ((5 1) (1 1)) ((6 1) (0 0)))
+  (fn-of ("principal-of" (P (exp (gen) l)) (P-0 (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk CA-0) (privk P) (privk P-0))
+  (uniq-gen e ep lp l)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) l) P (privk CA)) (0 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 18)
+  (parent 14)
+  (unrealized (0 1) (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA B-0 CA-0 P P-0 name) (e ep l lp l-0 expn)
+    (l-1 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA)
+    (hl (exp (gen) (mul (rec l) lp l-0)))
+    (he (exp (gen) (mul (rec e) ep l-0 l-1))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B B-0) (CA CA-0)
+    (hl (exp (gen) l-0)) (he (exp (gen) (mul l-0 l-1))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B-0) (CA CA-0) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B-0) (l l-0))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (7 0))
+    ((3 0) (0 1)) ((3 0) (4 0)) ((3 0) (5 0)) ((4 1) (1 0))
+    ((5 1) (1 1)) ((6 0) (5 0)) ((7 1) (0 0)))
+  (fn-of
+    ("principal-of" (P (exp (gen) l)) (B-0 (exp (gen) l-0))
+      (P-0 (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l-0)) (exp (gen) (mul ep l-0 l-1)))
+        key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) l-0) (gen))
+    ((exp (gen) lp) (gen)) ((exp (gen) l-0) (exp (gen) lp))
+    ((exp (gen) (mul l-0 l-1)) (gen))
+    ((exp (gen) (mul (rec l) lp l-0)) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep l-0 l-1)) (gen)))
+  (non-orig (privk CA) (privk B-0) (privk CA-0) (privk P) (privk P-0))
+  (uniq-gen e ep l lp)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) l) P (privk CA)) (0 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) (mul (rec l) lp l-0)) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l-0 l-1)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l-0) B-0 (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l-0 l-1))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" B-0 (exp (gen) l-0) (privk B-0)))
+      (send (enc "cert" (exp (gen) l-0) B-0 (privk CA-0))))
+    ((send (enc "cert-req" B-0 (exp (gen) l-0) (privk B-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 19)
+  (parent 15)
+  (unrealized (0 1) (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B B-0 CA P name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B-0) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B-0) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B-0) (l l))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((3 1) (0 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)))
+  (fn-of ("principal-of" (P (exp (gen) lp)) (B-0 (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk B-0) (privk CA) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (displaced 6 3 ca-gen 2)
+    (enc "cert" (exp (gen) lp) A (privk CA-0)) (0 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B-0 (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B-0 (exp (gen) l) (privk B-0)))
+      (send (enc "cert" (exp (gen) l) B-0 (privk CA))))
+    ((send (enc "cert-req" B-0 (exp (gen) l) (privk B-0)))))
+  (label 20)
+  (parent 16)
+  (unrealized (0 1) (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA B-0 CA-0 P name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B-0) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B-0) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B-0) (l l))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((2 0) (6 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)) ((6 1) (0 0)))
+  (fn-of ("principal-of" (P (exp (gen) lp)) (B-0 (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk B-0) (privk CA-0) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) lp) P (privk CA)) (0 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) B-0 (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA-0))))
+    ((recv (enc "cert-req" B-0 (exp (gen) l) (privk B-0)))
+      (send (enc "cert" (exp (gen) l) B-0 (privk CA-0))))
+    ((send (enc "cert-req" B-0 (exp (gen) l) (privk B-0))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA)))))
+  (label 21)
+  (parent 16)
+  (unrealized (0 1) (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (4 0))
+    ((3 0) (5 0)) ((4 1) (0 1)) ((4 1) (1 0)) ((5 1) (0 0))
+    ((5 1) (1 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen e ep lp l)
+  (operation encryption-test (displaced 6 4 ca-gen 2)
+    (enc "cert" (exp (gen) lp) B (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 22)
+  (parent 17)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (4 0))
+    ((3 0) (5 0)) ((3 0) (6 0)) ((4 1) (1 0)) ((5 1) (0 0))
+    ((5 1) (1 1)) ((6 1) (0 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen e ep lp l)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) lp) P-0 (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA)))))
+  (label 23)
+  (parent 17)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (6 0))
+    ((3 0) (4 0)) ((3 0) (5 0)) ((4 1) (0 1)) ((4 1) (1 0))
+    ((5 1) (1 1)) ((6 1) (0 0)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen e ep lp l)
+  (operation encryption-test (displaced 7 4 ca-gen 2)
+    (enc "cert" (exp (gen) lp) B (privk CA-0)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 24)
+  (parent 18)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA CA-0 P P-0 name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (6 0))
+    ((3 0) (4 0)) ((3 0) (5 0)) ((3 0) (7 0)) ((4 1) (1 0))
+    ((5 1) (1 1)) ((6 1) (0 0)) ((7 1) (0 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk CA-0) (privk P) (privk P-0))
+  (uniq-gen e ep lp l)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) lp) P-0 (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA)))))
+  (label 25)
+  (parent 18)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA B-0 CA-0 P P-0 name) (e ep l lp l-0 expn)
+    (l-1 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA)
+    (hl (exp (gen) (mul (rec l) lp l-0)))
+    (he (exp (gen) (mul (rec e) ep l-0 l-1))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B B-0) (CA CA-0)
+    (hl (exp (gen) l-0)) (he (exp (gen) (mul l-0 l-1))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B-0) (CA CA-0) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B-0) (l l-0))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P B) (CA CA)
+    (h (exp (gen) (mul (rec l) lp l-0))))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (7 0))
+    ((2 0) (8 0)) ((3 0) (4 0)) ((3 0) (5 0)) ((3 0) (8 0))
+    ((4 1) (1 0)) ((5 1) (1 1)) ((6 0) (5 0)) ((7 1) (0 0))
+    ((8 1) (0 1)))
+  (fn-of
+    ("principal-of" (B (exp (gen) (mul (rec l) lp l-0)))
+      (P (exp (gen) l)) (B-0 (exp (gen) l-0)) (P-0 (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l-0)) (exp (gen) (mul ep l-0 l-1)))
+        key)))
+  (neq ((exp (gen) (mul (rec l) lp l-0)) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l-0) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l-0) (exp (gen) lp)) ((exp (gen) (mul l-0 l-1)) (gen))
+    ((exp (gen) (mul (rec l) lp l-0)) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep l-0 l-1)) (gen)))
+  (non-orig (privk B) (privk CA) (privk B-0) (privk CA-0) (privk P)
+    (privk P-0))
+  (uniq-gen e ep l lp)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) (mul (rec l) lp l-0)) B (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) (mul (rec l) lp l-0)) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l-0 l-1)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l-0) B-0 (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l-0 l-1))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" B-0 (exp (gen) l-0) (privk B-0)))
+      (send (enc "cert" (exp (gen) l-0) B-0 (privk CA-0))))
+    ((send (enc "cert-req" B-0 (exp (gen) l-0) (privk B-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv
+       (enc "cert-req" B (exp (gen) (mul (rec l) lp l-0)) (privk B)))
+      (send
+        (enc "cert" (exp (gen) (mul (rec l) lp l-0)) B (privk CA)))))
+  (label 26)
+  (parent 19)
+  (unrealized (0 3) (8 0))
+  (comment "empty cohort"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((3 1) (0 0))
+    ((3 1) (1 0)) ((4 1) (0 1)) ((4 1) (1 1)) ((5 0) (4 0)))
+  (fn-of ("principal-of" (B (exp (gen) l)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (displaced 6 4 ca-gen 2)
+    (enc "cert" (exp (gen) l) B-0 (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B)))))
+  (label 27)
+  (parent 20)
+  (seen 27)
+  (unrealized (0 3))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((3 1) (0 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)) ((6 1) (0 1)))
+  (fn-of ("principal-of" (B (exp (gen) l)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) l) B (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA)))))
+  (label 28)
+  (parent 20)
+  (unrealized (0 3) (6 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((2 0) (6 0))
+    ((3 1) (1 0)) ((4 1) (0 1)) ((4 1) (1 1)) ((5 0) (4 0))
+    ((6 1) (0 0)))
+  (fn-of ("principal-of" (B (exp (gen) l)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (displaced 7 4 ca-gen 2)
+    (enc "cert" (exp (gen) l) B-0 (privk CA-0)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA)))))
+  (label 29)
+  (parent 21)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA B CA-0 P name) (e ep lp l expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((2 0) (6 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)) ((6 1) (0 0))
+    ((7 1) (0 1)))
+  (fn-of ("principal-of" (B (exp (gen) l)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk B) (privk CA-0) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) l) B (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA-0))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA-0))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA)))))
+  (label 30)
+  (parent 21)
+  (unrealized (0 3) (7 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul l l-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul l e (rec ep) l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (4 0))
+    ((3 0) (5 0)) ((4 1) (0 1)) ((4 1) (1 0)) ((5 1) (0 0))
+    ((5 1) (1 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo ((hash (exp (gen) (mul lp l)) (exp (gen) (mul l e l-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp))
+    ((exp (gen) (mul l e (rec ep) l-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul l l-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (ep-0 ep) (l-1 (mul e (rec ep) l-0))
+      (l-2 l-0)) (exp (gen) (mul l l-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l e (rec ep) l-0)))
+      (send key)) ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 31)
+  (parent 22)
+  (unrealized (1 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul l l-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul l e (rec ep) l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (4 0))
+    ((3 0) (5 0)) ((3 0) (6 0)) ((4 1) (1 0)) ((5 1) (0 0))
+    ((5 1) (1 1)) ((6 1) (0 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo ((hash (exp (gen) (mul lp l)) (exp (gen) (mul l e l-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp))
+    ((exp (gen) (mul l e (rec ep) l-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul l l-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (ep-0 ep) (l-1 (mul e (rec ep) l-0))
+      (l-2 l-0)) (exp (gen) (mul l l-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l e (rec ep) l-0)))
+      (send key)) ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA)))))
+  (label 32)
+  (parent 23)
+  (unrealized (1 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul l l-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul l e (rec ep) l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (6 0))
+    ((3 0) (4 0)) ((3 0) (5 0)) ((4 1) (0 1)) ((4 1) (1 0))
+    ((5 1) (1 1)) ((6 1) (0 0)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo ((hash (exp (gen) (mul lp l)) (exp (gen) (mul l e l-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp))
+    ((exp (gen) (mul l e (rec ep) l-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul l l-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (ep-0 ep) (l-1 (mul e (rec ep) l-0))
+      (l-2 l-0)) (exp (gen) (mul l l-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l e (rec ep) l-0)))
+      (send key)) ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 33)
+  (parent 24)
+  (unrealized (1 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA CA-0 P P-0 name) (lp l e ep expn) (l-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul l l-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul l e (rec ep) l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (6 0))
+    ((3 0) (4 0)) ((3 0) (5 0)) ((3 0) (7 0)) ((4 1) (1 0))
+    ((5 1) (1 1)) ((6 1) (0 0)) ((7 1) (0 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo ((hash (exp (gen) (mul lp l)) (exp (gen) (mul l e l-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp))
+    ((exp (gen) (mul l e (rec ep) l-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul l l-0)) (gen)))
+  (non-orig (privk CA) (privk CA-0) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (ep-0 ep) (l-1 (mul e (rec ep) l-0))
+      (l-2 l-0)) (exp (gen) (mul l l-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l e (rec ep) l-0)))
+      (send key)) ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA)))))
+  (label 34)
+  (parent 25)
+  (unrealized (1 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (e ep lp expn) (l expr) (l-0 expn))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B) (l l-0))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-0)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((3 1) (0 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)) ((5 0) (6 0))
+    ((6 1) (0 1)))
+  (fn-of ("principal-of" (B (exp (gen) l-0)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l-0)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l-0) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (displaced 7 5 ltkgen 1)
+    (enc "cert-req" B (exp (gen) l-0) (privk B)) (6 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l-0) (privk B))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA)))))
+  (label 35)
+  (parent 28)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (e ep lp expn) (l expr) (l-0 expn))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B) (l l-0))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B) (l l-0))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((3 1) (0 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)) ((6 1) (0 1))
+    ((7 0) (6 0)))
+  (fn-of ("principal-of" (B (exp (gen) l-0)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l-0)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l-0) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (added-strand ltkgen 1)
+    (enc "cert-req" B (exp (gen) l-0) (privk B)) (6 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l-0) (privk B))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l-0) (privk B)))))
+  (label 36)
+  (parent 28)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (ep lp e l expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul ep ep-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (0 0)) ((2 0) (3 0))
+    ((3 1) (1 0)) ((4 1) (0 1)) ((4 1) (1 1)) ((5 0) (4 0)))
+  (fn-of ("principal-of" (B (exp (gen) l)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep e ep-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen ep lp e)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (l-0 l) (l-1 (mul e (rec l) ep-0))
+      (ep-1 ep-0)) (exp (gen) (mul ep ep-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B)))))
+  (label 37)
+  (parent 29)
+  (unrealized (0 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA B CA-0 P name) (e ep lp expn) (l expr)
+    (l-0 expn))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA-0) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA-0) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B) (l l-0))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-0)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((2 0) (6 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)) ((5 0) (7 0))
+    ((6 1) (0 0)) ((7 1) (0 1)))
+  (fn-of ("principal-of" (B (exp (gen) l-0)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l-0)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l-0) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk B) (privk CA-0) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (displaced 8 5 ltkgen 1)
+    (enc "cert-req" B (exp (gen) l-0) (privk B)) (7 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA-0))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA-0))))
+    ((send (enc "cert-req" B (exp (gen) l-0) (privk B))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA)))))
+  (label 38)
+  (parent 30)
+  (seen 38)
+  (unrealized (0 3))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA B CA-0 P name) (e ep lp expn) (l expr)
+    (l-0 expn))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul (rec e) ep l l-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA-0) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul l l-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA-0) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B) (l l-0))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B) (l l-0))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((2 0) (6 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)) ((6 1) (0 0))
+    ((7 1) (0 1)) ((8 0) (7 0)))
+  (fn-of ("principal-of" (B (exp (gen) l-0)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l-0)) (exp (gen) (mul ep l l-0))) key)))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l-0) (exp (gen) lp)) ((exp (gen) (mul l l-0)) (gen))
+    ((exp (gen) (mul (rec e) ep l l-0)) (gen)))
+  (non-orig (privk CA) (privk B) (privk CA-0) (privk P))
+  (uniq-gen e ep lp)
+  (operation encryption-test (added-strand ltkgen 1)
+    (enc "cert-req" B (exp (gen) l-0) (privk B)) (7 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep l l-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul l l-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA-0))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA-0))))
+    ((send (enc "cert-req" B (exp (gen) l-0) (privk B))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l-0) (privk B)))))
+  (label 39)
+  (parent 30)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) ep ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul ep ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (4 0))
+    ((3 0) (5 0)) ((4 1) (0 1)) ((4 1) (1 0)) ((5 1) (0 0))
+    ((5 1) (1 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul ep ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (l-0 l) (e-0 e) (ep-1 ep)
+      (l-1 (mul (rec l) (rec e) ep ep ep-0)) (ep-2 ep-0))
+    (exp (gen) (mul ep ep-0)) (1 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep ep ep-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 40)
+  (parent 31)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) ep ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul ep ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (4 0))
+    ((3 0) (5 0)) ((3 0) (6 0)) ((4 1) (1 0)) ((5 1) (0 0))
+    ((5 1) (1 1)) ((6 1) (0 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul ep ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (l-0 l) (e-0 e) (ep-1 ep)
+      (l-1 (mul (rec l) (rec e) ep ep ep-0)) (ep-2 ep-0))
+    (exp (gen) (mul ep ep-0)) (1 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep ep ep-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA)))))
+  (label 41)
+  (parent 32)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) ep ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul ep ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (6 0))
+    ((3 0) (4 0)) ((3 0) (5 0)) ((4 1) (0 1)) ((4 1) (1 0))
+    ((5 1) (1 1)) ((6 1) (0 0)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul ep ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (l-0 l) (e-0 e) (ep-1 ep)
+      (l-1 (mul (rec l) (rec e) ep ep ep-0)) (ep-2 ep-0))
+    (exp (gen) (mul ep ep-0)) (1 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep ep ep-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 42)
+  (parent 33)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA CA-0 P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) ep ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul ep ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (6 0))
+    ((3 0) (4 0)) ((3 0) (5 0)) ((3 0) (7 0)) ((4 1) (1 0))
+    ((5 1) (1 1)) ((6 1) (0 0)) ((7 1) (0 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul ep ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l))
+    ((exp (gen) (mul (rec e) ep ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk CA-0) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (l-0 l) (e-0 e) (ep-1 ep)
+      (l-1 (mul (rec l) (rec e) ep ep ep-0)) (ep-2 ep-0))
+    (exp (gen) (mul ep ep-0)) (1 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) ep ep ep-0)))
+      (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA)))))
+  (label 43)
+  (parent 34)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (ep lp e l expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul ep ep-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((3 1) (0 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (0 1)) ((5 0) (4 0)))
+  (fn-of ("principal-of" (B (exp (gen) l)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep e ep-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen ep lp e)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (l-0 (mul e (rec l) ep-0)) (l-1 l)
+      (ep-1 ep-0)) (exp (gen) (mul ep ep-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B)))))
+  (label 44)
+  (parent 35)
+  (seen 46)
+  (unrealized (0 1))
+  (comment "2 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (ep lp e l expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul ep ep-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((3 1) (0 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)) ((6 1) (0 1)))
+  (fn-of ("principal-of" (B (exp (gen) l)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep e ep-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen ep lp e)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (l-0 (mul e (rec l) ep-0)) (l-1 l)
+      (ep-1 ep-0)) (exp (gen) (mul ep ep-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA)))))
+  (label 45)
+  (parent 36)
+  (seen 44)
+  (unrealized (6 0))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (ep lp e l expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul ep ep-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((3 1) (0 0))
+    ((3 1) (1 0)) ((4 1) (0 1)) ((4 1) (1 1)) ((5 0) (4 0)))
+  (fn-of ("principal-of" (P (exp (gen) lp)) (B (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep e ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen ep lp e)
+  (operation encryption-test (displaced 6 3 ca-gen 2)
+    (enc "cert" (exp (gen) lp) P (privk CA)) (0 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B)))))
+  (label 46)
+  (parent 37)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1 2 2)
+      ((key key) (hl (exp (gen) l)) (he (exp (gen) (mul ep ep-0))) (A P)
+        (B B) (CA CA) (A-0 P) (B-0 B) (CA-0 CA) (P P) (P-0 P) (l lp)
+        (lp lp) (e e) (ep ep))))
+  (origs))
+
+(defskeleton iadh-um
+  (vars (key data) (CA B CA-0 P name) (ep lp e l expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul ep ep-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((2 0) (6 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)) ((6 1) (0 0))
+    ((7 1) (0 1)))
+  (fn-of ("principal-of" (B (exp (gen) l)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep e ep-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk B) (privk CA-0) (privk P))
+  (uniq-gen ep lp e)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (l-0 (mul e (rec l) ep-0)) (l-1 l)
+      (ep-1 ep-0)) (exp (gen) (mul ep ep-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA-0))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA-0))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA)))))
+  (label 47)
+  (parent 39)
+  (unrealized (7 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (4 0))
+    ((3 0) (5 0)) ((4 1) (0 1)) ((4 1) (1 0)) ((5 1) (0 0))
+    ((5 1) (1 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul e ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (ep-1 ep) (ep-2 (mul e (rec ep) ep-0))
+      (ep-3 ep-0)) (exp (gen) (mul ep ep-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 48)
+  (parent 40)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (4 0))
+    ((3 0) (5 0)) ((3 0) (6 0)) ((4 1) (1 0)) ((5 1) (0 0))
+    ((5 1) (1 1)) ((6 1) (0 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul e ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (ep-1 ep) (ep-2 (mul e (rec ep) ep-0))
+      (ep-3 ep-0)) (exp (gen) (mul ep ep-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA)))))
+  (label 49)
+  (parent 41)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (6 0))
+    ((3 0) (4 0)) ((3 0) (5 0)) ((4 1) (0 1)) ((4 1) (1 0))
+    ((5 1) (1 1)) ((6 1) (0 0)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul e ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (ep-1 ep) (ep-2 (mul e (rec ep) ep-0))
+      (ep-3 ep-0)) (exp (gen) (mul ep ep-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 50)
+  (parent 42)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA CA-0 P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (6 0))
+    ((3 0) (4 0)) ((3 0) (5 0)) ((3 0) (7 0)) ((4 1) (1 0))
+    ((5 1) (1 1)) ((6 1) (0 0)) ((7 1) (0 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul e ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk CA-0) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (ep-1 ep) (ep-2 (mul e (rec ep) ep-0))
+      (ep-3 ep-0)) (exp (gen) (mul ep ep-0)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA)))))
+  (label 51)
+  (parent 43)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (B CA P name) (ep lp e l expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul ep ep-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((3 1) (0 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (0 1)) ((5 0) (4 0))
+    ((6 1) (0 1)))
+  (fn-of ("principal-of" (B (exp (gen) l)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep e ep-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen ep lp e)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) l) B (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA)))))
+  (label 52)
+  (parent 44)
+  (seen 44)
+  (unrealized (6 0))
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA B CA-0 P name) (ep lp e expn) (ep-0 expr)
+    (l expn))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul ep ep-0))) (l lp) (e e))
+  (defstrand init 5 (key key) (A P) (B B) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P B) (l l))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (3 0)) ((2 0) (6 0))
+    ((3 1) (1 0)) ((4 1) (1 1)) ((5 0) (4 0)) ((5 0) (7 0))
+    ((6 1) (0 0)) ((7 1) (0 1)))
+  (fn-of ("principal-of" (B (exp (gen) l)) (P (exp (gen) lp)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul ep e ep-0))) key)))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) lp) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk B) (privk CA-0) (privk P))
+  (uniq-gen ep lp e)
+  (operation encryption-test (displaced 8 5 ltkgen 1)
+    (enc "cert-req" B (exp (gen) l) (privk B)) (7 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) B (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA-0))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA-0))))
+    ((send (enc "cert-req" B (exp (gen) l) (privk B))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l) (privk B)))
+      (send (enc "cert" (exp (gen) l) B (privk CA)))))
+  (label 53)
+  (parent 47)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1 2 2)
+      ((key key) (hl (exp (gen) l)) (he (exp (gen) (mul ep ep-0))) (A P)
+        (B B) (CA CA) (A-0 P) (B-0 B) (CA-0 CA-0) (P P) (P-0 P) (l lp)
+        (lp lp) (e e) (ep ep))))
+  (origs))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (0 0))
+    ((3 0) (4 0)) ((4 1) (0 1)) ((4 1) (1 0)) ((5 1) (0 0))
+    ((5 1) (1 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul e ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation generalization weakened ((3 0) (5 0)))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 54)
+  (parent 48)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (0 0))
+    ((3 0) (4 0)) ((3 0) (6 0)) ((4 1) (1 0)) ((5 1) (0 0))
+    ((5 1) (1 1)) ((6 1) (0 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul e ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation generalization weakened ((3 0) (5 0)))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA)))))
+  (label 55)
+  (parent 49)
+  (seen 56)
+  (unrealized)
+  (comment "1 in cohort - 0 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (6 0))
+    ((3 0) (4 0)) ((4 1) (0 1)) ((4 1) (1 0)) ((5 1) (1 1))
+    ((6 1) (0 0)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul e ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation generalization weakened ((3 0) (5 0)))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 56)
+  (parent 50)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1 2 3)
+      ((key key) (hl (exp (gen) lp)) (he (exp (gen) (mul ep ep-0)))
+        (A P) (B P-0) (CA CA) (A-0 P-0) (B-0 P) (CA-0 CA) (P P)
+        (P-0 P-0) (l l) (lp lp) (e e) (ep ep))))
+  (origs))
+
+(defskeleton iadh-um
+  (vars (key data) (CA CA-0 P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA-0) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA-0) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA-0) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((2 0) (6 0))
+    ((3 0) (4 0)) ((3 0) (7 0)) ((4 1) (1 0)) ((5 1) (1 1))
+    ((6 1) (0 0)) ((7 1) (0 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul e ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk CA-0) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation generalization weakened ((3 0) (5 0)))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA-0)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA-0)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA-0))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA)))))
+  (label 57)
+  (parent 51)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1 2 3)
+      ((key key) (hl (exp (gen) lp)) (he (exp (gen) (mul ep ep-0)))
+        (A P) (B P-0) (CA CA) (A-0 P-0) (B-0 P) (CA-0 CA-0) (P P)
+        (P-0 P-0) (l l) (lp lp) (e e) (ep ep))))
+  (origs))
+
+(defskeleton iadh-um
+  (vars (key data) (CA P P-0 name) (lp l e ep expn) (ep-0 expr))
+  (defstrand init 5 (key key) (A P) (B P-0) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul ep ep-0))) (l l) (e e))
+  (defstrand init 5 (key key) (A P-0) (B P) (CA CA) (hl (exp (gen) l))
+    (he (exp (gen) (mul e ep-0))) (l lp) (e ep))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (defstrand ca-gen 2 (P P-0) (CA CA) (h (exp (gen) lp)))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (1 3)) ((1 2) (0 3)) ((2 0) (5 0)) ((3 0) (4 0))
+    ((4 1) (0 1)) ((4 1) (1 0)) ((5 1) (0 0)) ((5 1) (1 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l)))
+    (foo
+      ((hash (exp (gen) (mul lp l)) (exp (gen) (mul e ep ep-0))) key)))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l) (exp (gen) lp)) ((exp (gen) (mul e ep-0)) (gen))
+    ((exp (gen) lp) (exp (gen) l)) ((exp (gen) (mul ep ep-0)) (gen)))
+  (non-orig (privk CA) (privk P) (privk P-0))
+  (uniq-gen lp l e ep)
+  (operation generalization weakened ((3 0) (0 0)))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul ep ep-0))) (send key))
+    ((recv (enc "cert" (exp (gen) lp) P-0 (privk CA)))
+      (recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (send (exp (gen) ep)) (recv (exp (gen) (mul e ep-0))) (send key))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (enc "cert-req" P-0 (exp (gen) lp) (privk P-0)))
+      (send (enc "cert" (exp (gen) lp) P-0 (privk CA))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 58)
+  (parent 54)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1 2 3)
+      ((key key) (hl (exp (gen) lp)) (he (exp (gen) (mul ep ep-0)))
+        (A P) (B P-0) (CA CA) (A-0 P-0) (B-0 P) (CA-0 CA) (P P)
+        (P-0 P-0) (l l) (lp lp) (e e) (ep ep))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol iadh-um diffie-hellman
+  (defrole init
+    (vars (l e expn) (hl he base) (A B CA name) (key data))
+    (trace (recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    (non-orig (privk CA))
+    (fn-of (foo ((hash (exp hl l) (exp he e)) key)))
+    (neq (he (gen)) (hl (exp (gen) l))))
+  (defrole ltkgen
+    (vars (P name) (l expn))
+    (trace (send (enc "cert-req" P (exp (gen) l) (privk P))))
+    (fn-of ("principal-of" (P (exp (gen) l)))))
+  (defrole ca-gen
+    (vars (P CA name) (h base))
+    (trace (recv (enc "cert-req" P h (privk P)))
+      (send (enc "cert" h P (privk CA))))
+    (non-orig (privk P))
+    (fn-of ("principal-of" (P h)))
+    (neq (h (gen)))))
+
+(defskeleton iadh-um
+  (vars (A B CA P P-0 name) (he base) (e l lp expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp)) (he he)
+    (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l))))
+  (neq ((exp (gen) lp) (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e l lp)
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv he))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp he e)))
+      (send (hash (exp (gen) (mul l lp)) (exp he e)))))
+  (label 59)
+  (unrealized (0 0) (0 1) (3 0))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton iadh-um
+  (vars (A B CA P P-0 name) (he base) (e l lp expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp)) (he he)
+    (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (precedes ((0 2) (3 0)) ((1 0) (0 0)) ((2 0) (0 1)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l))))
+  (neq ((exp (gen) lp) (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e l lp)
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv he))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp he e)))
+      (send (hash (exp (gen) (mul l lp)) (exp he e)))))
+  (label 60)
+  (parent 59)
+  (unrealized (0 0) (0 1) (3 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA P P-0 name) (he base) (e l lp expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp)) (he he)
+    (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (deflistener (cat (exp (gen) (mul l lp)) (exp he e)))
+  (precedes ((0 2) (4 0)) ((1 0) (0 0)) ((2 0) (0 1)) ((4 1) (3 0)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l))))
+  (neq ((exp (gen) lp) (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e l lp)
+  (operation encryption-test
+    (added-listener (cat (exp (gen) (mul l lp)) (exp he e)))
+    (hash (exp (gen) (mul l lp)) (exp he e)) (3 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv he))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp he e)))
+      (send (hash (exp (gen) (mul l lp)) (exp he e))))
+    ((recv (cat (exp (gen) (mul l lp)) (exp he e)))
+      (send (cat (exp (gen) (mul l lp)) (exp he e)))))
+  (label 61)
+  (parent 60)
+  (unrealized (0 0) (0 1) (4 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol iadh-um diffie-hellman
+  (defrole init
+    (vars (l e expn) (hl he base) (A B CA name) (key data))
+    (trace (recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    (non-orig (privk CA))
+    (fn-of (foo ((hash (exp hl l) (exp he e)) key)))
+    (neq (he (gen)) (hl (exp (gen) l))))
+  (defrole ltkgen
+    (vars (P name) (l expn))
+    (trace (send (enc "cert-req" P (exp (gen) l) (privk P))))
+    (fn-of ("principal-of" (P (exp (gen) l)))))
+  (defrole ca-gen
+    (vars (P CA name) (h base))
+    (trace (recv (enc "cert-req" P h (privk P)))
+      (send (enc "cert" h P (privk CA))))
+    (non-orig (privk P))
+    (fn-of ("principal-of" (P h)))
+    (neq (h (gen)))))
+
+(defskeleton iadh-um
+  (vars (A B CA P P-0 name) (he base) (e l lp expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp)) (he he)
+    (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l))))
+  (neq ((exp (gen) lp) (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen l lp)
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv he))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp he e)))
+      (send (hash (exp (gen) (mul l lp)) (exp he e)))))
+  (label 62)
+  (unrealized (0 0) (0 1) (3 0))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton iadh-um
+  (vars (A B CA P P-0 name) (he base) (e l lp expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp)) (he he)
+    (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (precedes ((1 0) (0 0)) ((1 0) (3 0)) ((2 0) (0 1)) ((2 0) (3 0)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l))))
+  (neq ((exp (gen) lp) (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen l lp)
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv he))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp he e)))
+      (send (hash (exp (gen) (mul l lp)) (exp he e)))))
+  (label 63)
+  (parent 62)
+  (unrealized (0 0) (0 1) (3 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA P P-0 name) (he base) (e l lp expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp)) (he he)
+    (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (defstrand ltkgen 1 (P P-0) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (deflistener (cat (exp (gen) (mul l lp)) (exp he e)))
+  (precedes ((1 0) (0 0)) ((1 0) (4 0)) ((2 0) (0 1)) ((2 0) (4 0))
+    ((4 1) (3 0)))
+  (fn-of ("principal-of" (P-0 (exp (gen) lp)) (P (exp (gen) l))))
+  (neq ((exp (gen) lp) (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen l lp)
+  (operation encryption-test
+    (added-listener (cat (exp (gen) (mul l lp)) (exp he e)))
+    (hash (exp (gen) (mul l lp)) (exp he e)) (3 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv he))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((send (enc "cert-req" P-0 (exp (gen) lp) (privk P-0))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp he e)))
+      (send (hash (exp (gen) (mul l lp)) (exp he e))))
+    ((recv (cat (exp (gen) (mul l lp)) (exp he e)))
+      (send (cat (exp (gen) (mul l lp)) (exp he e)))))
+  (label 64)
+  (parent 63)
+  (unrealized (0 0) (0 1) (4 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol iadh-um diffie-hellman
+  (defrole init
+    (vars (l e expn) (hl he base) (A B CA name) (key data))
+    (trace (recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    (non-orig (privk CA))
+    (fn-of (foo ((hash (exp hl l) (exp he e)) key)))
+    (neq (he (gen)) (hl (exp (gen) l))))
+  (defrole ltkgen
+    (vars (P name) (l expn))
+    (trace (send (enc "cert-req" P (exp (gen) l) (privk P))))
+    (fn-of ("principal-of" (P (exp (gen) l)))))
+  (defrole ca-gen
+    (vars (P CA name) (h base))
+    (trace (recv (enc "cert-req" P h (privk P)))
+      (send (enc "cert" h P (privk CA))))
+    (non-orig (privk P))
+    (fn-of ("principal-of" (P h)))
+    (neq (h (gen)))))
+
+(defskeleton iadh-um
+  (vars (A B CA P name) (he base) (e l lp l-0 expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp)) (he he)
+    (l l-0) (e e))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (fn-of ("principal-of" (P (exp (gen) lp))))
+  (neq ((exp (gen) lp) (exp (gen) l-0)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e lp)
+  (traces
+    ((recv (enc "cert" (exp (gen) l-0) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv he))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp he e)))
+      (send (hash (exp (gen) (mul l lp)) (exp he e)))))
+  (label 65)
+  (unrealized (0 0) (0 1) (2 0))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton iadh-um
+  (vars (A B CA P name) (he base) (e l lp l-0 expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp)) (he he)
+    (l l-0) (e e))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (precedes ((0 2) (2 0)) ((1 0) (0 1)))
+  (fn-of ("principal-of" (P (exp (gen) lp))))
+  (neq ((exp (gen) lp) (exp (gen) l-0)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e lp)
+  (traces
+    ((recv (enc "cert" (exp (gen) l-0) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv he))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp he e)))
+      (send (hash (exp (gen) (mul l lp)) (exp he e)))))
+  (label 66)
+  (parent 65)
+  (unrealized (0 0) (0 1) (2 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA P name) (he base) (e l lp l-0 expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp)) (he he)
+    (l l-0) (e e))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
+  (deflistener (cat (exp (gen) (mul l lp)) (exp he e)))
+  (precedes ((0 2) (3 0)) ((1 0) (0 1)) ((3 1) (2 0)))
+  (fn-of ("principal-of" (P (exp (gen) lp))))
+  (neq ((exp (gen) lp) (exp (gen) l-0)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e lp)
+  (operation encryption-test
+    (added-listener (cat (exp (gen) (mul l lp)) (exp he e)))
+    (hash (exp (gen) (mul l lp)) (exp he e)) (2 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l-0) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv he))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp he e)))
+      (send (hash (exp (gen) (mul l lp)) (exp he e))))
+    ((recv (cat (exp (gen) (mul l lp)) (exp he e)))
+      (send (cat (exp (gen) (mul l lp)) (exp he e)))))
+  (label 67)
+  (parent 66)
+  (unrealized (0 0) (0 1) (3 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA P name) (e l lp l-0 expn) (lp-0 expr))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) lp lp-0))) (l l-0) (e e))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+  (deflistener (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+  (precedes ((0 2) (3 0)) ((1 0) (0 1)) ((3 1) (2 0)))
+  (fn-of ("principal-of" (P (exp (gen) lp))))
+  (neq ((exp (gen) lp) (exp (gen) l-0))
+    ((exp (gen) (mul (rec e) lp lp-0)) (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e lp)
+  (operation nonce-test
+    (algebra-contracted (he (exp (gen) (mul (rec e) lp lp-0))))
+    (exp (gen) (mul lp lp-0)) (3 0) (exp (gen) e))
+  (traces
+    ((recv (enc "cert" (exp (gen) l-0) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) lp lp-0))))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+      (send (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0)))))
+    ((recv (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+      (send (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))))
+  (label 68)
+  (parent 67)
+  (unrealized (0 0) (0 1) (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA P name) (e l lp l-0 expn) (lp-0 expr))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) lp lp-0))) (l l-0) (e e))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+  (deflistener (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+  (defstrand ca-gen 2 (P A) (CA CA) (h (exp (gen) l-0)))
+  (precedes ((0 2) (3 0)) ((1 0) (0 1)) ((3 1) (2 0)) ((4 1) (0 0)))
+  (fn-of ("principal-of" (A (exp (gen) l-0)) (P (exp (gen) lp))))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) lp) (exp (gen) l-0))
+    ((exp (gen) (mul (rec e) lp lp-0)) (gen)))
+  (non-orig (privk A) (privk CA))
+  (uniq-gen e lp)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) l-0) A (privk CA)) (0 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l-0) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) lp lp-0))))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+      (send (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0)))))
+    ((recv (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+      (send (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0)))))
+    ((recv (enc "cert-req" A (exp (gen) l-0) (privk A)))
+      (send (enc "cert" (exp (gen) l-0) A (privk CA)))))
+  (label 69)
+  (parent 68)
+  (unrealized (0 1) (0 3) (4 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA P name) (e l lp expn) (lp-0 expr) (l-0 expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) lp lp-0))) (l l-0) (e e))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+  (deflistener (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+  (defstrand ca-gen 2 (P A) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P A) (l l-0))
+  (precedes ((0 2) (3 0)) ((1 0) (0 1)) ((3 1) (2 0)) ((4 1) (0 0))
+    ((5 0) (4 0)))
+  (fn-of ("principal-of" (A (exp (gen) l-0)) (P (exp (gen) lp))))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) lp) (exp (gen) l-0))
+    ((exp (gen) (mul (rec e) lp lp-0)) (gen)))
+  (non-orig (privk A) (privk CA))
+  (uniq-gen e lp)
+  (operation encryption-test (added-strand ltkgen 1)
+    (enc "cert-req" A (exp (gen) l-0) (privk A)) (4 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l-0) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) lp lp-0))))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+      (send (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0)))))
+    ((recv (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+      (send (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0)))))
+    ((recv (enc "cert-req" A (exp (gen) l-0) (privk A)))
+      (send (enc "cert" (exp (gen) l-0) A (privk CA))))
+    ((send (enc "cert-req" A (exp (gen) l-0) (privk A)))))
+  (label 70)
+  (parent 69)
+  (unrealized (0 1) (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A CA P name) (e l lp expn) (lp-0 expr) (l-0 expn))
+  (defstrand init 4 (A A) (B P) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul (rec e) lp lp-0))) (l l-0) (e e))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (deflistener (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+  (deflistener (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+  (defstrand ca-gen 2 (P A) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P A) (l l-0))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (3 0)) ((1 0) (6 0)) ((3 1) (2 0)) ((4 1) (0 0))
+    ((5 0) (4 0)) ((6 1) (0 1)))
+  (fn-of ("principal-of" (P (exp (gen) lp)) (A (exp (gen) l-0))))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l-0) (gen))
+    ((exp (gen) lp) (exp (gen) l-0))
+    ((exp (gen) (mul (rec e) lp lp-0)) (gen)))
+  (non-orig (privk A) (privk CA) (privk P))
+  (uniq-gen e lp)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) lp) P (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) l-0) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) lp lp-0))))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+      (send (hash (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0)))))
+    ((recv (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0))))
+      (send (cat (exp (gen) (mul l lp)) (exp (gen) (mul lp lp-0)))))
+    ((recv (enc "cert-req" A (exp (gen) l-0) (privk A)))
+      (send (enc "cert" (exp (gen) l-0) A (privk CA))))
+    ((send (enc "cert-req" A (exp (gen) l-0) (privk A))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA)))))
+  (label 71)
+  (parent 70)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A CA P name) (l e lp l-0 expn) (l-1 expr))
+  (defstrand init 4 (A A) (B P) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul l-0 l-1))) (l l-0) (e e))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (deflistener
+    (hash (exp (gen) (mul l lp)) (exp (gen) (mul e l-0 l-1))))
+  (deflistener (cat (exp (gen) (mul l lp)) (exp (gen) (mul e l-0 l-1))))
+  (defstrand ca-gen 2 (P A) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P A) (l l-0))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (3 0)) ((1 0) (6 0)) ((3 1) (2 0)) ((4 1) (0 0))
+    ((5 0) (4 0)) ((6 1) (0 1)))
+  (fn-of ("principal-of" (P (exp (gen) lp)) (A (exp (gen) l-0))))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l-0) (gen))
+    ((exp (gen) lp) (exp (gen) l-0)) ((exp (gen) (mul l-0 l-1)) (gen)))
+  (non-orig (privk A) (privk CA) (privk P))
+  (uniq-gen e lp)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (lp-0 lp)
+      (lp-1 (mul e (rec lp) l-0 l-1)) (l-2 l-0) (l-3 l-1))
+    (exp (gen) (mul l-0 l-1)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l-0) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul l-0 l-1))))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp (gen) (mul e l-0 l-1))))
+      (send (hash (exp (gen) (mul l lp)) (exp (gen) (mul e l-0 l-1)))))
+    ((recv (cat (exp (gen) (mul l lp)) (exp (gen) (mul e l-0 l-1))))
+      (send (cat (exp (gen) (mul l lp)) (exp (gen) (mul e l-0 l-1)))))
+    ((recv (enc "cert-req" A (exp (gen) l-0) (privk A)))
+      (send (enc "cert" (exp (gen) l-0) A (privk CA))))
+    ((send (enc "cert-req" A (exp (gen) l-0) (privk A))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA)))))
+  (label 72)
+  (parent 71)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A CA P name) (l e lp l-0 expn) (l-1 expr))
+  (defstrand init 4 (A A) (B P) (CA CA) (hl (exp (gen) lp))
+    (he (exp (gen) (mul l-0 l-1))) (l l-0) (e e))
+  (defstrand ltkgen 1 (P P) (l lp))
+  (deflistener
+    (hash (exp (gen) (mul l lp)) (exp (gen) (mul e l-0 l-1))))
+  (defstrand ca-gen 2 (P A) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P A) (l l-0))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) lp)))
+  (precedes ((0 2) (2 0)) ((1 0) (5 0)) ((3 1) (0 0)) ((4 0) (3 0))
+    ((5 1) (0 1)))
+  (fn-of ("principal-of" (P (exp (gen) lp)) (A (exp (gen) l-0))))
+  (neq ((exp (gen) lp) (gen)) ((exp (gen) l-0) (gen))
+    ((exp (gen) lp) (exp (gen) l-0)) ((exp (gen) (mul l-0 l-1)) (gen)))
+  (non-orig (privk A) (privk CA) (privk P))
+  (uniq-gen e lp)
+  (operation generalization deleted (3 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l-0) A (privk CA)))
+      (recv (enc "cert" (exp (gen) lp) P (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul l-0 l-1))))
+    ((send (enc "cert-req" P (exp (gen) lp) (privk P))))
+    ((recv (hash (exp (gen) (mul l lp)) (exp (gen) (mul e l-0 l-1))))
+      (send (hash (exp (gen) (mul l lp)) (exp (gen) (mul e l-0 l-1)))))
+    ((recv (enc "cert-req" A (exp (gen) l-0) (privk A)))
+      (send (enc "cert" (exp (gen) l-0) A (privk CA))))
+    ((send (enc "cert-req" A (exp (gen) l-0) (privk A))))
+    ((recv (enc "cert-req" P (exp (gen) lp) (privk P)))
+      (send (enc "cert" (exp (gen) lp) P (privk CA)))))
+  (label 73)
+  (parent 72)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1 2)
+      ((he (exp (gen) (mul l-0 l-1))) (e e) (l l) (lp lp) (l-0 l-0)
+        (A A) (B P) (CA CA) (P P))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol iadh-um diffie-hellman
+  (defrole init
+    (vars (l e expn) (hl he base) (A B CA name) (key data))
+    (trace (recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    (non-orig (privk CA))
+    (fn-of (foo ((hash (exp hl l) (exp he e)) key)))
+    (neq (he (gen)) (hl (exp (gen) l))))
+  (defrole ltkgen
+    (vars (P name) (l expn))
+    (trace (send (enc "cert-req" P (exp (gen) l) (privk P))))
+    (fn-of ("principal-of" (P (exp (gen) l)))))
+  (defrole ca-gen
+    (vars (P CA name) (h base))
+    (trace (recv (enc "cert-req" P h (privk P)))
+      (send (enc "cert" h P (privk CA))))
+    (non-orig (privk P))
+    (fn-of ("principal-of" (P h)))
+    (neq (h (gen)))))
+
+(defskeleton iadh-um
+  (vars (A B CA P name) (he hl base) (e l expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl hl) (he he) (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (deflistener (hash (exp hl l) (exp he e)))
+  (fn-of ("principal-of" (P (exp (gen) l))))
+  (neq (hl (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e l)
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e))
+      (recv he)) ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((recv (hash (exp hl l) (exp he e)))
+      (send (hash (exp hl l) (exp he e)))))
+  (label 74)
+  (unrealized (0 0) (0 1) (2 0))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton iadh-um
+  (vars (A B CA P name) (he hl base) (e l expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl hl) (he he) (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (deflistener (hash (exp hl l) (exp he e)))
+  (precedes ((0 2) (2 0)) ((1 0) (0 0)))
+  (fn-of ("principal-of" (P (exp (gen) l))))
+  (neq (hl (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e l)
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e))
+      (recv he)) ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((recv (hash (exp hl l) (exp he e)))
+      (send (hash (exp hl l) (exp he e)))))
+  (label 75)
+  (parent 74)
+  (unrealized (0 0) (0 1) (2 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA P name) (he hl base) (e l expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl hl) (he he) (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (deflistener (hash (exp hl l) (exp he e)))
+  (deflistener (cat (exp hl l) (exp he e)))
+  (precedes ((0 2) (3 0)) ((1 0) (0 0)) ((3 1) (2 0)))
+  (fn-of ("principal-of" (P (exp (gen) l))))
+  (neq (hl (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e l)
+  (operation encryption-test
+    (added-listener (cat (exp hl l) (exp he e)))
+    (hash (exp hl l) (exp he e)) (2 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e))
+      (recv he)) ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((recv (hash (exp hl l) (exp he e)))
+      (send (hash (exp hl l) (exp he e))))
+    ((recv (cat (exp hl l) (exp he e)))
+      (send (cat (exp hl l) (exp he e)))))
+  (label 76)
+  (parent 75)
+  (unrealized (0 0) (0 1) (3 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA P name) (he base) (e l expn) (l-0 expr))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) l-0)) (he he)
+    (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (deflistener (hash (exp (gen) (mul l l-0)) (exp he e)))
+  (deflistener (cat (exp (gen) (mul l l-0)) (exp he e)))
+  (precedes ((0 2) (3 0)) ((1 0) (0 0)) ((3 1) (2 0)))
+  (fn-of ("principal-of" (P (exp (gen) l))))
+  (neq ((exp (gen) l-0) (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e l)
+  (operation nonce-test (algebra-contracted (hl (exp (gen) l-0)))
+    (exp (gen) (mul l l-0)) (3 0) (exp (gen) l))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv he))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((recv (hash (exp (gen) (mul l l-0)) (exp he e)))
+      (send (hash (exp (gen) (mul l l-0)) (exp he e))))
+    ((recv (cat (exp (gen) (mul l l-0)) (exp he e)))
+      (send (cat (exp (gen) (mul l l-0)) (exp he e)))))
+  (label 77)
+  (parent 76)
+  (unrealized (0 0) (0 1) (3 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA P name) (e l expn) (l-0 l-1 expr))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul (rec e) l l-1))) (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (deflistener (hash (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+  (deflistener (cat (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+  (precedes ((0 2) (3 0)) ((1 0) (0 0)) ((3 1) (2 0)))
+  (fn-of ("principal-of" (P (exp (gen) l))))
+  (neq ((exp (gen) l-0) (exp (gen) l))
+    ((exp (gen) (mul (rec e) l l-1)) (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e l)
+  (operation nonce-test
+    (algebra-contracted (he (exp (gen) (mul (rec e) l l-1))))
+    (exp (gen) (mul l l-1)) (3 0) (exp (gen) e))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) l l-1))))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((recv (hash (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+      (send (hash (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1)))))
+    ((recv (cat (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+      (send (cat (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))))
+  (label 78)
+  (parent 77)
+  (unrealized (0 0) (0 1) (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (B CA P name) (e l expn) (l-0 l-1 expr))
+  (defstrand init 4 (A P) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul (rec e) l l-1))) (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (deflistener (hash (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+  (deflistener (cat (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (3 0)) ((1 0) (4 0)) ((3 1) (2 0)) ((4 1) (0 0)))
+  (fn-of ("principal-of" (P (exp (gen) l))))
+  (neq ((exp (gen) l) (gen)) ((exp (gen) l-0) (exp (gen) l))
+    ((exp (gen) (mul (rec e) l l-1)) (gen)))
+  (non-orig (privk CA) (privk P))
+  (uniq-gen e l)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) l) P (privk CA)) (0 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) l l-1))))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((recv (hash (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+      (send (hash (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1)))))
+    ((recv (cat (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+      (send (cat (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1)))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA)))))
+  (label 79)
+  (parent 78)
+  (unrealized (0 1) (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (B CA P name) (e l expn) (l-0 l-1 expr))
+  (defstrand init 4 (A P) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul (rec e) l l-1))) (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (deflistener (hash (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+  (deflistener (cat (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-0)))
+  (precedes ((0 2) (3 0)) ((1 0) (4 0)) ((3 1) (2 0)) ((4 1) (0 0))
+    ((5 1) (0 1)))
+  (fn-of ("principal-of" (B (exp (gen) l-0)) (P (exp (gen) l))))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l-0) (exp (gen) l))
+    ((exp (gen) (mul (rec e) l l-1)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen e l)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) l-0) B (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) l l-1))))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((recv (hash (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+      (send (hash (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1)))))
+    ((recv (cat (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1))))
+      (send (cat (exp (gen) (mul l l-0)) (exp (gen) (mul l l-1)))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA)))))
+  (label 80)
+  (parent 79)
+  (unrealized (0 3) (5 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (B CA P name) (e l expn) (l-0 expr) (l-1 expn))
+  (defstrand init 4 (A P) (B B) (CA CA) (hl (exp (gen) l-1))
+    (he (exp (gen) (mul (rec e) l l-0))) (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (deflistener (hash (exp (gen) (mul l l-1)) (exp (gen) (mul l l-0))))
+  (deflistener (cat (exp (gen) (mul l l-1)) (exp (gen) (mul l l-0))))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-1)))
+  (defstrand ltkgen 1 (P B) (l l-1))
+  (precedes ((0 2) (3 0)) ((1 0) (4 0)) ((3 1) (2 0)) ((4 1) (0 0))
+    ((5 1) (0 1)) ((6 0) (5 0)))
+  (fn-of ("principal-of" (B (exp (gen) l-1)) (P (exp (gen) l))))
+  (neq ((exp (gen) l-1) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l-1) (exp (gen) l))
+    ((exp (gen) (mul (rec e) l l-0)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen e l)
+  (operation encryption-test (added-strand ltkgen 1)
+    (enc "cert-req" B (exp (gen) l-1) (privk B)) (5 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l-1) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul (rec e) l l-0))))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((recv (hash (exp (gen) (mul l l-1)) (exp (gen) (mul l l-0))))
+      (send (hash (exp (gen) (mul l l-1)) (exp (gen) (mul l l-0)))))
+    ((recv (cat (exp (gen) (mul l l-1)) (exp (gen) (mul l l-0))))
+      (send (cat (exp (gen) (mul l l-1)) (exp (gen) (mul l l-0)))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l-1) (privk B)))
+      (send (enc "cert" (exp (gen) l-1) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l-1) (privk B)))))
+  (label 81)
+  (parent 80)
+  (unrealized (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (B CA P name) (e l l-0 expn) (l-1 expr))
+  (defstrand init 4 (A P) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul l-0 l-1))) (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (deflistener
+    (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e l-0 l-1))))
+  (deflistener
+    (cat (exp (gen) (mul l l-0)) (exp (gen) (mul e l-0 l-1))))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B) (l l-0))
+  (precedes ((0 2) (3 0)) ((1 0) (4 0)) ((3 1) (2 0)) ((4 1) (0 0))
+    ((5 1) (0 1)) ((6 0) (5 0)))
+  (fn-of ("principal-of" (B (exp (gen) l-0)) (P (exp (gen) l))))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l-0) (exp (gen) l)) ((exp (gen) (mul l-0 l-1)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen e l)
+  (operation nonce-test
+    (algebra-contracted (e-0 e) (l-2 l) (l-3 (mul e (rec l) l-0 l-1))
+      (l-4 l-0) (l-5 l-1)) (exp (gen) (mul l-0 l-1)) (0 3))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul l-0 l-1))))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((recv (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e l-0 l-1))))
+      (send (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e l-0 l-1)))))
+    ((recv (cat (exp (gen) (mul l l-0)) (exp (gen) (mul e l-0 l-1))))
+      (send (cat (exp (gen) (mul l l-0)) (exp (gen) (mul e l-0 l-1)))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l-0) (privk B)))))
+  (label 82)
+  (parent 81)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (B CA P name) (e l l-0 expn) (l-1 expr))
+  (defstrand init 4 (A P) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) (mul l-0 l-1))) (l l) (e e))
+  (defstrand ltkgen 1 (P P) (l l))
+  (deflistener
+    (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e l-0 l-1))))
+  (defstrand ca-gen 2 (P P) (CA CA) (h (exp (gen) l)))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B) (l l-0))
+  (precedes ((0 2) (2 0)) ((1 0) (3 0)) ((3 1) (0 0)) ((4 1) (0 1))
+    ((5 0) (4 0)))
+  (fn-of ("principal-of" (B (exp (gen) l-0)) (P (exp (gen) l))))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l-0) (exp (gen) l)) ((exp (gen) (mul l-0 l-1)) (gen)))
+  (non-orig (privk B) (privk CA) (privk P))
+  (uniq-gen e l)
+  (operation generalization deleted (3 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) P (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) (mul l-0 l-1))))
+    ((send (enc "cert-req" P (exp (gen) l) (privk P))))
+    ((recv (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e l-0 l-1))))
+      (send (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e l-0 l-1)))))
+    ((recv (enc "cert-req" P (exp (gen) l) (privk P)))
+      (send (enc "cert" (exp (gen) l) P (privk CA))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l-0) (privk B)))))
+  (label 83)
+  (parent 82)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1 2)
+      ((he (exp (gen) (mul l-0 l-1))) (hl (exp (gen) l-0)) (e e) (l l)
+        (A P) (B B) (CA CA) (P P))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol iadh-um diffie-hellman
+  (defrole init
+    (vars (l e expn) (hl he base) (A B CA name) (key data))
+    (trace (recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e)) (recv he)
+      (send key))
+    (non-orig (privk CA))
+    (fn-of (foo ((hash (exp hl l) (exp he e)) key)))
+    (neq (he (gen)) (hl (exp (gen) l))))
+  (defrole ltkgen
+    (vars (P name) (l expn))
+    (trace (send (enc "cert-req" P (exp (gen) l) (privk P))))
+    (fn-of ("principal-of" (P (exp (gen) l)))))
+  (defrole ca-gen
+    (vars (P CA name) (h base))
+    (trace (recv (enc "cert-req" P h (privk P)))
+      (send (enc "cert" h P (privk CA))))
+    (non-orig (privk P))
+    (fn-of ("principal-of" (P h)))
+    (neq (h (gen)))))
+
+(defskeleton iadh-um
+  (vars (A B CA name) (he hl base) (e l expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl hl) (he he) (l l) (e e))
+  (deflistener (hash (exp hl l) (exp he e)))
+  (neq (hl (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e)
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e))
+      (recv he))
+    ((recv (hash (exp hl l) (exp he e)))
+      (send (hash (exp hl l) (exp he e)))))
+  (label 84)
+  (unrealized (0 0) (0 1) (1 0))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton iadh-um
+  (vars (A B CA name) (he hl base) (e l expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl hl) (he he) (l l) (e e))
+  (deflistener (hash (exp hl l) (exp he e)))
+  (precedes ((0 2) (1 0)))
+  (neq (hl (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e)
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e))
+      (recv he))
+    ((recv (hash (exp hl l) (exp he e)))
+      (send (hash (exp hl l) (exp he e)))))
+  (label 85)
+  (parent 84)
+  (unrealized (0 0) (0 1) (1 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA name) (he hl base) (e l expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl hl) (he he) (l l) (e e))
+  (deflistener (hash (exp hl l) (exp he e)))
+  (deflistener (cat (exp hl l) (exp he e)))
+  (precedes ((0 2) (2 0)) ((2 1) (1 0)))
+  (neq (hl (exp (gen) l)) (he (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e)
+  (operation encryption-test
+    (added-listener (cat (exp hl l) (exp he e)))
+    (hash (exp hl l) (exp he e)) (1 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e))
+      (recv he))
+    ((recv (hash (exp hl l) (exp he e)))
+      (send (hash (exp hl l) (exp he e))))
+    ((recv (cat (exp hl l) (exp he e)))
+      (send (cat (exp hl l) (exp he e)))))
+  (label 86)
+  (parent 85)
+  (unrealized (0 0) (0 1) (2 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA name) (hl base) (e l expn) (e-0 expr))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl hl) (he (exp (gen) e-0))
+    (l l) (e e))
+  (deflistener (hash (exp hl l) (exp (gen) (mul e e-0))))
+  (deflistener (cat (exp hl l) (exp (gen) (mul e e-0))))
+  (precedes ((0 2) (2 0)) ((2 1) (1 0)))
+  (neq (hl (exp (gen) l)) ((exp (gen) e-0) (gen)))
+  (non-orig (privk CA))
+  (uniq-gen e)
+  (operation nonce-test (algebra-contracted (he (exp (gen) e-0)))
+    (exp (gen) (mul e e-0)) (2 0) (exp (gen) e))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e))
+      (recv (exp (gen) e-0)))
+    ((recv (hash (exp hl l) (exp (gen) (mul e e-0))))
+      (send (hash (exp hl l) (exp (gen) (mul e e-0)))))
+    ((recv (cat (exp hl l) (exp (gen) (mul e e-0))))
+      (send (cat (exp hl l) (exp (gen) (mul e e-0))))))
+  (label 87)
+  (parent 86)
+  (unrealized (0 0) (0 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA name) (hl base) (e l expn) (e-0 expr))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl hl) (he (exp (gen) e-0))
+    (l l) (e e))
+  (deflistener (hash (exp hl l) (exp (gen) (mul e e-0))))
+  (deflistener (cat (exp hl l) (exp (gen) (mul e e-0))))
+  (defstrand ca-gen 2 (P A) (CA CA) (h (exp (gen) l)))
+  (precedes ((0 2) (2 0)) ((2 1) (1 0)) ((3 1) (0 0)))
+  (fn-of ("principal-of" (A (exp (gen) l))))
+  (neq ((exp (gen) l) (gen)) (hl (exp (gen) l)) ((exp (gen) e-0) (gen)))
+  (non-orig (privk A) (privk CA))
+  (uniq-gen e)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" (exp (gen) l) A (privk CA)) (0 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e))
+      (recv (exp (gen) e-0)))
+    ((recv (hash (exp hl l) (exp (gen) (mul e e-0))))
+      (send (hash (exp hl l) (exp (gen) (mul e e-0)))))
+    ((recv (cat (exp hl l) (exp (gen) (mul e e-0))))
+      (send (cat (exp hl l) (exp (gen) (mul e e-0)))))
+    ((recv (enc "cert-req" A (exp (gen) l) (privk A)))
+      (send (enc "cert" (exp (gen) l) A (privk CA)))))
+  (label 88)
+  (parent 87)
+  (unrealized (0 1) (3 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA name) (hl base) (e expn) (e-0 expr) (l expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl hl) (he (exp (gen) e-0))
+    (l l) (e e))
+  (deflistener (hash (exp hl l) (exp (gen) (mul e e-0))))
+  (deflistener (cat (exp hl l) (exp (gen) (mul e e-0))))
+  (defstrand ca-gen 2 (P A) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P A) (l l))
+  (precedes ((0 2) (2 0)) ((2 1) (1 0)) ((3 1) (0 0)) ((4 0) (3 0)))
+  (fn-of ("principal-of" (A (exp (gen) l))))
+  (neq ((exp (gen) l) (gen)) (hl (exp (gen) l)) ((exp (gen) e-0) (gen)))
+  (non-orig (privk A) (privk CA))
+  (uniq-gen e)
+  (operation encryption-test (added-strand ltkgen 1)
+    (enc "cert-req" A (exp (gen) l) (privk A)) (3 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e))
+      (recv (exp (gen) e-0)))
+    ((recv (hash (exp hl l) (exp (gen) (mul e e-0))))
+      (send (hash (exp hl l) (exp (gen) (mul e e-0)))))
+    ((recv (cat (exp hl l) (exp (gen) (mul e e-0))))
+      (send (cat (exp hl l) (exp (gen) (mul e e-0)))))
+    ((recv (enc "cert-req" A (exp (gen) l) (privk A)))
+      (send (enc "cert" (exp (gen) l) A (privk CA))))
+    ((send (enc "cert-req" A (exp (gen) l) (privk A)))))
+  (label 89)
+  (parent 88)
+  (unrealized (0 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA name) (hl base) (e expn) (e-0 expr) (l expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl hl) (he (exp (gen) e-0))
+    (l l) (e e))
+  (deflistener (hash (exp hl l) (exp (gen) (mul e e-0))))
+  (deflistener (cat (exp hl l) (exp (gen) (mul e e-0))))
+  (defstrand ca-gen 2 (P A) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P A) (l l))
+  (defstrand ca-gen 2 (P B) (CA CA) (h hl))
+  (precedes ((0 2) (2 0)) ((2 1) (1 0)) ((3 1) (0 0)) ((4 0) (3 0))
+    ((5 1) (0 1)))
+  (fn-of ("principal-of" (B hl) (A (exp (gen) l))))
+  (neq (hl (gen)) ((exp (gen) l) (gen)) (hl (exp (gen) l))
+    ((exp (gen) e-0) (gen)))
+  (non-orig (privk A) (privk B) (privk CA))
+  (uniq-gen e)
+  (operation encryption-test (added-strand ca-gen 2)
+    (enc "cert" hl B (privk CA)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" hl B (privk CA))) (send (exp (gen) e))
+      (recv (exp (gen) e-0)))
+    ((recv (hash (exp hl l) (exp (gen) (mul e e-0))))
+      (send (hash (exp hl l) (exp (gen) (mul e e-0)))))
+    ((recv (cat (exp hl l) (exp (gen) (mul e e-0))))
+      (send (cat (exp hl l) (exp (gen) (mul e e-0)))))
+    ((recv (enc "cert-req" A (exp (gen) l) (privk A)))
+      (send (enc "cert" (exp (gen) l) A (privk CA))))
+    ((send (enc "cert-req" A (exp (gen) l) (privk A))))
+    ((recv (enc "cert-req" B hl (privk B)))
+      (send (enc "cert" hl B (privk CA)))))
+  (label 90)
+  (parent 89)
+  (unrealized (5 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA name) (e expn) (e-0 expr) (l l-0 expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) e-0)) (l l) (e e))
+  (deflistener (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e e-0))))
+  (deflistener (cat (exp (gen) (mul l l-0)) (exp (gen) (mul e e-0))))
+  (defstrand ca-gen 2 (P A) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P A) (l l))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B) (l l-0))
+  (precedes ((0 2) (2 0)) ((2 1) (1 0)) ((3 1) (0 0)) ((4 0) (3 0))
+    ((5 1) (0 1)) ((6 0) (5 0)))
+  (fn-of ("principal-of" (B (exp (gen) l-0)) (A (exp (gen) l))))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l-0) (exp (gen) l)) ((exp (gen) e-0) (gen)))
+  (non-orig (privk A) (privk B) (privk CA))
+  (uniq-gen e)
+  (operation encryption-test (added-strand ltkgen 1)
+    (enc "cert-req" B (exp (gen) l-0) (privk B)) (5 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) e-0)))
+    ((recv (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e e-0))))
+      (send (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e e-0)))))
+    ((recv (cat (exp (gen) (mul l l-0)) (exp (gen) (mul e e-0))))
+      (send (cat (exp (gen) (mul l l-0)) (exp (gen) (mul e e-0)))))
+    ((recv (enc "cert-req" A (exp (gen) l) (privk A)))
+      (send (enc "cert" (exp (gen) l) A (privk CA))))
+    ((send (enc "cert-req" A (exp (gen) l) (privk A))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l-0) (privk B)))))
+  (label 91)
+  (parent 90)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton iadh-um
+  (vars (A B CA name) (e expn) (e-0 expr) (l l-0 expn))
+  (defstrand init 4 (A A) (B B) (CA CA) (hl (exp (gen) l-0))
+    (he (exp (gen) e-0)) (l l) (e e))
+  (deflistener (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e e-0))))
+  (defstrand ca-gen 2 (P A) (CA CA) (h (exp (gen) l)))
+  (defstrand ltkgen 1 (P A) (l l))
+  (defstrand ca-gen 2 (P B) (CA CA) (h (exp (gen) l-0)))
+  (defstrand ltkgen 1 (P B) (l l-0))
+  (precedes ((0 2) (1 0)) ((2 1) (0 0)) ((3 0) (2 0)) ((4 1) (0 1))
+    ((5 0) (4 0)))
+  (fn-of ("principal-of" (B (exp (gen) l-0)) (A (exp (gen) l))))
+  (neq ((exp (gen) l-0) (gen)) ((exp (gen) l) (gen))
+    ((exp (gen) l-0) (exp (gen) l)) ((exp (gen) e-0) (gen)))
+  (non-orig (privk A) (privk B) (privk CA))
+  (uniq-gen e)
+  (operation generalization deleted (2 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) l) A (privk CA)))
+      (recv (enc "cert" (exp (gen) l-0) B (privk CA)))
+      (send (exp (gen) e)) (recv (exp (gen) e-0)))
+    ((recv (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e e-0))))
+      (send (hash (exp (gen) (mul l l-0)) (exp (gen) (mul e e-0)))))
+    ((recv (enc "cert-req" A (exp (gen) l) (privk A)))
+      (send (enc "cert" (exp (gen) l) A (privk CA))))
+    ((send (enc "cert-req" A (exp (gen) l) (privk A))))
+    ((recv (enc "cert-req" B (exp (gen) l-0) (privk B)))
+      (send (enc "cert" (exp (gen) l-0) B (privk CA))))
+    ((send (enc "cert-req" B (exp (gen) l-0) (privk B)))))
+  (label 92)
+  (parent 91)
+  (unrealized)
+  (shape)
+  (maps
+    ((0 1)
+      ((he (exp (gen) e-0)) (hl (exp (gen) l-0)) (e e) (l l) (A A) (B B)
+        (CA CA))))
+  (origs))
+
+(comment "Nothing left to do")
diff --git a/tst/incompleteness_example.scm b/tst/incompleteness_example.scm
deleted file mode 100644
--- a/tst/incompleteness_example.scm
+++ /dev/null
@@ -1,21 +0,0 @@
-(herald incompleteness-example
-  (comment "Shows a shape not found by CPSA"))
-
-(defprotocol incompleteness-example basic
-  (defrole init (vars (k akey) (n text))
-    (trace (send (enc n k)) (recv n))
-    (uniq-orig n))
-  (defrole resp (vars (k akey) (n1 n2 text))
-    (trace (recv (enc n1 k)) (send n2))))
-
-(defskeleton incompleteness-example
-  (vars (k akey))
-  (defstrand init 2 (k k))
-  (non-orig (invk k)))
-
-(defskeleton incompleteness-example
-  (vars (k akey) (n text))
-  (defstrand init 2 (k k) (n n))
-  (defstrand resp 2 (k k) (n1 n) (n2 n))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (comment "A shape compatible with the first problem in this run"))
diff --git a/tst/incompleteness_example.tst b/tst/incompleteness_example.tst
deleted file mode 100644
--- a/tst/incompleteness_example.tst
+++ /dev/null
@@ -1,52 +0,0 @@
-(herald incompleteness-example
-  (comment "Shows a shape not found by CPSA"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from incompleteness_example.scm")
-
-(defprotocol incompleteness-example basic
-  (defrole init
-    (vars (k akey) (n text))
-    (trace (send (enc n k)) (recv n))
-    (uniq-orig n))
-  (defrole resp
-    (vars (k akey) (n1 n2 text))
-    (trace (recv (enc n1 k)) (send n2))))
-
-(defskeleton incompleteness-example
-  (vars (n text) (k akey))
-  (defstrand init 2 (n n) (k k))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (traces ((send (enc n k)) (recv n)))
-  (label 0)
-  (unrealized (0 1))
-  (origs (n (0 0)))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
-
-(defprotocol incompleteness-example basic
-  (defrole init
-    (vars (k akey) (n text))
-    (trace (send (enc n k)) (recv n))
-    (uniq-orig n))
-  (defrole resp
-    (vars (k akey) (n1 n2 text))
-    (trace (recv (enc n1 k)) (send n2))))
-
-(defskeleton incompleteness-example
-  (vars (n text) (k akey))
-  (defstrand init 2 (n n) (k k))
-  (defstrand resp 2 (n1 n) (n2 n) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (uniq-orig n)
-  (comment "A shape compatible with the first problem in this run")
-  (traces ((send (enc n k)) (recv n)) ((recv (enc n k)) (send n)))
-  (label 1)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((k k) (n n))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/injection.scm b/tst/injection.scm
new file mode 100644
--- /dev/null
+++ b/tst/injection.scm
@@ -0,0 +1,55 @@
+(herald "Needham-Schroeder Public-Key Protocol"
+	(algebra diffie-hellman)
+	(comment "This protocol contains a man-in-the-middle"
+		 "attack discovered by Galvin Lowe."))
+
+;;; Used to generate output for inclusion in the primer.
+;;; Use margin = 60 (-m 60) to generate the output.
+
+(defprotocol ns diffie-hellman
+  (defrole init
+    (vars (a b c d name) (n1 n2 text))
+    (trace
+     (send (enc n1 a c d (pubk b)))
+     (recv (enc (enc n1 n2 (pubk a)) (pubk c)))
+     (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a c d name) (n2 n1 text))
+    (trace
+     (recv (enc n1 a c d (pubk b)))
+     (send (enc (enc n1 n2 (pubk a)) (pubk c)))
+     (recv (enc n2 (pubk b)))))
+  (comment "Needham-Schroeder variant 1"))
+
+
+;;; The responder point-of-view
+(defskeleton ns
+  (vars (a name) (n2 text))
+  (defstrand resp 3 (a a) (n2 n2))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (comment "Responder point-of-view"))
+
+
+(defprotocol ns-inj diffie-hellman
+  (defrole init
+    (vars (a b c d name) (n1 n2 text))
+    (trace
+     (send (enc n1 a c d (pubk b)))
+     (recv (enc (enc (enc n1 n2 (pubk a)) (pubk c)) (pubk d)))
+     (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a c d name) (n2 n1 text))
+    (trace
+     (recv (enc n1 a c d (pubk b)))
+     (send (enc (enc (enc n1 n2 (pubk a)) (pubk c)) (pubk d)))
+     (recv (enc n2 (pubk b)))))
+  (comment "Needham-Schroeder variant 2"))
+
+;;; The responder point-of-view
+(defskeleton ns-inj
+  (vars (a name) (n2 text))
+  (defstrand resp 3 (a a) (n2 n2))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (comment "Responder point-of-view"))
diff --git a/tst/injection.tst b/tst/injection.tst
new file mode 100644
--- /dev/null
+++ b/tst/injection.tst
@@ -0,0 +1,112 @@
+(herald "Needham-Schroeder Public-Key Protocol" (algebra diffie-hellman)
+  (comment "This protocol contains a man-in-the-middle"
+    "attack discovered by Galvin Lowe."))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from injection.scm")
+
+(defprotocol ns diffie-hellman
+  (defrole init
+    (vars (a b c d name) (n1 n2 text))
+    (trace (send (enc n1 a c d (pubk b)))
+      (recv (enc (enc n1 n2 (pubk a)) (pubk c)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a c d name) (n2 n1 text))
+    (trace (recv (enc n1 a c d (pubk b)))
+      (send (enc (enc n1 n2 (pubk a)) (pubk c)))
+      (recv (enc n2 (pubk b)))))
+  (comment "Needham-Schroeder variant 1"))
+
+(defskeleton ns
+  (vars (n2 n1 text) (a b c d name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a) (c c) (d d))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (comment "Responder point-of-view")
+  (traces
+    ((recv (enc n1 a c d (pubk b)))
+      (send (enc (enc n1 n2 (pubk a)) (pubk c)))
+      (recv (enc n2 (pubk b)))))
+  (label 0)
+  (unrealized (0 2))
+  (origs (n2 (0 1)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ns
+  (vars (n2 n1 text) (a b c d b-0 c-0 d-0 name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a) (c c) (d d))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0) (c c-0) (d d-0))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand init 3) n2 (0 2)
+    (enc n1 n2 (pubk a)))
+  (traces
+    ((recv (enc n1 a c d (pubk b)))
+      (send (enc (enc n1 n2 (pubk a)) (pubk c)))
+      (recv (enc n2 (pubk b))))
+    ((send (enc n1 a c-0 d-0 (pubk b-0)))
+      (recv (enc (enc n1 n2 (pubk a)) (pubk c-0)))
+      (send (enc n2 (pubk b-0)))))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (n2 n2) (b b) (c c) (d d) (n1 n1))))
+  (origs (n2 (0 1))))
+
+(comment "Nothing left to do")
+
+(defprotocol ns-inj diffie-hellman
+  (defrole init
+    (vars (a b c d name) (n1 n2 text))
+    (trace (send (enc n1 a c d (pubk b)))
+      (recv (enc (enc (enc n1 n2 (pubk a)) (pubk c)) (pubk d)))
+      (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a c d name) (n2 n1 text))
+    (trace (recv (enc n1 a c d (pubk b)))
+      (send (enc (enc (enc n1 n2 (pubk a)) (pubk c)) (pubk d)))
+      (recv (enc n2 (pubk b)))))
+  (comment "Needham-Schroeder variant 2"))
+
+(defskeleton ns-inj
+  (vars (n2 n1 text) (a b c d name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a) (c c) (d d))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (comment "Responder point-of-view")
+  (traces
+    ((recv (enc n1 a c d (pubk b)))
+      (send (enc (enc (enc n1 n2 (pubk a)) (pubk c)) (pubk d)))
+      (recv (enc n2 (pubk b)))))
+  (label 2)
+  (unrealized (0 2))
+  (origs (n2 (0 1)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton ns-inj
+  (vars (n2 n1 text) (a b c d b-0 c-0 d-0 name))
+  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a) (c c) (d d))
+  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0) (c c-0) (d d-0))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (privk a))
+  (uniq-orig n2)
+  (operation nonce-test (added-strand init 3) n2 (0 2)
+    (enc n1 n2 (pubk a)))
+  (traces
+    ((recv (enc n1 a c d (pubk b)))
+      (send (enc (enc (enc n1 n2 (pubk a)) (pubk c)) (pubk d)))
+      (recv (enc n2 (pubk b))))
+    ((send (enc n1 a c-0 d-0 (pubk b-0)))
+      (recv (enc (enc (enc n1 n2 (pubk a)) (pubk c-0)) (pubk d-0)))
+      (send (enc n2 (pubk b-0)))))
+  (label 3)
+  (parent 2)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (n2 n2) (b b) (c c) (d d) (n1 n1))))
+  (origs (n2 (0 1))))
+
+(comment "Nothing left to do")
diff --git a/tst/isoreject.scm b/tst/isoreject.scm
deleted file mode 100644
--- a/tst/isoreject.scm
+++ /dev/null
@@ -1,22 +0,0 @@
-(defprotocol isoreject basic
-  (defrole init (vars (a b name) (na nb nc text))
-    (trace
-     (send (cat a na))
-     (recv (enc nb na a (privk b)))
-     (send (enc nc nb b (privk a)))))
-  (defrole resp (vars (a b name) (na nb nc text))
-    (trace
-     (recv (cat a na))
-     (send (enc nb na a (privk b)))
-     (recv (enc nc nb b (privk a))))
-    (uniq-orig nb)))
-
-(defskeleton isoreject
-  (vars (a b name))
-  (defstrand resp 3 (a a) (b b))
-  (non-orig (privk a) (privk b)))
-
-(defskeleton isoreject
-  (vars (b name))
-  (defstrand init 3 (b b))
-  (non-orig (privk b)))
diff --git a/tst/isoreject.tst b/tst/isoreject.tst
deleted file mode 100644
--- a/tst/isoreject.tst
+++ /dev/null
@@ -1,153 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from isoreject.scm")
-
-(defprotocol isoreject basic
-  (defrole init
-    (vars (a b name) (na nb nc text))
-    (trace (send (cat a na)) (recv (enc nb na a (privk b)))
-      (send (enc nc nb b (privk a)))))
-  (defrole resp
-    (vars (a b name) (na nb nc text))
-    (trace (recv (cat a na)) (send (enc nb na a (privk b)))
-      (recv (enc nc nb b (privk a))))
-    (uniq-orig nb)))
-
-(defskeleton isoreject
-  (vars (na nb nc text) (a b name))
-  (defstrand resp 3 (na na) (nb nb) (nc nc) (a a) (b b))
-  (non-orig (privk a) (privk b))
-  (uniq-orig nb)
-  (traces
-    ((recv (cat a na)) (send (enc nb na a (privk b)))
-      (recv (enc nc nb b (privk a)))))
-  (label 0)
-  (unrealized (0 2))
-  (origs (nb (0 1)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton isoreject
-  (vars (na nb nc na-0 text) (a b name))
-  (defstrand resp 3 (na na) (nb nb) (nc nc) (a a) (b b))
-  (defstrand init 3 (na na-0) (nb nb) (nc nc) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig nb)
-  (operation encryption-test (added-strand init 3)
-    (enc nc nb b (privk a)) (0 2))
-  (traces
-    ((recv (cat a na)) (send (enc nb na a (privk b)))
-      (recv (enc nc nb b (privk a))))
-    ((send (cat a na-0)) (recv (enc nb na-0 a (privk b)))
-      (send (enc nc nb b (privk a)))))
-  (label 1)
-  (parent 0)
-  (unrealized (1 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton isoreject
-  (vars (na nb nc text) (a b name))
-  (defstrand resp 3 (na na) (nb nb) (nc nc) (a a) (b b))
-  (defstrand resp 2 (na nb) (nb nc) (a b) (b a))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig nb nc)
-  (operation encryption-test (added-strand resp 2)
-    (enc nc nb b (privk a)) (0 2))
-  (traces
-    ((recv (cat a na)) (send (enc nb na a (privk b)))
-      (recv (enc nc nb b (privk a))))
-    ((recv (cat b nb)) (send (enc nc nb b (privk a)))))
-  (label 2)
-  (parent 0)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (na na) (nb nb) (nc nc))))
-  (origs (nc (1 1)) (nb (0 1))))
-
-(defskeleton isoreject
-  (vars (na nb nc text) (a b name))
-  (defstrand resp 3 (na na) (nb nb) (nc nc) (a a) (b b))
-  (defstrand init 3 (na na) (nb nb) (nc nc) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig nb)
-  (operation encryption-test (displaced 2 0 resp 2)
-    (enc nb na-0 a (privk b)) (1 1))
-  (traces
-    ((recv (cat a na)) (send (enc nb na a (privk b)))
-      (recv (enc nc nb b (privk a))))
-    ((send (cat a na)) (recv (enc nb na a (privk b)))
-      (send (enc nc nb b (privk a)))))
-  (label 3)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (na na) (nb nb) (nc nc))))
-  (origs (nb (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol isoreject basic
-  (defrole init
-    (vars (a b name) (na nb nc text))
-    (trace (send (cat a na)) (recv (enc nb na a (privk b)))
-      (send (enc nc nb b (privk a)))))
-  (defrole resp
-    (vars (a b name) (na nb nc text))
-    (trace (recv (cat a na)) (send (enc nb na a (privk b)))
-      (recv (enc nc nb b (privk a))))
-    (uniq-orig nb)))
-
-(defskeleton isoreject
-  (vars (na nb nc text) (b a name))
-  (defstrand init 3 (na na) (nb nb) (nc nc) (a a) (b b))
-  (non-orig (privk b))
-  (traces
-    ((send (cat a na)) (recv (enc nb na a (privk b)))
-      (send (enc nc nb b (privk a)))))
-  (label 4)
-  (unrealized (0 1))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton isoreject
-  (vars (na nb nc na-0 text) (b a name))
-  (defstrand init 3 (na na) (nb nb) (nc nc) (a a) (b b))
-  (defstrand init 3 (na na-0) (nb na) (nc nb) (a b) (b a))
-  (precedes ((1 2) (0 1)))
-  (non-orig (privk b))
-  (operation encryption-test (added-strand init 3)
-    (enc nb na a (privk b)) (0 1))
-  (traces
-    ((send (cat a na)) (recv (enc nb na a (privk b)))
-      (send (enc nc nb b (privk a))))
-    ((send (cat b na-0)) (recv (enc na na-0 b (privk a)))
-      (send (enc nb na a (privk b)))))
-  (label 5)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (a a) (na na) (nb nb) (nc nc))))
-  (origs))
-
-(defskeleton isoreject
-  (vars (na nb nc text) (b a name))
-  (defstrand init 3 (na na) (nb nb) (nc nc) (a a) (b b))
-  (defstrand resp 2 (na na) (nb nb) (a a) (b b))
-  (precedes ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig nb)
-  (operation encryption-test (added-strand resp 2)
-    (enc nb na a (privk b)) (0 1))
-  (traces
-    ((send (cat a na)) (recv (enc nb na a (privk b)))
-      (send (enc nc nb b (privk a))))
-    ((recv (cat a na)) (send (enc nb na a (privk b)))))
-  (label 6)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (a a) (na na) (nb nb) (nc nc))))
-  (origs (nb (1 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/kelly1.scm b/tst/kelly1.scm
deleted file mode 100644
--- a/tst/kelly1.scm
+++ /dev/null
@@ -1,76 +0,0 @@
-;;An attestation protocol containing a client, a server, and an appraiser.
-
-;;The client is attempting to verify that the server he receives his
-;;content from is the server he wishes to communicate with, and that the
-;;server meets some policy.
-
-;;The appraiser acquires measurements from the server to determine the
-;;policy, and passes the resulting policy on to the client. The server's
-;;public key is used to identify the server.
-
-;;The server is verifying nothing about his surroundings, and will
-;;answer both measurement and content inquiries from anyone.
-
-;;When analyzing this protocol, it is assumes that the client knows some
-;;appraiser he trusts; the client analysis should contain non privk(A).
-
-(defprotocol kelly1 basic
-
-  (defrole client
-    (vars (C name) (A name) (S name) (Ns text) (request text) (Check text)  (policy text) (response text))
-    (trace
-     (send (cat C S request))
-     (recv (cat S C (enc (cat response Ns)
-			 (privk S))))
-     (send (cat C A Check (pubk S)))
-     (recv (cat A C (enc (cat policy (pubk S) Ns)
-			 (privk A))))
-      )
-    )
-
-  (defrole appraiser
-    (vars (C name) (A name) (S name) (N text) (Ns text) (hello text)
-	  (Quote text) (measurements text) (Check text) (policy text)
-	  (AIK name))
-    (trace
-     (recv (cat S A hello))
-     (send (cat A S N))
-     (recv (cat S A
-		(enc
-		 (cat Quote measurements N Ns (pubk S))
-		 (privk AIK))
-		(pubk S)))
-     (recv (cat C A Check (pubk S)))
-     (send (cat A C (enc (cat policy (pubk S) Ns)
-			 (privk A))))
-      )
-    (non-orig (privk A) (privk AIK))
-    (uniq-orig N)
-    )
-
-  (defrole server
-    (vars (C name) (A name) (S name) (N text) (Ns text) (hello text)
-	  (Quote text) (measurements text) (request text) (response text)
-	  (AIK name))
-   (trace
-      (send (cat S A hello))
-      (recv (cat A S N))
-      (send (cat S A
-		 (enc
-		  (cat Quote measurements N Ns (pubk S))
-		  (privk AIK))
-		 (pubk S)))
-      (recv (cat C S request))
-      (send (cat S C (enc (cat response Ns)
-			  (privk S))))
-      )
-   (non-orig (privk S) (privk AIK))
-   (uniq-orig  Ns)
-   )
-)
-
-(defskeleton kelly1
-  (vars (A name))
-  (defstrand client 4 (A A))
-  (non-orig (privk A))
-  )
diff --git a/tst/kelly1.tst b/tst/kelly1.tst
deleted file mode 100644
--- a/tst/kelly1.tst
+++ /dev/null
@@ -1,153 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from kelly1.scm")
-
-(defprotocol kelly1 basic
-  (defrole client
-    (vars (C A S name) (Ns request Check policy response text))
-    (trace (send (cat C S request))
-      (recv (cat S C (enc response Ns (privk S))))
-      (send (cat C A Check (pubk S)))
-      (recv (cat A C (enc policy (pubk S) Ns (privk A))))))
-  (defrole appraiser
-    (vars (C A S name) (N Ns hello Quote measurements Check policy text)
-      (AIK name))
-    (trace (recv (cat S A hello)) (send (cat A S N))
-      (recv
-        (cat S A (enc Quote measurements N Ns (pubk S) (privk AIK))
-          (pubk S))) (recv (cat C A Check (pubk S)))
-      (send (cat A C (enc policy (pubk S) Ns (privk A)))))
-    (non-orig (privk A) (privk AIK))
-    (uniq-orig N))
-  (defrole server
-    (vars (C A S name)
-      (N Ns hello Quote measurements request response text) (AIK name))
-    (trace (send (cat S A hello)) (recv (cat A S N))
-      (send
-        (cat S A (enc Quote measurements N Ns (pubk S) (privk AIK))
-          (pubk S))) (recv (cat C S request))
-      (send (cat S C (enc response Ns (privk S)))))
-    (non-orig (privk S) (privk AIK))
-    (uniq-orig Ns)))
-
-(defskeleton kelly1
-  (vars (Ns request Check policy response text) (A C S name))
-  (defstrand client 4 (Ns Ns) (request request) (Check Check)
-    (policy policy) (response response) (C C) (A A) (S S))
-  (non-orig (privk A))
-  (traces
-    ((send (cat C S request))
-      (recv (cat S C (enc response Ns (privk S))))
-      (send (cat C A Check (pubk S)))
-      (recv (cat A C (enc policy (pubk S) Ns (privk A))))))
-  (label 0)
-  (unrealized (0 3))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton kelly1
-  (vars
-    (Ns request Check policy response N hello Quote measurements Check-0
-      text) (A C S C-0 AIK name))
-  (defstrand client 4 (Ns Ns) (request request) (Check Check)
-    (policy policy) (response response) (C C) (A A) (S S))
-  (defstrand appraiser 5 (N N) (Ns Ns) (hello hello) (Quote Quote)
-    (measurements measurements) (Check Check-0) (policy policy) (C C-0)
-    (A A) (S S) (AIK AIK))
-  (precedes ((1 4) (0 3)))
-  (non-orig (privk A) (privk AIK))
-  (uniq-orig N)
-  (operation encryption-test (added-strand appraiser 5)
-    (enc policy (pubk S) Ns (privk A)) (0 3))
-  (traces
-    ((send (cat C S request))
-      (recv (cat S C (enc response Ns (privk S))))
-      (send (cat C A Check (pubk S)))
-      (recv (cat A C (enc policy (pubk S) Ns (privk A)))))
-    ((recv (cat S A hello)) (send (cat A S N))
-      (recv
-        (cat S A (enc Quote measurements N Ns (pubk S) (privk AIK))
-          (pubk S))) (recv (cat C-0 A Check-0 (pubk S)))
-      (send (cat A C-0 (enc policy (pubk S) Ns (privk A))))))
-  (label 1)
-  (parent 0)
-  (unrealized (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton kelly1
-  (vars
-    (Ns request Check policy response N hello Quote measurements Check-0
-      hello-0 text) (A C S C-0 AIK A-0 name))
-  (defstrand client 4 (Ns Ns) (request request) (Check Check)
-    (policy policy) (response response) (C C) (A A) (S S))
-  (defstrand appraiser 5 (N N) (Ns Ns) (hello hello) (Quote Quote)
-    (measurements measurements) (Check Check-0) (policy policy) (C C-0)
-    (A A) (S S) (AIK AIK))
-  (defstrand server 3 (N N) (Ns Ns) (hello hello-0) (Quote Quote)
-    (measurements measurements) (A A-0) (S S) (AIK AIK))
-  (precedes ((1 1) (2 1)) ((1 4) (0 3)) ((2 2) (0 1)) ((2 2) (1 2)))
-  (non-orig (privk A) (privk S) (privk AIK))
-  (uniq-orig Ns N)
-  (operation encryption-test (added-strand server 3)
-    (enc Quote measurements N Ns (pubk S) (privk AIK)) (1 2))
-  (traces
-    ((send (cat C S request))
-      (recv (cat S C (enc response Ns (privk S))))
-      (send (cat C A Check (pubk S)))
-      (recv (cat A C (enc policy (pubk S) Ns (privk A)))))
-    ((recv (cat S A hello)) (send (cat A S N))
-      (recv
-        (cat S A (enc Quote measurements N Ns (pubk S) (privk AIK))
-          (pubk S))) (recv (cat C-0 A Check-0 (pubk S)))
-      (send (cat A C-0 (enc policy (pubk S) Ns (privk A)))))
-    ((send (cat S A-0 hello-0)) (recv (cat A-0 S N))
-      (send
-        (cat S A-0 (enc Quote measurements N Ns (pubk S) (privk AIK))
-          (pubk S)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton kelly1
-  (vars
-    (Ns request Check policy response hello Check-0 N hello-0 Quote
-      measurements request-0 text) (A C S C-0 C-1 A-0 AIK name))
-  (defstrand client 4 (Ns Ns) (request request) (Check Check)
-    (policy policy) (response response) (C C) (A A) (S S))
-  (defstrand appraiser 5 (N N) (Ns Ns) (hello hello) (Quote Quote)
-    (measurements measurements) (Check Check-0) (policy policy) (C C-0)
-    (A A) (S S) (AIK AIK))
-  (defstrand server 5 (N N) (Ns Ns) (hello hello-0) (Quote Quote)
-    (measurements measurements) (request request-0) (response response)
-    (C C-1) (A A-0) (S S) (AIK AIK))
-  (precedes ((1 1) (2 1)) ((1 4) (0 3)) ((2 2) (1 2)) ((2 4) (0 1)))
-  (non-orig (privk A) (privk S) (privk AIK))
-  (uniq-orig Ns N)
-  (operation encryption-test (displaced 2 3 server 5)
-    (enc response Ns (privk S)) (0 1))
-  (traces
-    ((send (cat C S request))
-      (recv (cat S C (enc response Ns (privk S))))
-      (send (cat C A Check (pubk S)))
-      (recv (cat A C (enc policy (pubk S) Ns (privk A)))))
-    ((recv (cat S A hello)) (send (cat A S N))
-      (recv
-        (cat S A (enc Quote measurements N Ns (pubk S) (privk AIK))
-          (pubk S))) (recv (cat C-0 A Check-0 (pubk S)))
-      (send (cat A C-0 (enc policy (pubk S) Ns (privk A)))))
-    ((send (cat S A-0 hello-0)) (recv (cat A-0 S N))
-      (send
-        (cat S A-0 (enc Quote measurements N Ns (pubk S) (privk AIK))
-          (pubk S))) (recv (cat C-1 S request-0))
-      (send (cat S C-1 (enc response Ns (privk S))))))
-  (label 3)
-  (parent 2)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((A A) (C C) (S S) (Ns Ns) (request request) (Check Check)
-        (policy policy) (response response))))
-  (origs (Ns (2 2)) (N (1 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/kelly64.lisp b/tst/kelly64.lisp
deleted file mode 100644
--- a/tst/kelly64.lisp
+++ /dev/null
@@ -1,127 +0,0 @@
-(herald "Kelly's 64-shape protocol" (bound 10))
-
-(defprotocol kelly64 basic
-  (defrole client
-    (vars (C name) (A name) (S name) (AIKC name) (NC text)
-	  (hello text) (Quote text) (mc text) (request text)
-	  (response text) (Check text) (P2 text))
-    (trace
-     (send (cat C A hello))
-     (recv (cat A C NC))
-     (send (cat C A (enc
-		     (cat Quote mc NC
-			  (enc
-			   (pubk C)
-			   (privk C)))
-		     (privk AIKC))
-		(enc
-		 (pubk C)
-		 (privk C))))
-     (send (cat C S
-		(enc (cat request request)
-		     (privk C))))
-     (recv (cat S C
-		(enc response
-		     (privk S))))
-     (send (cat C A Check (pubk S)))
-     (recv (cat A C
-		(enc (cat P2 (pubk S))
-		     (privk A)))))
-    (non-orig (privk C) (privk AIKC) (privk A))
-    )
-  ;;   non = (privk(C);privk(AIKC);privk(A));
-  ;;   uniq = ();
-
-  (defrole appraiser
-    (vars (C name) (A name) (S name) (AIKS name) (AIKC name)
-	  (NS text) (NC text) (hello text)(Quote text)
-	  (ms text)(mc text)(Check text)(P1 text)(P2 text))
-    (trace
-
-     (recv (cat S A hello))
-     (send (cat A S NS))
-     (recv (cat S A
-		(enc
-		 (cat Quote ms NS
-		      (enc (pubk S)
-			   (privk S)))
-		 (privk AIKS))
-		(enc
-		 (pubk S)
-		 (privk S))))
-     (recv (cat C A hello))
-     (send (cat A C NC))
-     (recv (cat C A (enc
-		     (cat Quote mc NC (enc
-				       (pubk C)
-				       (privk C)))
-		     (privk AIKC))
-		(enc
-		 (pubk C)
-		 (privk C))))
-     (recv (cat S A  Check (pubk C)))
-     (send (cat A S (enc
-		     (cat P1 (pubk C))
-		     (privk A))))
-     (recv (cat C A Check (pubk S)))
-     (send (cat A C (enc
-		     (cat P2 (pubk S))
-		     (privk A))))
-     )
-    (non-orig (privk A) (privk AIKS) (privk AIKC))
-    (uniq-orig NS NC)
-    ;;   non = (privk(A);privk(AIKS);privk(AIKC));
-    ;;   uniq = (NS;NC);
-    )
-
-  (defrole server
-    (vars (C name) (A name) (S name) (AIKS name) (NS text)
-	  (hello text) (Quote text) (ms text) (request text)
-	  (Check text) (P1 text) (response text))
-    (trace
-     ;;   non = (privk(S);privk(AIKS);privk(A));
-     ;;  uniq = ();
-
-     (send (cat S A hello))
-     (recv (cat A S NS))
-     (send (cat S A (enc
-		     (cat Quote ms NS (enc
-				       (pubk S)
-				       (privk S)))
-		     (privk AIKS))
-		(enc
-		 (pubk S)
-		 (privk S))))
-     (recv (cat C S (enc
-		     (cat request request)
-		     (privk C))))
-     (send (cat S A Check (pubk C)))
-     (recv (cat A S (enc
-		     (cat P1 (pubk C))
-		     (privk A))))
-     (send (cat S C (enc
-		     response
-		     (privk S))))
-     )
-    (non-orig (privk S) (privk AIKS) (privk A))
-    )
-
-  )
-
-(defskeleton kelly64
-  (vars (C name) (A name) (S name) (AIKC name) (NC text)
-	  (hello text) (Quote text) (mc text) (request text)
-	  (response text) (Check text) (P2 text))
-  (defstrand client 7 (C C) (A A) (S S) (AIKC AIKC)
-    (NC NC) (hello hello) (Quote Quote) (mc mc)
-    (request request) (response response) (Check Check) (P2 P2)))
-
-(defskeleton kelly64
-  (vars (C name) (A name) (S name) (AIKC name) (NC text)
-	  (hello text) (Quote text) (mc text) (request text)
-	  (response text) (Check text) (P1 text))
-  (defstrand server 7 ))
-
-(defskeleton kelly64
-(vars)
-  (defstrand appraiser 10))
diff --git a/tst/kerb5.lisp b/tst/kerb5.lisp
deleted file mode 100644
--- a/tst/kerb5.lisp
+++ /dev/null
@@ -1,94 +0,0 @@
-;; Kerberos 5 specification, taken from
-;; http://www.lsv.ens-cachan.fr/spore/kerberos.html
-;;
-;; Ku in the original document has become pubk/privk U.
-;; Since we cannot confirm with CPSA that T1 is between T1start and T1expire,
-;; and since the purpose of T1 is to have a defined relationship with T1start
-;; and T1expire, I am replacing T1 with (cat T1start T1expire). Ditto with T2.
-
-(defprotocol kerb5 basic
-
-  ;; U is the client's user (and, approximately, its principal.)
-  (defrole client
-    (vars (U name) (G name) (L1 text) (N1 text) (C name) (S name)
-	  (L2 text) (N2 text) (Kcg skey) (T1start text) (T1expire text)
-	  (Kag skey) (Kgs skey) (T2start text) (T2expire text)
-	  (Kcs skey))
-    (trace
-     (send (cat U G L1 N1))
-     (recv (cat U
-		(enc (cat U C G Kcg T1start T1expire) Kag)
-		(enc (cat G Kcg T1start T1expire) (pubk U))))
-     (send (cat S
-		L2
-		N2
-		(enc (cat U C G Kcg T1start T1expire) Kag)
-		(enc (cat C T1start T1expire) Kcg)))
-     (recv (cat U
-		(enc (cat U C S Kcs T2start T2expire) Kgs)
-		(enc (cat S Kcs T2start T2expire N2) Kcg)))
-     (send (cat (enc (cat U C S Kcs T2start T2expire) Kgs)
-		(enc (cat C T2start T2expire) Kcs)))
-     (recv (enc (cat T2start T2expire) Kcs))
-     )
-    (uniq-orig N1 N2)
-    (non-orig (privk U))
-    )
-
-;; A is the key distribution authority's principal; never used explicitly
-;; Kag is a long-term shared key between A and G.
-;; Kcg is the session key to be shared by C and G, created by A.
-  (defrole authority
-    (vars (U name) (G name) (C name) (L1 text) (N1 text)
-	  (T1start text) (T1expire text) (Kag skey) (Kcg skey))
-    (trace
-     (recv (cat U G L1 N1))
-     (send (cat U
-		(enc (cat U C G Kcg T1start T1expire) Kag)
-		(enc (cat G Kcg T1start T1expire) (pubk U))))
-     )
-    (uniq-orig Kcg)
-    (non-orig Kag)
-    )
-
-;; G is the ticket granting server's principal.
-;; Kag is a long-term shared key between A and G.
-;; Kgs is a long-term shared key between G and S.
-  (defrole granter
-       (vars (U name) (G name) (C name) (S name) (L2 text) (N2 text)
-	  (Kcg skey) (T1start text) (T1expire text) (Kag skey)
-	  (Kgs skey) (T2start text) (T2expire text) (Kcs skey))
-       (trace
-	(recv (cat S
-		   L2
-		   N2
-		   (enc (cat U C G Kcg T1start T1expire) Kag)
-		   (enc (cat C T1start T1expire) Kcg)))
-	(send (cat U
-		   (enc (cat U C S Kcs T2start T2expire) Kgs)
-		   (enc (cat S Kcs T2start T2expire N2) Kcg)))
-	)
-       (uniq-orig Kcs)
-       (non-orig Kgs Kag)
-    )
-
-;; S is the principal of the server that C wishes to communicate with
-;; Kgs is a long-term shared key between G and S.
-  (defrole server
-    (vars (U name) (C name) (S name) (Kgs skey) (T2start text)
-	  (T2expire text) (Kcs skey))
-    (trace
-     (recv (cat (enc (cat U C S Kcs T2start T2expire) Kgs)
-		(enc (cat C T2start T2expire) Kcs)))
-     (send (enc (cat T2start T2expire) Kcs))
-     )
-    (uniq-orig )
-    (non-orig Kgs)
-    )
-
-)
-
- (defskeleton kerb5
-    (vars )
-    (defstrand server 2)
-    )
diff --git a/tst/kerberos++.scm b/tst/kerberos++.scm
new file mode 100644
--- /dev/null
+++ b/tst/kerberos++.scm
@@ -0,0 +1,80 @@
+; CPSA - Full Local Realm Kerberos
+
+; In this example, cli (client) is trying to connect to the serv (service). 
+; 
+; 1) It first sends a request to the as (authentication server) for an initial tgt (ticket-granting ticket).
+
+; 2) The AS responds by sending the TGT and a package containing a new session key encrypted under the long-term
+;	 key of the client.
+
+; 3) The client then sends the TGT along with an authenticator (encrypted message containing its name and a time-stamp
+;	 encrypted under the session key received from the AS) to the TGS (Ticket-Granting Server).
+
+; 4) Having received the TGT and authenticator, the TGS then decrypts the TGT to get the session key. It then 
+;	 decrypts the authenticator to compare the contents of the TGT and the authenticator. If this is verified, it
+;	 generates an encrypted session key package (same as above in step 2, which includes the name of service, time-stamp,
+;	 lifetime stamp, and the session key all encrypted under the session key it used in previous step) and a ST 
+;	 (Service Ticket) to send to the client.
+
+; 5) The client then receives this package and decrypts the session key package to get the new session key to use 
+;	 with the service. It then sends an Application Request (AP_REQ), which contains the service ticket it received
+;	 in the previous step and an authenticator that the client generates, to the service. This authenticator is encrypted with
+;	 the session key it extracted and contains its name and a time-stamp. This request is used as its credentials
+;	 to access the service.
+
+
+(defprotocol kerberos basic
+  (defrole client
+    (vars (cli tgs as serv name) (time t-prime life life-prime tgt st ack nonce text) (tgsk servk skey))
+    (trace
+	  ; Send the Initial Request (AS_REQ), which involves the client name, service name, and a lifetime stamp
+	  (send (cat cli serv nonce life))
+	  ; Get back response from the AS (AS_REP), which gives the TGT and an encrypted message with a new session key, 
+	  ; client name, time-stamp, and lifetime stamp.
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+	  (send (cat (enc cli t-prime servk) st))
+	  (recv (enc ack servk))) (uniq-orig nonce))
+	  
+  (defrole tgs
+    (vars (cli tgs as serv name) (time t-prime life life-prime tgt st text) (tgsk servk skey))
+    (trace 
+	  (recv (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send (cat (enc serv t-prime life-prime servk tgsk) (enc cli serv t-prime life-prime servk (ltk serv as))))) (uniq-orig servk))
+	  
+  (defrole as
+    (vars (cli tgs as serv name) (time life nonce text) (tgsk skey))
+    (trace 
+	  (recv (cat cli serv nonce life))
+      (send
+        (cat (enc time life nonce tgsk tgs (ltk cli as)) (enc time life tgsk cli (ltk tgs as))))) (uniq-orig tgsk))
+		
+  (defrole serv
+	(vars (cli as serv name) (t-prime life-prime ack text) (servk skey))
+	(trace
+	  (recv (cat (enc cli t-prime servk) (enc cli serv t-prime life-prime servk (ltk serv as))))
+	  (send (enc ack servk)))))
+
+; we'll observe two shapes resulting from these preskeletons
+; because the keyserver can reverse a and b with no change
+; in the protocol
+(defskeleton kerberos
+  (vars (cli name) (tgs name) (as name) (serv name))
+  (defstrand client 6 (cli cli) (tgs tgs) (as as) (serv serv))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as)))
+
+(defskeleton kerberos
+  (vars (cli name) (tgs name) (as name) (serv name))
+  (defstrand tgs 2 (cli cli) (tgs tgs) (as as) (serv serv))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as)))
+
+(defskeleton kerberos
+  (vars (cli name) (tgs name) (as name) (serv name))
+  (defstrand as 2 (cli cli) (tgs tgs) (as as) (serv serv))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as)))
+  
+(defskeleton kerberos
+  (vars (cli name) (serv name) (as name))
+  (defstrand serv 2 (cli cli) (serv serv) (as as))
+  (non-orig (ltk cli as) (ltk serv as)))
diff --git a/tst/kerberos++.tst b/tst/kerberos++.tst
new file mode 100644
--- /dev/null
+++ b/tst/kerberos++.tst
@@ -0,0 +1,1393 @@
+(comment "CPSA 3.2.2")
+(comment "All input read from kerberos++.scm")
+
+(defprotocol kerberos basic
+  (defrole client
+    (vars (cli tgs as serv name)
+      (time t-prime life life-prime tgt st ack nonce text)
+      (tgsk servk skey))
+    (trace (send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    (uniq-orig nonce))
+  (defrole tgs
+    (vars (cli tgs as serv name) (time t-prime life life-prime text)
+      (tgsk servk skey))
+    (trace
+      (recv
+        (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    (uniq-orig servk))
+  (defrole as
+    (vars (cli tgs as serv name) (time life nonce text) (tgsk skey))
+    (trace (recv (cat cli serv nonce life))
+      (send
+        (cat (enc time life nonce tgsk tgs (ltk cli as))
+          (enc time life tgsk cli (ltk tgs as)))))
+    (uniq-orig tgsk))
+  (defrole serv
+    (vars (cli as serv name) (t-prime life-prime ack text) (servk skey))
+    (trace
+      (recv
+        (cat (enc cli t-prime servk)
+          (enc cli serv t-prime life-prime servk (ltk serv as))))
+      (send (enc ack servk)))))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime tgt st ack nonce text)
+    (cli tgs as serv name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce)
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk))))
+  (label 0)
+  (unrealized (0 1))
+  (origs (nonce (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime tgt st ack nonce text)
+    (cli tgs as serv serv-0 name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk)
+  (operation encryption-test (added-strand as 2)
+    (enc time nonce life tgsk tgs (ltk cli as)) (0 1))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as))))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce time-0 life-0 text)
+    (cli tgs as serv serv-0 cli-0 tgs-0 as-0 name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time-0) (t-prime t-prime) (life life-0)
+    (life-prime life-prime) (cli cli-0) (tgs tgs-0) (as as-0)
+    (serv serv) (tgsk tgsk) (servk servk))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 3)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation encryption-test (added-strand tgs 2)
+    (enc serv t-prime life-prime servk tgsk) (0 3))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli-0 time-0 tgsk)
+         (enc time-0 life-0 tgsk cli-0 (ltk tgs-0 as-0))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli-0 serv t-prime life-prime servk (ltk serv as-0))))))
+  (label 2)
+  (parent 1)
+  (unrealized (2 0))
+  (comment "4 in cohort - 4 not yet seen"))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime tgt st ack nonce text)
+    (cli tgs as serv serv-0 name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (deflistener tgsk)
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 3)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk)
+  (operation encryption-test (added-listener tgsk)
+    (enc serv t-prime life-prime servk tgsk) (0 3))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv tgsk) (send tgsk)))
+  (label 3)
+  (parent 1)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce time-0 life-0 time-1
+      life-1 life-prime-0 tgt-0 st-0 nonce-0 text)
+    (cli tgs as serv serv-0 cli-0 tgs-0 as-0 tgs-1 as-1 serv-1 name)
+    (tgsk servk tgsk-0 skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time-0) (t-prime t-prime) (life life-0)
+    (life-prime life-prime) (cli cli-0) (tgs tgs-0) (as as-0)
+    (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand client 5 (time time-1) (t-prime time-0) (life life-1)
+    (life-prime life-prime-0) (tgt tgt-0) (st st-0) (nonce nonce-0)
+    (cli cli-0) (tgs tgs-1) (as as-1) (serv serv-1) (tgsk tgsk-0)
+    (servk tgsk))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (3 3)) ((2 1) (0 3))
+    ((3 4) (2 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce nonce-0 tgsk servk)
+  (operation encryption-test (added-strand client 5)
+    (enc cli-0 time-0 tgsk) (2 0))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli-0 time-0 tgsk)
+         (enc time-0 life-0 tgsk cli-0 (ltk tgs-0 as-0))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli-0 serv t-prime life-prime servk (ltk serv as-0)))))
+    ((send (cat cli-0 serv-1 nonce-0 life-1))
+      (recv
+        (cat (enc time-1 nonce-0 life-1 tgsk-0 tgs-1 (ltk cli-0 as-1))
+          tgt-0)) (send (cat (enc cli-0 time-1 tgsk-0) tgt-0))
+      (recv (cat (enc serv-1 time-0 life-prime-0 tgsk tgsk-0) st-0))
+      (send (cat (enc cli-0 time-0 tgsk) st-0))))
+  (label 4)
+  (parent 2)
+  (unrealized (2 0) (3 3))
+  (comment "empty cohort"))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime tgt st ack nonce life-0 text)
+    (cli tgs as serv serv-0 tgs-0 as-0 name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life life-0)
+    (life-prime life-prime) (cli cli) (tgs tgs-0) (as as-0) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation encryption-test (displaced 3 0 client 3)
+    (enc cli-0 time-0 tgsk) (2 0))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk)
+         (enc time life-0 tgsk cli (ltk tgs-0 as-0))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as-0))))))
+  (label 5)
+  (parent 2)
+  (unrealized (2 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce time-0 life-0 life-1
+      tgt-0 nonce-0 text)
+    (cli tgs as serv serv-0 cli-0 tgs-0 as-0 tgs-1 as-1 serv-1 name)
+    (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time-0) (t-prime t-prime) (life life-0)
+    (life-prime life-prime) (cli cli-0) (tgs tgs-0) (as as-0)
+    (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand client 3 (time time-0) (life life-1) (tgt tgt-0)
+    (nonce nonce-0) (cli cli-0) (tgs tgs-1) (as as-1) (serv serv-1)
+    (tgsk tgsk))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (3 1)) ((2 1) (0 3))
+    ((3 2) (2 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce nonce-0 tgsk servk)
+  (operation encryption-test (added-strand client 3)
+    (enc cli-0 time-0 tgsk) (2 0))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli-0 time-0 tgsk)
+         (enc time-0 life-0 tgsk cli-0 (ltk tgs-0 as-0))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli-0 serv t-prime life-prime servk (ltk serv as-0)))))
+    ((send (cat cli-0 serv-1 nonce-0 life-1))
+      (recv
+        (cat (enc time-0 nonce-0 life-1 tgsk tgs-1 (ltk cli-0 as-1))
+          tgt-0)) (send (cat (enc cli-0 time-0 tgsk) tgt-0))))
+  (label 6)
+  (parent 2)
+  (unrealized (2 0) (3 1))
+  (comment "empty cohort"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce time-0 life-0 text)
+    (cli tgs as serv serv-0 cli-0 tgs-0 as-0 name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time-0) (t-prime t-prime) (life life-0)
+    (life-prime life-prime) (cli cli-0) (tgs tgs-0) (as as-0)
+    (serv serv) (tgsk tgsk) (servk servk))
+  (deflistener tgsk)
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)) ((1 1) (3 0)) ((2 1) (0 3))
+    ((3 1) (2 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation encryption-test (added-listener tgsk)
+    (enc cli-0 time-0 tgsk) (2 0))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli-0 time-0 tgsk)
+         (enc time-0 life-0 tgsk cli-0 (ltk tgs-0 as-0))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli-0 serv t-prime life-prime servk (ltk serv as-0)))))
+    ((recv tgsk) (send tgsk)))
+  (label 7)
+  (parent 2)
+  (unrealized (3 0))
+  (comment "empty cohort"))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime tgt st ack nonce text)
+    (cli tgs as serv serv-0 name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation nonce-test
+    (contracted (tgs-0 tgs) (as-0 as) (life-0 nonce)) tgsk (2 0)
+    (enc time nonce life tgsk tgs (ltk cli as))
+    (enc time nonce tgsk cli (ltk tgs as)))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as))))))
+  (label 8)
+  (parent 5)
+  (unrealized (0 5))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce t-prime-0
+      life-prime-0 text) (cli tgs as serv serv-0 cli-0 as-0 serv-1 name)
+    (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand serv 2 (t-prime t-prime-0) (life-prime life-prime-0)
+    (ack ack) (cli cli-0) (as as-0) (serv serv-1) (servk servk))
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((2 1) (3 0)) ((3 1) (0 5)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation encryption-test (added-strand serv 2) (enc ack servk)
+    (0 5))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv
+       (cat (enc cli-0 t-prime-0 servk)
+         (enc cli-0 serv-1 t-prime-0 life-prime-0 servk
+           (ltk serv-1 as-0)))) (send (enc ack servk))))
+  (label 9)
+  (parent 8)
+  (unrealized (3 0))
+  (comment "4 in cohort - 4 not yet seen"))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime tgt st ack nonce text)
+    (cli tgs as serv serv-0 name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (deflistener servk)
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((2 1) (3 0)) ((3 1) (0 5)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation encryption-test (added-listener servk) (enc ack servk)
+    (0 5))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv servk) (send servk)))
+  (label 10)
+  (parent 8)
+  (unrealized (3 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce life-prime-0 text)
+    (cli tgs as serv serv-0 as-0 serv-1 name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand serv 2 (t-prime t-prime) (life-prime life-prime-0)
+    (ack ack) (cli cli) (as as-0) (serv serv-1) (servk servk))
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((0 4) (3 0)) ((1 1) (0 1))
+    ((2 1) (0 3)) ((3 1) (0 5)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation encryption-test (displaced 4 0 client 5)
+    (enc cli-0 t-prime-0 servk) (3 0))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv
+       (cat (enc cli t-prime servk)
+         (enc cli serv-1 t-prime life-prime-0 servk (ltk serv-1 as-0))))
+      (send (enc ack servk))))
+  (label 11)
+  (parent 9)
+  (unrealized (3 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce t-prime-0
+      life-prime-0 time-0 life-0 life-prime-1 tgt-0 st-0 nonce-0 text)
+    (cli tgs as serv serv-0 cli-0 as-0 serv-1 tgs-0 as-1 serv-2 name)
+    (tgsk servk tgsk-0 skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand serv 2 (t-prime t-prime-0) (life-prime life-prime-0)
+    (ack ack) (cli cli-0) (as as-0) (serv serv-1) (servk servk))
+  (defstrand client 5 (time time-0) (t-prime t-prime-0) (life life-0)
+    (life-prime life-prime-1) (tgt tgt-0) (st st-0) (nonce nonce-0)
+    (cli cli-0) (tgs tgs-0) (as as-1) (serv serv-2) (tgsk tgsk-0)
+    (servk servk))
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((2 1) (4 3)) ((3 1) (0 5)) ((4 4) (3 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce nonce-0 tgsk servk)
+  (operation encryption-test (added-strand client 5)
+    (enc cli-0 t-prime-0 servk) (3 0))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv
+       (cat (enc cli-0 t-prime-0 servk)
+         (enc cli-0 serv-1 t-prime-0 life-prime-0 servk
+           (ltk serv-1 as-0)))) (send (enc ack servk)))
+    ((send (cat cli-0 serv-2 nonce-0 life-0))
+      (recv
+        (cat (enc time-0 nonce-0 life-0 tgsk-0 tgs-0 (ltk cli-0 as-1))
+          tgt-0)) (send (cat (enc cli-0 time-0 tgsk-0) tgt-0))
+      (recv (cat (enc serv-2 t-prime-0 life-prime-1 servk tgsk-0) st-0))
+      (send (cat (enc cli-0 t-prime-0 servk) st-0))))
+  (label 12)
+  (parent 9)
+  (unrealized (3 0) (4 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce t-prime-0
+      life-prime-0 life-0 tgt-0 nonce-0 text)
+    (cli tgs as serv serv-0 cli-0 as-0 serv-1 tgs-0 as-1 serv-2 name)
+    (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand serv 2 (t-prime t-prime-0) (life-prime life-prime-0)
+    (ack ack) (cli cli-0) (as as-0) (serv serv-1) (servk servk))
+  (defstrand client 3 (time t-prime-0) (life life-0) (tgt tgt-0)
+    (nonce nonce-0) (cli cli-0) (tgs tgs-0) (as as-1) (serv serv-2)
+    (tgsk servk))
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((2 1) (4 1)) ((3 1) (0 5)) ((4 2) (3 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce nonce-0 tgsk servk)
+  (operation encryption-test (added-strand client 3)
+    (enc cli-0 t-prime-0 servk) (3 0))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv
+       (cat (enc cli-0 t-prime-0 servk)
+         (enc cli-0 serv-1 t-prime-0 life-prime-0 servk
+           (ltk serv-1 as-0)))) (send (enc ack servk)))
+    ((send (cat cli-0 serv-2 nonce-0 life-0))
+      (recv
+        (cat (enc t-prime-0 nonce-0 life-0 servk tgs-0 (ltk cli-0 as-1))
+          tgt-0)) (send (cat (enc cli-0 t-prime-0 servk) tgt-0))))
+  (label 13)
+  (parent 9)
+  (unrealized (3 0) (4 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce t-prime-0
+      life-prime-0 text) (cli tgs as serv serv-0 cli-0 as-0 serv-1 name)
+    (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand serv 2 (t-prime t-prime-0) (life-prime life-prime-0)
+    (ack ack) (cli cli-0) (as as-0) (serv serv-1) (servk servk))
+  (deflistener servk)
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3))
+    ((2 1) (4 0)) ((3 1) (0 5)) ((4 1) (3 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation encryption-test (added-listener servk)
+    (enc cli-0 t-prime-0 servk) (3 0))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv
+       (cat (enc cli-0 t-prime-0 servk)
+         (enc cli-0 serv-1 t-prime-0 life-prime-0 servk
+           (ltk serv-1 as-0)))) (send (enc ack servk)))
+    ((recv servk) (send servk)))
+  (label 14)
+  (parent 9)
+  (unrealized (4 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime tgt st ack nonce text)
+    (cli tgs as serv serv-0 name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (deflistener servk)
+  (deflistener tgsk)
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((1 1) (4 0))
+    ((2 1) (0 3)) ((2 1) (3 0)) ((3 1) (0 5)) ((4 1) (3 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation nonce-test (added-listener tgsk) servk (3 0)
+    (enc cli serv t-prime life-prime servk (ltk serv as))
+    (enc serv t-prime life-prime servk tgsk))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv servk) (send servk)) ((recv tgsk) (send tgsk)))
+  (label 15)
+  (parent 10)
+  (unrealized (4 0))
+  (comment "empty cohort"))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime tgt st ack nonce text)
+    (cli tgs as serv serv-0 name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand serv 2 (t-prime t-prime) (life-prime life-prime) (ack ack)
+    (cli cli) (as as) (serv serv) (servk servk))
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((0 4) (3 0)) ((1 1) (0 1))
+    ((2 1) (0 3)) ((3 1) (0 5)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation nonce-test
+    (contracted (as-0 as) (serv-1 serv) (life-prime-0 life-prime)) servk
+    (3 0) (enc cli serv t-prime life-prime servk (ltk serv as))
+    (enc serv t-prime life-prime servk tgsk))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv
+       (cat (enc cli t-prime servk)
+         (enc cli serv t-prime life-prime servk (ltk serv as))))
+      (send (enc ack servk))))
+  (label 16)
+  (parent 11)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((cli cli) (tgs tgs) (as as) (serv serv) (time time)
+        (t-prime t-prime) (life life) (life-prime life-prime) (tgt tgt)
+        (st st) (ack ack) (nonce nonce) (tgsk tgsk) (servk servk))))
+  (origs (nonce (0 0)) (servk (2 1)) (tgsk (1 1))))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce life-prime-0 text)
+    (cli tgs as serv serv-0 as-0 serv-1 name) (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand serv 2 (t-prime t-prime) (life-prime life-prime-0)
+    (ack ack) (cli cli) (as as-0) (serv serv-1) (servk servk))
+  (deflistener tgsk)
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((0 4) (3 0)) ((1 1) (0 1))
+    ((1 1) (4 0)) ((2 1) (0 3)) ((3 1) (0 5)) ((4 1) (3 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation nonce-test (added-listener tgsk) servk (3 0)
+    (enc cli serv t-prime life-prime servk (ltk serv as))
+    (enc serv t-prime life-prime servk tgsk))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv
+       (cat (enc cli t-prime servk)
+         (enc cli serv-1 t-prime life-prime-0 servk (ltk serv-1 as-0))))
+      (send (enc ack servk))) ((recv tgsk) (send tgsk)))
+  (label 17)
+  (parent 11)
+  (unrealized (4 0))
+  (comment "empty cohort"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce life-prime-0 time-0
+      life-0 tgt-0 st-0 nonce-0 text)
+    (cli tgs as serv serv-0 cli-0 as-0 serv-1 tgs-0 as-1 name)
+    (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand serv 2 (t-prime t-prime) (life-prime life-prime-0)
+    (ack ack) (cli cli-0) (as as-0) (serv serv-1) (servk servk))
+  (defstrand client 5 (time time-0) (t-prime t-prime) (life life-0)
+    (life-prime life-prime) (tgt tgt-0) (st st-0) (nonce nonce-0)
+    (cli cli-0) (tgs tgs-0) (as as-1) (serv serv) (tgsk tgsk)
+    (servk servk))
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((1 1) (4 1))
+    ((2 1) (0 3)) ((2 1) (4 3)) ((3 1) (0 5)) ((4 4) (3 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce nonce-0 tgsk servk)
+  (operation nonce-test
+    (contracted (t-prime-0 t-prime) (serv-2 serv)
+      (life-prime-1 life-prime) (tgsk-0 tgsk)) servk (4 3)
+    (enc cli serv t-prime life-prime servk (ltk serv as))
+    (enc serv t-prime life-prime servk tgsk))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv
+       (cat (enc cli-0 t-prime servk)
+         (enc cli-0 serv-1 t-prime life-prime-0 servk
+           (ltk serv-1 as-0)))) (send (enc ack servk)))
+    ((send (cat cli-0 serv nonce-0 life-0))
+      (recv
+        (cat (enc time-0 nonce-0 life-0 tgsk tgs-0 (ltk cli-0 as-1))
+          tgt-0)) (send (cat (enc cli-0 time-0 tgsk) tgt-0))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st-0))
+      (send (cat (enc cli-0 t-prime servk) st-0))))
+  (label 18)
+  (parent 12)
+  (unrealized (3 0) (4 1))
+  (comment "empty cohort"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce t-prime-0
+      life-prime-0 time-0 life-0 life-prime-1 tgt-0 st-0 nonce-0 text)
+    (cli tgs as serv serv-0 cli-0 as-0 serv-1 tgs-0 as-1 serv-2 name)
+    (tgsk servk tgsk-0 skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand serv 2 (t-prime t-prime-0) (life-prime life-prime-0)
+    (ack ack) (cli cli-0) (as as-0) (serv serv-1) (servk servk))
+  (defstrand client 5 (time time-0) (t-prime t-prime-0) (life life-0)
+    (life-prime life-prime-1) (tgt tgt-0) (st st-0) (nonce nonce-0)
+    (cli cli-0) (tgs tgs-0) (as as-1) (serv serv-2) (tgsk tgsk-0)
+    (servk servk))
+  (deflistener tgsk)
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((1 1) (5 0))
+    ((2 1) (0 3)) ((2 1) (4 3)) ((3 1) (0 5)) ((4 4) (3 0))
+    ((5 1) (4 3)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce nonce-0 tgsk servk)
+  (operation nonce-test (added-listener tgsk) servk (4 3)
+    (enc cli serv t-prime life-prime servk (ltk serv as))
+    (enc serv t-prime life-prime servk tgsk))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv
+       (cat (enc cli-0 t-prime-0 servk)
+         (enc cli-0 serv-1 t-prime-0 life-prime-0 servk
+           (ltk serv-1 as-0)))) (send (enc ack servk)))
+    ((send (cat cli-0 serv-2 nonce-0 life-0))
+      (recv
+        (cat (enc time-0 nonce-0 life-0 tgsk-0 tgs-0 (ltk cli-0 as-1))
+          tgt-0)) (send (cat (enc cli-0 time-0 tgsk-0) tgt-0))
+      (recv (cat (enc serv-2 t-prime-0 life-prime-1 servk tgsk-0) st-0))
+      (send (cat (enc cli-0 t-prime-0 servk) st-0)))
+    ((recv tgsk) (send tgsk)))
+  (label 19)
+  (parent 12)
+  (unrealized (5 0))
+  (comment "empty cohort"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce t-prime-0
+      life-prime-0 life-0 tgt-0 nonce-0 text)
+    (cli tgs as serv serv-0 cli-0 as-0 serv-1 tgs-0 as-1 serv-2 name)
+    (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand serv 2 (t-prime t-prime-0) (life-prime life-prime-0)
+    (ack ack) (cli cli-0) (as as-0) (serv serv-1) (servk servk))
+  (defstrand client 3 (time t-prime-0) (life life-0) (tgt tgt-0)
+    (nonce nonce-0) (cli cli-0) (tgs tgs-0) (as as-1) (serv serv-2)
+    (tgsk servk))
+  (deflistener tgsk)
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((1 1) (5 0))
+    ((2 1) (0 3)) ((2 1) (4 1)) ((3 1) (0 5)) ((4 2) (3 0))
+    ((5 1) (4 1)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce nonce-0 tgsk servk)
+  (operation nonce-test (added-listener tgsk) servk (4 1)
+    (enc cli serv t-prime life-prime servk (ltk serv as))
+    (enc serv t-prime life-prime servk tgsk))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv
+       (cat (enc cli-0 t-prime-0 servk)
+         (enc cli-0 serv-1 t-prime-0 life-prime-0 servk
+           (ltk serv-1 as-0)))) (send (enc ack servk)))
+    ((send (cat cli-0 serv-2 nonce-0 life-0))
+      (recv
+        (cat (enc t-prime-0 nonce-0 life-0 servk tgs-0 (ltk cli-0 as-1))
+          tgt-0)) (send (cat (enc cli-0 t-prime-0 servk) tgt-0)))
+    ((recv tgsk) (send tgsk)))
+  (label 20)
+  (parent 13)
+  (unrealized (5 0))
+  (comment "empty cohort"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime tgt st ack nonce t-prime-0
+      life-prime-0 text) (cli tgs as serv serv-0 cli-0 as-0 serv-1 name)
+    (tgsk servk skey))
+  (defstrand client 6 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (tgt tgt) (st st) (ack ack) (nonce nonce)
+    (cli cli) (tgs tgs) (as as) (serv serv) (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life nonce) (nonce life) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life nonce)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand serv 2 (t-prime t-prime-0) (life-prime life-prime-0)
+    (ack ack) (cli cli-0) (as as-0) (serv serv-1) (servk servk))
+  (deflistener servk)
+  (deflistener tgsk)
+  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((1 1) (5 0))
+    ((2 1) (0 3)) ((2 1) (4 0)) ((3 1) (0 5)) ((4 1) (3 0))
+    ((5 1) (4 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce tgsk servk)
+  (operation nonce-test (added-listener tgsk) servk (4 0)
+    (enc cli serv t-prime life-prime servk (ltk serv as))
+    (enc serv t-prime life-prime servk tgsk))
+  (traces
+    ((send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    ((recv (cat cli serv-0 life nonce))
+      (send
+        (cat (enc time nonce life tgsk tgs (ltk cli as))
+          (enc time nonce tgsk cli (ltk tgs as)))))
+    ((recv
+       (cat (enc cli time tgsk) (enc time nonce tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv
+       (cat (enc cli-0 t-prime-0 servk)
+         (enc cli-0 serv-1 t-prime-0 life-prime-0 servk
+           (ltk serv-1 as-0)))) (send (enc ack servk)))
+    ((recv servk) (send servk)) ((recv tgsk) (send tgsk)))
+  (label 21)
+  (parent 14)
+  (unrealized (5 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol kerberos basic
+  (defrole client
+    (vars (cli tgs as serv name)
+      (time t-prime life life-prime tgt st ack nonce text)
+      (tgsk servk skey))
+    (trace (send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    (uniq-orig nonce))
+  (defrole tgs
+    (vars (cli tgs as serv name) (time t-prime life life-prime text)
+      (tgsk servk skey))
+    (trace
+      (recv
+        (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    (uniq-orig servk))
+  (defrole as
+    (vars (cli tgs as serv name) (time life nonce text) (tgsk skey))
+    (trace (recv (cat cli serv nonce life))
+      (send
+        (cat (enc time life nonce tgsk tgs (ltk cli as))
+          (enc time life tgsk cli (ltk tgs as)))))
+    (uniq-orig tgsk))
+  (defrole serv
+    (vars (cli as serv name) (t-prime life-prime ack text) (servk skey))
+    (trace
+      (recv
+        (cat (enc cli t-prime servk)
+          (enc cli serv t-prime life-prime servk (ltk serv as))))
+      (send (enc ack servk)))))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime text) (cli tgs as serv name)
+    (tgsk servk skey))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig servk)
+  (traces
+    ((recv
+       (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as))))))
+  (label 22)
+  (unrealized (0 0))
+  (origs (servk (0 1)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime nonce text)
+    (cli tgs as serv serv-0 name) (tgsk servk skey))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life life) (nonce nonce) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (precedes ((1 1) (0 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig tgsk servk)
+  (operation encryption-test (added-strand as 2)
+    (enc time life tgsk cli (ltk tgs as)) (0 0))
+  (traces
+    ((recv
+       (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv (cat cli serv-0 nonce life))
+      (send
+        (cat (enc time life nonce tgsk tgs (ltk cli as))
+          (enc time life tgsk cli (ltk tgs as))))))
+  (label 23)
+  (parent 22)
+  (unrealized (0 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton kerberos
+  (vars
+    (time t-prime life life-prime nonce time-0 life-0 life-prime-0 tgt
+      st nonce-0 text) (cli tgs as serv serv-0 tgs-0 as-0 serv-1 name)
+    (tgsk servk tgsk-0 skey))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life life) (nonce nonce) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand client 5 (time time-0) (t-prime time) (life life-0)
+    (life-prime life-prime-0) (tgt tgt) (st st) (nonce nonce-0)
+    (cli cli) (tgs tgs-0) (as as-0) (serv serv-1) (tgsk tgsk-0)
+    (servk tgsk))
+  (precedes ((1 1) (2 3)) ((2 4) (0 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce-0 tgsk servk)
+  (operation encryption-test (added-strand client 5) (enc cli time tgsk)
+    (0 0))
+  (traces
+    ((recv
+       (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv (cat cli serv-0 nonce life))
+      (send
+        (cat (enc time life nonce tgsk tgs (ltk cli as))
+          (enc time life tgsk cli (ltk tgs as)))))
+    ((send (cat cli serv-1 nonce-0 life-0))
+      (recv
+        (cat (enc time-0 nonce-0 life-0 tgsk-0 tgs-0 (ltk cli as-0))
+          tgt)) (send (cat (enc cli time-0 tgsk-0) tgt))
+      (recv (cat (enc serv-1 time life-prime-0 tgsk tgsk-0) st))
+      (send (cat (enc cli time tgsk) st))))
+  (label 24)
+  (parent 23)
+  (unrealized (2 3))
+  (comment "empty cohort"))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime nonce life-0 tgt nonce-0 text)
+    (cli tgs as serv serv-0 tgs-0 as-0 serv-1 name) (tgsk servk skey))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life life) (nonce nonce) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand client 3 (time time) (life life-0) (tgt tgt)
+    (nonce nonce-0) (cli cli) (tgs tgs-0) (as as-0) (serv serv-1)
+    (tgsk tgsk))
+  (precedes ((1 1) (2 1)) ((2 2) (0 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig nonce-0 tgsk servk)
+  (operation encryption-test (added-strand client 3) (enc cli time tgsk)
+    (0 0))
+  (traces
+    ((recv
+       (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv (cat cli serv-0 nonce life))
+      (send
+        (cat (enc time life nonce tgsk tgs (ltk cli as))
+          (enc time life tgsk cli (ltk tgs as)))))
+    ((send (cat cli serv-1 nonce-0 life-0))
+      (recv
+        (cat (enc time nonce-0 life-0 tgsk tgs-0 (ltk cli as-0)) tgt))
+      (send (cat (enc cli time tgsk) tgt))))
+  (label 25)
+  (parent 23)
+  (unrealized (2 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime nonce text)
+    (cli tgs as serv serv-0 name) (tgsk servk skey))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life life) (nonce nonce) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (deflistener tgsk)
+  (precedes ((1 1) (2 0)) ((2 1) (0 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig tgsk servk)
+  (operation encryption-test (added-listener tgsk) (enc cli time tgsk)
+    (0 0))
+  (traces
+    ((recv
+       (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv (cat cli serv-0 nonce life))
+      (send
+        (cat (enc time life nonce tgsk tgs (ltk cli as))
+          (enc time life tgsk cli (ltk tgs as)))))
+    ((recv tgsk) (send tgsk)))
+  (label 26)
+  (parent 23)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(defskeleton kerberos
+  (vars (time t-prime life life-prime nonce tgt text)
+    (cli tgs as serv serv-0 serv-1 name) (tgsk servk skey))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (defstrand as 2 (time time) (life life) (nonce nonce) (cli cli)
+    (tgs tgs) (as as) (serv serv-0) (tgsk tgsk))
+  (defstrand client 3 (time time) (life nonce) (tgt tgt) (nonce life)
+    (cli cli) (tgs tgs) (as as) (serv serv-1) (tgsk tgsk))
+  (precedes ((1 1) (2 1)) ((2 0) (1 0)) ((2 2) (0 0)))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig life tgsk servk)
+  (operation nonce-test
+    (contracted (tgs-0 tgs) (as-0 as) (life-0 nonce) (nonce-0 life))
+    tgsk (2 1) (enc time life nonce tgsk tgs (ltk cli as))
+    (enc time life tgsk cli (ltk tgs as)))
+  (traces
+    ((recv
+       (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    ((recv (cat cli serv-0 nonce life))
+      (send
+        (cat (enc time life nonce tgsk tgs (ltk cli as))
+          (enc time life tgsk cli (ltk tgs as)))))
+    ((send (cat cli serv-1 life nonce))
+      (recv (cat (enc time life nonce tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))))
+  (label 27)
+  (parent 25)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((cli cli) (tgs tgs) (as as) (serv serv) (time time)
+        (t-prime t-prime) (life life) (life-prime life-prime)
+        (tgsk tgsk) (servk servk))))
+  (origs (life (2 0)) (tgsk (1 1)) (servk (0 1))))
+
+(comment "Nothing left to do")
+
+(defprotocol kerberos basic
+  (defrole client
+    (vars (cli tgs as serv name)
+      (time t-prime life life-prime tgt st ack nonce text)
+      (tgsk servk skey))
+    (trace (send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    (uniq-orig nonce))
+  (defrole tgs
+    (vars (cli tgs as serv name) (time t-prime life life-prime text)
+      (tgsk servk skey))
+    (trace
+      (recv
+        (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    (uniq-orig servk))
+  (defrole as
+    (vars (cli tgs as serv name) (time life nonce text) (tgsk skey))
+    (trace (recv (cat cli serv nonce life))
+      (send
+        (cat (enc time life nonce tgsk tgs (ltk cli as))
+          (enc time life tgsk cli (ltk tgs as)))))
+    (uniq-orig tgsk))
+  (defrole serv
+    (vars (cli as serv name) (t-prime life-prime ack text) (servk skey))
+    (trace
+      (recv
+        (cat (enc cli t-prime servk)
+          (enc cli serv t-prime life-prime servk (ltk serv as))))
+      (send (enc ack servk)))))
+
+(defskeleton kerberos
+  (vars (time life nonce text) (cli tgs as serv name) (tgsk skey))
+  (defstrand as 2 (time time) (life life) (nonce nonce) (cli cli)
+    (tgs tgs) (as as) (serv serv) (tgsk tgsk))
+  (non-orig (ltk cli as) (ltk tgs as) (ltk serv as))
+  (uniq-orig tgsk)
+  (traces
+    ((recv (cat cli serv nonce life))
+      (send
+        (cat (enc time life nonce tgsk tgs (ltk cli as))
+          (enc time life tgsk cli (ltk tgs as))))))
+  (label 28)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((cli cli) (tgs tgs) (as as) (serv serv) (time time) (life life)
+        (nonce nonce) (tgsk tgsk))))
+  (origs (tgsk (0 1))))
+
+(comment "Nothing left to do")
+
+(defprotocol kerberos basic
+  (defrole client
+    (vars (cli tgs as serv name)
+      (time t-prime life life-prime tgt st ack nonce text)
+      (tgsk servk skey))
+    (trace (send (cat cli serv nonce life))
+      (recv (cat (enc time nonce life tgsk tgs (ltk cli as)) tgt))
+      (send (cat (enc cli time tgsk) tgt))
+      (recv (cat (enc serv t-prime life-prime servk tgsk) st))
+      (send (cat (enc cli t-prime servk) st)) (recv (enc ack servk)))
+    (uniq-orig nonce))
+  (defrole tgs
+    (vars (cli tgs as serv name) (time t-prime life life-prime text)
+      (tgsk servk skey))
+    (trace
+      (recv
+        (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as)))))
+    (uniq-orig servk))
+  (defrole as
+    (vars (cli tgs as serv name) (time life nonce text) (tgsk skey))
+    (trace (recv (cat cli serv nonce life))
+      (send
+        (cat (enc time life nonce tgsk tgs (ltk cli as))
+          (enc time life tgsk cli (ltk tgs as)))))
+    (uniq-orig tgsk))
+  (defrole serv
+    (vars (cli as serv name) (t-prime life-prime ack text) (servk skey))
+    (trace
+      (recv
+        (cat (enc cli t-prime servk)
+          (enc cli serv t-prime life-prime servk (ltk serv as))))
+      (send (enc ack servk)))))
+
+(defskeleton kerberos
+  (vars (t-prime life-prime ack text) (cli serv as name) (servk skey))
+  (defstrand serv 2 (t-prime t-prime) (life-prime life-prime) (ack ack)
+    (cli cli) (as as) (serv serv) (servk servk))
+  (non-orig (ltk cli as) (ltk serv as))
+  (traces
+    ((recv
+       (cat (enc cli t-prime servk)
+         (enc cli serv t-prime life-prime servk (ltk serv as))))
+      (send (enc ack servk))))
+  (label 29)
+  (unrealized (0 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton kerberos
+  (vars (t-prime life-prime ack time life text) (cli serv as tgs name)
+    (servk tgsk skey))
+  (defstrand serv 2 (t-prime t-prime) (life-prime life-prime) (ack ack)
+    (cli cli) (as as) (serv serv) (servk servk))
+  (defstrand tgs 2 (time time) (t-prime t-prime) (life life)
+    (life-prime life-prime) (cli cli) (tgs tgs) (as as) (serv serv)
+    (tgsk tgsk) (servk servk))
+  (precedes ((1 1) (0 0)))
+  (non-orig (ltk cli as) (ltk serv as))
+  (uniq-orig servk)
+  (operation encryption-test (added-strand tgs 2)
+    (enc cli serv t-prime life-prime servk (ltk serv as)) (0 0))
+  (traces
+    ((recv
+       (cat (enc cli t-prime servk)
+         (enc cli serv t-prime life-prime servk (ltk serv as))))
+      (send (enc ack servk)))
+    ((recv
+       (cat (enc cli time tgsk) (enc time life tgsk cli (ltk tgs as))))
+      (send
+        (cat (enc serv t-prime life-prime servk tgsk)
+          (enc cli serv t-prime life-prime servk (ltk serv as))))))
+  (label 30)
+  (parent 29)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((cli cli) (serv serv) (as as) (t-prime t-prime)
+        (life-prime life-prime) (ack ack) (servk servk))))
+  (origs (servk (1 1))))
+
+(comment "Nothing left to do")
diff --git a/tst/kerberos.scm b/tst/kerberos.scm
deleted file mode 100644
--- a/tst/kerberos.scm
+++ /dev/null
@@ -1,37 +0,0 @@
-(defprotocol kerberos basic
-  (defrole init
-    (vars (a name) (b name) (ks name) (t text) (t-prime text) (l text) (k skey))
-    (trace (send (cat a b))
-      (recv
-        (cat (enc (cat t l k b) (ltk a ks))
-          (enc (cat t l k a) (ltk b ks))))
-      (send (cat (enc (cat a t) k) (enc (cat t l k a) (ltk b ks))))
-      (recv (enc t-prime k))))
-  (defrole resp
-    (vars (a name) (b name) (ks name) (t text) (t-prime text) (l text) (k skey))
-    (trace (recv (cat (enc (cat a t) k) (enc (cat t l k a) (ltk b ks))))
-      (send (enc t-prime k))))
-  (defrole keyserver
-    (vars (a name) (b name) (ks name) (t text) (l text) (k skey))
-    (trace (recv (cat a b))
-      (send
-        (cat (enc (cat t l k b) (ltk a ks))
-          (enc (cat t l k a) (ltk b ks))))) (uniq-orig k)))
-
-; we'll observe two shapes resulting from these preskeletons
-; because the keyserver can reverse a and b with no change
-; in the protocol
-(defskeleton kerberos
-  (vars (a name) (b name) (ks name))
-  (defstrand init 4 (a a) (b b) (ks ks))
-  (non-orig (ltk a ks) (ltk b ks)))
-
-(defskeleton kerberos
-  (vars (a name) (b name) (ks name))
-  (defstrand resp 2 (a a) (b b) (ks ks))
-  (non-orig (ltk a ks) (ltk b ks)))
-
-(defskeleton kerberos
-  (vars (a name) (b name) (ks name))
-  (defstrand keyserver 2 (a a) (b b) (ks ks))
-  (non-orig (ltk a ks) (ltk b ks)))
diff --git a/tst/kerberos.tst b/tst/kerberos.tst
deleted file mode 100644
--- a/tst/kerberos.tst
+++ /dev/null
@@ -1,905 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from kerberos.scm")
-
-(defprotocol kerberos basic
-  (defrole init
-    (vars (a b ks name) (t t-prime l text) (k skey))
-    (trace (send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k))))
-  (defrole resp
-    (vars (a b ks name) (t t-prime l text) (k skey))
-    (trace (recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k))))
-  (defrole keyserver
-    (vars (a b ks name) (t l text) (k skey))
-    (trace (recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    (uniq-orig k)))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (non-orig (ltk a ks) (ltk b ks))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k))))
-  (label 0)
-  (unrealized (0 1))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (0 1)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc t l k b (ltk a ks)) (0 1))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 3))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (precedes ((1 1) (0 1)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc t l k b (ltk a ks)) (0 1))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks))))))
-  (label 2)
-  (parent 0)
-  (unrealized (0 3))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l t-0 l-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (defstrand resp 2 (t t-0) (t-prime t-prime) (l l-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 3)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand resp 2) (enc t-prime k)
-    (0 3))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((recv (cat (enc a-0 t-0 k) (enc t-0 l-0 k a-0 (ltk b-0 ks-0))))
-      (send (enc t-prime k))))
-  (label 3)
-  (parent 1)
-  (unrealized (2 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 3)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-listener k) (enc t-prime k) (0 3))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((recv k) (send k)))
-  (label 4)
-  (parent 1)
-  (unrealized (2 0))
-  (comment "empty cohort"))
-
-(defskeleton kerberos
-  (vars (t t-prime l t-0 l-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (defstrand resp 2 (t t-0) (t-prime t-prime) (l l-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 3)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand resp 2) (enc t-prime k)
-    (0 3))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((recv (cat (enc a-0 t-0 k) (enc t-0 l-0 k a-0 (ltk b-0 ks-0))))
-      (send (enc t-prime k))))
-  (label 5)
-  (parent 2)
-  (unrealized (2 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (0 1)) ((1 1) (2 0)) ((2 1) (0 3)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-listener k) (enc t-prime k) (0 3))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((recv k) (send k)))
-  (label 6)
-  (parent 2)
-  (unrealized (2 0))
-  (comment "empty cohort"))
-
-(defskeleton kerberos
-  (vars (t t-prime l l-0 text) (a b ks b-0 ks-0 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l-0) (a a) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (displaced 3 0 init 3) (enc a-0 t-0 k)
-    (2 0))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((recv (cat (enc a t k) (enc t l-0 k a (ltk b-0 ks-0))))
-      (send (enc t-prime k))))
-  (label 7)
-  (parent 3)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l t-0 l-0 l-1 text)
-    (a b ks a-0 b-0 ks-0 b-1 ks-1 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (defstrand resp 2 (t t-0) (t-prime t-prime) (l l-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (defstrand init 3 (t t-0) (l l-1) (a a-0) (b b-1) (ks ks-1) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (3 1)) ((2 1) (0 3)) ((3 2) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 3) (enc a-0 t-0 k)
-    (2 0))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((recv (cat (enc a-0 t-0 k) (enc t-0 l-0 k a-0 (ltk b-0 ks-0))))
-      (send (enc t-prime k)))
-    ((send (cat a-0 b-1))
-      (recv
-        (cat (enc t-0 l-1 k b-1 (ltk a-0 ks-1))
-          (enc t-0 l-1 k a-0 (ltk b-1 ks-1))))
-      (send (cat (enc a-0 t-0 k) (enc t-0 l-1 k a-0 (ltk b-1 ks-1))))))
-  (label 8)
-  (parent 3)
-  (unrealized (3 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l t-0 l-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (defstrand resp 2 (t t-0) (t-prime t-prime) (l l-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (deflistener k)
-  (precedes ((1 1) (0 1)) ((1 1) (3 0)) ((2 1) (0 3)) ((3 1) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-listener k) (enc a-0 t-0 k) (2 0))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((recv (cat (enc a-0 t-0 k) (enc t-0 l-0 k a-0 (ltk b-0 ks-0))))
-      (send (enc t-prime k))) ((recv k) (send k)))
-  (label 9)
-  (parent 3)
-  (unrealized (3 0))
-  (comment "empty cohort"))
-
-(defskeleton kerberos
-  (vars (t t-prime l l-0 text) (a b ks b-0 ks-0 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l-0) (a a) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (displaced 3 0 init 3) (enc a-0 t-0 k)
-    (2 0))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((recv (cat (enc a t k) (enc t l-0 k a (ltk b-0 ks-0))))
-      (send (enc t-prime k))))
-  (label 10)
-  (parent 5)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l t-0 l-0 l-1 text)
-    (a b ks a-0 b-0 ks-0 b-1 ks-1 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (defstrand resp 2 (t t-0) (t-prime t-prime) (l l-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (defstrand init 3 (t t-0) (l l-1) (a a-0) (b b-1) (ks ks-1) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (3 1)) ((2 1) (0 3)) ((3 2) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 3) (enc a-0 t-0 k)
-    (2 0))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((recv (cat (enc a-0 t-0 k) (enc t-0 l-0 k a-0 (ltk b-0 ks-0))))
-      (send (enc t-prime k)))
-    ((send (cat a-0 b-1))
-      (recv
-        (cat (enc t-0 l-1 k b-1 (ltk a-0 ks-1))
-          (enc t-0 l-1 k a-0 (ltk b-1 ks-1))))
-      (send (cat (enc a-0 t-0 k) (enc t-0 l-1 k a-0 (ltk b-1 ks-1))))))
-  (label 11)
-  (parent 5)
-  (unrealized (3 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l t-0 l-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (defstrand resp 2 (t t-0) (t-prime t-prime) (l l-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (deflistener k)
-  (precedes ((1 1) (0 1)) ((1 1) (3 0)) ((2 1) (0 3)) ((3 1) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-listener k) (enc a-0 t-0 k) (2 0))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((recv (cat (enc a-0 t-0 k) (enc t-0 l-0 k a-0 (ltk b-0 ks-0))))
-      (send (enc t-prime k))) ((recv k) (send k)))
-  (label 12)
-  (parent 5)
-  (unrealized (3 0))
-  (comment "empty cohort"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test (contracted (b-0 b) (ks-0 ks) (l-0 l)) k (2 0)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k))))
-  (label 13)
-  (parent 7)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (t t) (t-prime t-prime) (l l) (k k))))
-  (origs (k (1 1))))
-
-(defskeleton kerberos
-  (vars (t t-prime l l-0 text) (a b ks b-0 ks-0 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l-0) (a a) (b b-0)
-    (ks ks-0) (k k))
-  (defstrand init 3 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (3 1)) ((2 1) (0 3)) ((3 2) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test
-    (contracted (a-0 a) (t-0 t) (b-1 b) (ks-1 ks) (l-1 l)) k (3 1)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((recv (cat (enc a t k) (enc t l-0 k a (ltk b-0 ks-0))))
-      (send (enc t-prime k)))
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))))
-  (label 14)
-  (parent 8)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l l-0 text) (a b ks b-0 ks-0 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l-0) (a b) (b b-0)
-    (ks ks-0) (k k))
-  (defstrand init 3 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (3 1)) ((2 1) (0 3)) ((3 2) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test
-    (contracted (a-0 b) (t-0 t) (b-1 a) (ks-1 ks) (l-1 l)) k (3 1)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((recv (cat (enc b t k) (enc t l-0 k b (ltk b-0 ks-0))))
-      (send (enc t-prime k)))
-    ((send (cat b a))
-      (recv (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks))))
-      (send (cat (enc b t k) (enc t l k b (ltk a ks))))))
-  (label 15)
-  (parent 8)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test (contracted (b-0 b) (ks-0 ks) (l-0 l)) k (2 0)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k))))
-  (label 16)
-  (parent 10)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (t t) (t-prime t-prime) (l l) (k k))))
-  (origs (k (1 1))))
-
-(defskeleton kerberos
-  (vars (t t-prime l l-0 text) (a b ks b-0 ks-0 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l-0) (a a) (b b-0)
-    (ks ks-0) (k k))
-  (defstrand init 3 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (3 1)) ((2 1) (0 3)) ((3 2) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test
-    (contracted (a-0 a) (t-0 t) (b-1 b) (ks-1 ks) (l-1 l)) k (3 1)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((recv (cat (enc a t k) (enc t l-0 k a (ltk b-0 ks-0))))
-      (send (enc t-prime k)))
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))))
-  (label 17)
-  (parent 11)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l l-0 text) (a b ks b-0 ks-0 name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l-0) (a b) (b b-0)
-    (ks ks-0) (k k))
-  (defstrand init 3 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (3 1)) ((2 1) (0 3)) ((3 2) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test
-    (contracted (a-0 b) (t-0 t) (b-1 a) (ks-1 ks) (l-1 l)) k (3 1)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((recv (cat (enc b t k) (enc t l-0 k b (ltk b-0 ks-0))))
-      (send (enc t-prime k)))
-    ((send (cat b a))
-      (recv (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks))))
-      (send (cat (enc b t k) (enc t l k b (ltk a ks))))))
-  (label 18)
-  (parent 11)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (3 1)) ((2 1) (0 3)) ((3 2) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test (contracted (b-0 b) (ks-0 ks) (l-0 l)) k (2 0)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k)))
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))))
-  (label 19)
-  (parent 14)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (t t) (t-prime t-prime) (l l) (k k))))
-  (origs (k (1 1))))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a b) (b a) (ks ks)
-    (k k))
-  (defstrand init 3 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (3 1)) ((2 1) (0 3)) ((3 2) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test (contracted (b-0 a) (ks-0 ks) (l-0 l)) k (2 0)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((recv (cat (enc b t k) (enc t l k b (ltk a ks))))
-      (send (enc t-prime k)))
-    ((send (cat b a))
-      (recv (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks))))
-      (send (cat (enc b t k) (enc t l k b (ltk a ks))))))
-  (label 20)
-  (parent 15)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (t t) (t-prime t-prime) (l l) (k k))))
-  (origs (k (1 1))))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (3 1)) ((2 1) (0 3)) ((3 2) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test (contracted (b-0 b) (ks-0 ks) (l-0 l)) k (2 0)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k)))
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))))
-  (label 21)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (t t) (t-prime t-prime) (l l) (k k))))
-  (origs (k (1 1))))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand init 4 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a b) (b a) (ks ks)
-    (k k))
-  (defstrand init 3 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (precedes ((1 1) (0 1)) ((1 1) (3 1)) ((2 1) (0 3)) ((3 2) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test (contracted (b-0 a) (ks-0 ks) (l-0 l)) k (2 0)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((recv (cat (enc b t k) (enc t l k b (ltk a ks))))
-      (send (enc t-prime k)))
-    ((send (cat b a))
-      (recv (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks))))
-      (send (cat (enc b t k) (enc t l k b (ltk a ks))))))
-  (label 22)
-  (parent 18)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (t t) (t-prime t-prime) (l l) (k k))))
-  (origs (k (1 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol kerberos basic
-  (defrole init
-    (vars (a b ks name) (t t-prime l text) (k skey))
-    (trace (send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k))))
-  (defrole resp
-    (vars (a b ks name) (t t-prime l text) (k skey))
-    (trace (recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k))))
-  (defrole keyserver
-    (vars (a b ks name) (t l text) (k skey))
-    (trace (recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    (uniq-orig k)))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (non-orig (ltk a ks) (ltk b ks))
-  (traces
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k))))
-  (label 23)
-  (unrealized (0 0))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (precedes ((1 1) (0 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc t l k a (ltk b ks)) (0 0))
-  (traces
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks))))))
-  (label 24)
-  (parent 23)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (0 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc t l k a (ltk b ks)) (0 0))
-  (traces
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))))
-  (label 25)
-  (parent 23)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l l-0 text) (a b ks b-0 ks-0 name) (k skey))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (defstrand init 3 (t t) (l l-0) (a a) (b b-0) (ks ks-0) (k k))
-  (precedes ((1 1) (2 1)) ((2 2) (0 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 3) (enc a t k) (0 0))
-  (traces
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((send (cat a b-0))
-      (recv
-        (cat (enc t l-0 k b-0 (ltk a ks-0))
-          (enc t l-0 k a (ltk b-0 ks-0))))
-      (send (cat (enc a t k) (enc t l-0 k a (ltk b-0 ks-0))))))
-  (label 26)
-  (parent 24)
-  (unrealized (2 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (2 0)) ((2 1) (0 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-listener k) (enc a t k) (0 0))
-  (traces
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((recv k) (send k)))
-  (label 27)
-  (parent 24)
-  (unrealized (2 0))
-  (comment "empty cohort"))
-
-(defskeleton kerberos
-  (vars (t t-prime l l-0 text) (a b ks b-0 ks-0 name) (k skey))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (t t) (l l-0) (a a) (b b-0) (ks ks-0) (k k))
-  (precedes ((1 1) (2 1)) ((2 2) (0 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 3) (enc a t k) (0 0))
-  (traces
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((send (cat a b-0))
-      (recv
-        (cat (enc t l-0 k b-0 (ltk a ks-0))
-          (enc t l-0 k a (ltk b-0 ks-0))))
-      (send (cat (enc a t k) (enc t l-0 k a (ltk b-0 ks-0))))))
-  (label 28)
-  (parent 25)
-  (unrealized (2 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (2 0)) ((2 1) (0 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation encryption-test (added-listener k) (enc a t k) (0 0))
-  (traces
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((recv k) (send k)))
-  (label 29)
-  (parent 25)
-  (unrealized (2 0))
-  (comment "empty cohort"))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a b) (b a) (ks ks) (k k))
-  (defstrand init 3 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (2 1)) ((2 2) (0 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test (contracted (b-0 b) (ks-0 ks) (l-0 l)) k (2 1)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k)))
-    ((recv (cat b a))
-      (send (cat (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))))
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))))
-  (label 30)
-  (parent 26)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (t t) (t-prime t-prime) (l l) (k k))))
-  (origs (k (1 1))))
-
-(defskeleton kerberos
-  (vars (t t-prime l text) (a b ks name) (k skey))
-  (defstrand resp 2 (t t) (t-prime t-prime) (l l) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (2 1)) ((2 2) (0 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (operation nonce-test (contracted (b-0 b) (ks-0 ks) (l-0 l)) k (2 1)
-    (enc t l k a (ltk b ks)) (enc t l k b (ltk a ks)))
-  (traces
-    ((recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k)))
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    ((send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))))
-  (label 31)
-  (parent 28)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (t t) (t-prime t-prime) (l l) (k k))))
-  (origs (k (1 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol kerberos basic
-  (defrole init
-    (vars (a b ks name) (t t-prime l text) (k skey))
-    (trace (send (cat a b))
-      (recv (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))
-      (send (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (recv (enc t-prime k))))
-  (defrole resp
-    (vars (a b ks name) (t t-prime l text) (k skey))
-    (trace (recv (cat (enc a t k) (enc t l k a (ltk b ks))))
-      (send (enc t-prime k))))
-  (defrole keyserver
-    (vars (a b ks name) (t l text) (k skey))
-    (trace (recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks)))))
-    (uniq-orig k)))
-
-(defskeleton kerberos
-  (vars (t l text) (a b ks name) (k skey))
-  (defstrand keyserver 2 (t t) (l l) (a a) (b b) (ks ks) (k k))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig k)
-  (traces
-    ((recv (cat a b))
-      (send (cat (enc t l k b (ltk a ks)) (enc t l k a (ltk b ks))))))
-  (label 32)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (t t) (l l) (k k))))
-  (origs (k (0 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/lt_test.scm b/tst/lt_test.scm
new file mode 100644
--- /dev/null
+++ b/tst/lt_test.scm
@@ -0,0 +1,55 @@
+(herald "Less-than constraint test protocol"
+   (comment "First and third skeletons should have a shape,"
+            "second and fourth should be dead."))
+
+(defprotocol lttest basic
+  (defrole init
+     (vars (n1 n2 text) (k skey))
+     (trace
+       (send (cat n1 (enc n1 n2 k)))
+       (recv n2))
+     (non-orig k)
+     (uniq-orig n1 n2)
+  )
+)
+
+;;; With no declaration, a shape
+;;; should be found where n1 = n2.
+(defskeleton lttest
+   (vars (n1 n2 text) (k skey))
+   (defstrand init 2) (n1 n1) (n2 n2) (k k))
+
+;;; With the declaration that n1 < n2,
+;;; no shape should exist, since n1 = n2 would
+;;; be a cycle.
+(defskeleton lttest
+   (vars (n1 n2 text))
+   (defstrand init 2 (n1 n1) (n2 n2))
+   (lt (n1 n2)))
+
+(defprotocol lttest2 basic
+  (defrole init
+     (vars (n1 n2 n text) (k skey))
+     (trace
+       (send n)
+       (send (cat n1 (enc n1 n2 k)))
+       (recv n2))
+     (non-orig k)
+     (uniq-orig n1 n2)
+     (lt (n2 n))
+  )
+)
+
+;;; In this version, the single lt declaration
+;;; should not interfere.
+(defskeleton lttest2
+   (vars (n n1 n2 text) (k skey))
+   (defstrand init 3) (n1 n1) (n2 n2) (k k))
+
+;;; In this version, the additional requirement
+;;; that n1 < n prevents n1 and n2 from being
+;;; unified.
+(defskeleton lttest2
+   (vars (n n1 n2 text) (k skey))
+   (defstrand init 3 (n1 n1) (n2 n2) (k k) (n n))
+   (lt (n n1)))
diff --git a/tst/lt_test.tst b/tst/lt_test.tst
new file mode 100644
--- /dev/null
+++ b/tst/lt_test.tst
@@ -0,0 +1,120 @@
+(herald "Less-than constraint test protocol"
+  (comment "First and third skeletons should have a shape,"
+    "second and fourth should be dead."))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from lt_test.scm")
+
+(defprotocol lttest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))
+
+(defskeleton lttest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (traces ((send (cat n1 (enc n1 n2 k))) (recv n2)))
+  (label 0)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton lttest
+  (vars (n1 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n1) (k k))
+  (non-orig k)
+  (uniq-orig n1)
+  (operation nonce-test (displaced 1 0 init 1) n2 (0 1) (enc n1 n2 k))
+  (traces ((send (cat n1 (enc n1 n1 k))) (recv n1)))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n1 n1) (n2 n1) (k k))))
+  (origs (n1 (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol lttest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))
+
+(defskeleton lttest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (lt (n1 n2))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (traces ((send (cat n1 (enc n1 n2 k))) (recv n2)))
+  (label 2)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol lttest2 basic
+  (defrole init
+    (vars (n1 n2 n text) (k skey))
+    (trace (send n) (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)
+    (lt (n2 n))))
+
+(defskeleton lttest2
+  (vars (n1 n2 n text) (k skey))
+  (defstrand init 3 (n1 n1) (n2 n2) (n n) (k k))
+  (lt (n2 n))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (traces ((send n) (send (cat n1 (enc n1 n2 k))) (recv n2)))
+  (label 3)
+  (unrealized (0 2))
+  (origs (n1 (0 1)) (n2 (0 1)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton lttest2
+  (vars (n1 n text) (k skey))
+  (defstrand init 3 (n1 n1) (n2 n1) (n n) (k k))
+  (lt (n1 n))
+  (non-orig k)
+  (uniq-orig n1)
+  (operation nonce-test (displaced 1 0 init 2) n2 (0 2) (enc n1 n2 k))
+  (traces ((send n) (send (cat n1 (enc n1 n1 k))) (recv n1)))
+  (label 4)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n1 n1) (n2 n1) (n n) (k k))))
+  (origs (n1 (0 1))))
+
+(comment "Nothing left to do")
+
+(defprotocol lttest2 basic
+  (defrole init
+    (vars (n1 n2 n text) (k skey))
+    (trace (send n) (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)
+    (lt (n2 n))))
+
+(defskeleton lttest2
+  (vars (n n1 n2 text) (k skey))
+  (defstrand init 3 (n1 n1) (n2 n2) (n n) (k k))
+  (lt (n n1) (n2 n))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (traces ((send n) (send (cat n1 (enc n1 n2 k))) (recv n2)))
+  (label 5)
+  (unrealized (0 2))
+  (origs (n1 (0 1)) (n2 (0 1)))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
diff --git a/tst/mass.lsp b/tst/mass.lsp
deleted file mode 100644
--- a/tst/mass.lsp
+++ /dev/null
@@ -1,29 +0,0 @@
-(defprotocol mass basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-      (send a)
-      (recv n1)
-      (send (enc n1 (ltk a b)))
-      (send n2)
-      (recv (enc n2 (ltk a b)))))
-  (defrole resp
-    (vars (a b name) (n1 n2 text))
-    (trace
-      (recv a)
-      (send n1)
-      (recv (enc n1 (ltk a b)))
-      (recv n2)
-      (send (enc n2 (ltk a b))))))
-
-(defskeleton mass
-  (vars (a b name) (n2 text))
-  (defstrand init 5 (a a) (b b) (n2 n2))
-  (non-orig (ltk a b))
-  (uniq-orig n2))
-
-(defskeleton mass
-  (vars (a b name) (n1 text))
-  (defstrand resp 5 (a a) (b b) (n1 n1))
-  (non-orig (ltk a b))
-  (uniq-orig n1))
diff --git a/tst/mass.tst b/tst/mass.tst
deleted file mode 100644
--- a/tst/mass.tst
+++ /dev/null
@@ -1,607 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from mass.lsp")
-
-(defprotocol mass basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b)))))
-  (defrole resp
-    (vars (a b name) (n1 n2 text))
-    (trace (recv a) (send n1) (recv (enc n1 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))))
-
-(defskeleton mass
-  (vars (n2 n1 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b)))))
-  (label 0)
-  (unrealized (0 4))
-  (origs (n2 (0 3)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton mass
-  (vars (n2 n1 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n2) (a a) (b b))
-  (precedes ((0 3) (1 1)) ((1 2) (0 4)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 3) (enc n2 (ltk a b))
-    (0 4))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((send a) (recv n2) (send (enc n2 (ltk a b)))))
-  (label 1)
-  (parent 0)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand resp 5) (enc n2 (ltk a b))
-    (0 4))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b)))))
-  (label 2)
-  (parent 0)
-  (unrealized (1 2))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass
-  (vars (n2 n1 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 2) (1 2)) ((0 3) (1 3)) ((1 4) (0 4)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (displaced 2 0 init 3) (enc n1-0 (ltk a b))
-    (1 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1) (recv (enc n1 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b)))))
-  (label 3)
-  (parent 2)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1-0) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 2) (1 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 3) (enc n1-0 (ltk a b))
-    (1 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((send a) (recv n1-0) (send (enc n1-0 (ltk a b)))))
-  (label 4)
-  (parent 2)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand resp 5) (enc n1-0 (ltk a b))
-    (1 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b)))))
-  (label 5)
-  (parent 2)
-  (unrealized (2 2))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1) (n2 n1-0) (a a) (b b))
-  (precedes ((0 2) (2 2)) ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (displaced 3 0 init 3) (enc n1-1 (ltk a b))
-    (2 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1) (recv (enc n1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b)))))
-  (label 6)
-  (parent 5)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand init 3 (n1 n1-1) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)) ((3 2) (2 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 3) (enc n1-1 (ltk a b))
-    (2 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((send a) (recv n1-1) (send (enc n1-1 (ltk a b)))))
-  (label 7)
-  (parent 5)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)) ((3 4) (2 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand resp 5) (enc n1-1 (ltk a b))
-    (2 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b)))))
-  (label 8)
-  (parent 5)
-  (unrealized (3 2))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1) (n2 n1-1) (a a) (b b))
-  (precedes ((0 2) (3 2)) ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2))
-    ((3 4) (2 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (displaced 4 0 init 3) (enc n1-2 (ltk a b))
-    (3 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1) (recv (enc n1 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b)))))
-  (label 9)
-  (parent 8)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (defstrand init 3 (n1 n1-2) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)) ((3 4) (2 2))
-    ((4 2) (3 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 3) (enc n1-2 (ltk a b))
-    (3 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b))))
-    ((send a) (recv n1-2) (send (enc n1-2 (ltk a b)))))
-  (label 10)
-  (parent 8)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 n1-3 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (defstrand resp 5 (n1 n1-3) (n2 n1-2) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)) ((3 4) (2 2))
-    ((4 4) (3 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand resp 5) (enc n1-2 (ltk a b))
-    (3 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b))))
-    ((recv a) (send n1-3) (recv (enc n1-3 (ltk a b))) (recv n1-2)
-      (send (enc n1-2 (ltk a b)))))
-  (label 11)
-  (parent 8)
-  (unrealized (4 2))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (defstrand resp 5 (n1 n1) (n2 n1-2) (a a) (b b))
-  (precedes ((0 2) (4 2)) ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2))
-    ((3 4) (2 2)) ((4 4) (3 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (displaced 5 0 init 3) (enc n1-3 (ltk a b))
-    (4 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b))))
-    ((recv a) (send n1) (recv (enc n1 (ltk a b))) (recv n1-2)
-      (send (enc n1-2 (ltk a b)))))
-  (label 12)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 n1-3 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (defstrand resp 5 (n1 n1-3) (n2 n1-2) (a a) (b b))
-  (defstrand init 3 (n1 n1-3) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)) ((3 4) (2 2))
-    ((4 4) (3 2)) ((5 2) (4 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 3) (enc n1-3 (ltk a b))
-    (4 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b))))
-    ((recv a) (send n1-3) (recv (enc n1-3 (ltk a b))) (recv n1-2)
-      (send (enc n1-2 (ltk a b))))
-    ((send a) (recv n1-3) (send (enc n1-3 (ltk a b)))))
-  (label 13)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 n1-3 n1-4 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (defstrand resp 5 (n1 n1-3) (n2 n1-2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-4) (n2 n1-3) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)) ((3 4) (2 2))
-    ((4 4) (3 2)) ((5 4) (4 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand resp 5) (enc n1-3 (ltk a b))
-    (4 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b))))
-    ((recv a) (send n1-3) (recv (enc n1-3 (ltk a b))) (recv n1-2)
-      (send (enc n1-2 (ltk a b))))
-    ((recv a) (send n1-4) (recv (enc n1-4 (ltk a b))) (recv n1-3)
-      (send (enc n1-3 (ltk a b)))))
-  (label 14)
-  (parent 11)
-  (unrealized (5 2))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 n1-3 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (defstrand resp 5 (n1 n1-3) (n2 n1-2) (a a) (b b))
-  (defstrand resp 5 (n1 n1) (n2 n1-3) (a a) (b b))
-  (precedes ((0 2) (5 2)) ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2))
-    ((3 4) (2 2)) ((4 4) (3 2)) ((5 4) (4 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (displaced 6 0 init 3) (enc n1-4 (ltk a b))
-    (5 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b))))
-    ((recv a) (send n1-3) (recv (enc n1-3 (ltk a b))) (recv n1-2)
-      (send (enc n1-2 (ltk a b))))
-    ((recv a) (send n1) (recv (enc n1 (ltk a b))) (recv n1-3)
-      (send (enc n1-3 (ltk a b)))))
-  (label 15)
-  (parent 14)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 n1-3 n1-4 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (defstrand resp 5 (n1 n1-3) (n2 n1-2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-4) (n2 n1-3) (a a) (b b))
-  (defstrand init 3 (n1 n1-4) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)) ((3 4) (2 2))
-    ((4 4) (3 2)) ((5 4) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 3) (enc n1-4 (ltk a b))
-    (5 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b))))
-    ((recv a) (send n1-3) (recv (enc n1-3 (ltk a b))) (recv n1-2)
-      (send (enc n1-2 (ltk a b))))
-    ((recv a) (send n1-4) (recv (enc n1-4 (ltk a b))) (recv n1-3)
-      (send (enc n1-3 (ltk a b))))
-    ((send a) (recv n1-4) (send (enc n1-4 (ltk a b)))))
-  (label 16)
-  (parent 14)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 n1-3 n1-4 n1-5 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (defstrand resp 5 (n1 n1-3) (n2 n1-2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-4) (n2 n1-3) (a a) (b b))
-  (defstrand resp 5 (n1 n1-5) (n2 n1-4) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)) ((3 4) (2 2))
-    ((4 4) (3 2)) ((5 4) (4 2)) ((6 4) (5 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand resp 5) (enc n1-4 (ltk a b))
-    (5 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b))))
-    ((recv a) (send n1-3) (recv (enc n1-3 (ltk a b))) (recv n1-2)
-      (send (enc n1-2 (ltk a b))))
-    ((recv a) (send n1-4) (recv (enc n1-4 (ltk a b))) (recv n1-3)
-      (send (enc n1-3 (ltk a b))))
-    ((recv a) (send n1-5) (recv (enc n1-5 (ltk a b))) (recv n1-4)
-      (send (enc n1-4 (ltk a b)))))
-  (label 17)
-  (parent 14)
-  (unrealized (6 2))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 n1-3 n1-4 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (defstrand resp 5 (n1 n1-3) (n2 n1-2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-4) (n2 n1-3) (a a) (b b))
-  (defstrand resp 5 (n1 n1) (n2 n1-4) (a a) (b b))
-  (precedes ((0 2) (6 2)) ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2))
-    ((3 4) (2 2)) ((4 4) (3 2)) ((5 4) (4 2)) ((6 4) (5 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (displaced 7 0 init 3) (enc n1-5 (ltk a b))
-    (6 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b))))
-    ((recv a) (send n1-3) (recv (enc n1-3 (ltk a b))) (recv n1-2)
-      (send (enc n1-2 (ltk a b))))
-    ((recv a) (send n1-4) (recv (enc n1-4 (ltk a b))) (recv n1-3)
-      (send (enc n1-3 (ltk a b))))
-    ((recv a) (send n1) (recv (enc n1 (ltk a b))) (recv n1-4)
-      (send (enc n1-4 (ltk a b)))))
-  (label 18)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 3))))
-
-(comment "Strand bound exceeded--aborting run")
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 n1-3 n1-4 n1-5 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (defstrand resp 5 (n1 n1-3) (n2 n1-2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-4) (n2 n1-3) (a a) (b b))
-  (defstrand resp 5 (n1 n1-5) (n2 n1-4) (a a) (b b))
-  (defstrand init 3 (n1 n1-5) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)) ((3 4) (2 2))
-    ((4 4) (3 2)) ((5 4) (4 2)) ((6 4) (5 2)) ((7 2) (6 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 3) (enc n1-5 (ltk a b))
-    (6 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b))))
-    ((recv a) (send n1-3) (recv (enc n1-3 (ltk a b))) (recv n1-2)
-      (send (enc n1-2 (ltk a b))))
-    ((recv a) (send n1-4) (recv (enc n1-4 (ltk a b))) (recv n1-3)
-      (send (enc n1-3 (ltk a b))))
-    ((recv a) (send n1-5) (recv (enc n1-5 (ltk a b))) (recv n1-4)
-      (send (enc n1-4 (ltk a b))))
-    ((send a) (recv n1-5) (send (enc n1-5 (ltk a b)))))
-  (label 19)
-  (parent 17)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton mass
-  (vars (n2 n1 n1-0 n1-1 n1-2 n1-3 n1-4 n1-5 n1-6 text) (a b name))
-  (defstrand init 5 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-1) (n2 n1-0) (a a) (b b))
-  (defstrand resp 5 (n1 n1-2) (n2 n1-1) (a a) (b b))
-  (defstrand resp 5 (n1 n1-3) (n2 n1-2) (a a) (b b))
-  (defstrand resp 5 (n1 n1-4) (n2 n1-3) (a a) (b b))
-  (defstrand resp 5 (n1 n1-5) (n2 n1-4) (a a) (b b))
-  (defstrand resp 5 (n1 n1-6) (n2 n1-5) (a a) (b b))
-  (precedes ((0 3) (1 3)) ((1 4) (0 4)) ((2 4) (1 2)) ((3 4) (2 2))
-    ((4 4) (3 2)) ((5 4) (4 2)) ((6 4) (5 2)) ((7 4) (6 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand resp 5) (enc n1-5 (ltk a b))
-    (6 2))
-  (traces
-    ((send a) (recv n1) (send (enc n1 (ltk a b))) (send n2)
-      (recv (enc n2 (ltk a b))))
-    ((recv a) (send n1-0) (recv (enc n1-0 (ltk a b))) (recv n2)
-      (send (enc n2 (ltk a b))))
-    ((recv a) (send n1-1) (recv (enc n1-1 (ltk a b))) (recv n1-0)
-      (send (enc n1-0 (ltk a b))))
-    ((recv a) (send n1-2) (recv (enc n1-2 (ltk a b))) (recv n1-1)
-      (send (enc n1-1 (ltk a b))))
-    ((recv a) (send n1-3) (recv (enc n1-3 (ltk a b))) (recv n1-2)
-      (send (enc n1-2 (ltk a b))))
-    ((recv a) (send n1-4) (recv (enc n1-4 (ltk a b))) (recv n1-3)
-      (send (enc n1-3 (ltk a b))))
-    ((recv a) (send n1-5) (recv (enc n1-5 (ltk a b))) (recv n1-4)
-      (send (enc n1-4 (ltk a b))))
-    ((recv a) (send n1-6) (recv (enc n1-6 (ltk a b))) (recv n1-5)
-      (send (enc n1-5 (ltk a b)))))
-  (label 20)
-  (parent 17)
-  (unrealized (7 2))
-  (comment "aborted"))
diff --git a/tst/mass2.lsp b/tst/mass2.lsp
deleted file mode 100644
--- a/tst/mass2.lsp
+++ /dev/null
@@ -1,19 +0,0 @@
-(defprotocol mass2 basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-      (send (cat a n2))
-      (recv (cat n1 (enc n2 (ltk a b))))
-      (send (enc n1 (ltk a b)))))
-  (defrole resp
-    (vars (a b name) (n1 n2 text))
-    (trace
-      (recv (cat a n2))
-      (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))))
-
-(defskeleton mass2
-  (vars (a b name) (n1 text))
-  (defstrand resp 3 (a a) (b b) (n1 n1))
-  (non-orig (ltk a b))
-  (uniq-orig n1))
diff --git a/tst/mass2.tst b/tst/mass2.tst
deleted file mode 100644
--- a/tst/mass2.tst
+++ /dev/null
@@ -1,606 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from mass2.lsp")
-
-(defprotocol mass2 basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (cat a n2)) (recv (cat n1 (enc n2 (ltk a b))))
-      (send (enc n1 (ltk a b)))))
-  (defrole resp
-    (vars (a b name) (n1 n2 text))
-    (trace (recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))))
-
-(defskeleton mass2
-  (vars (n1 n2 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b)))))
-  (label 0)
-  (unrealized (0 2))
-  (origs (n1 (0 1)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand init 3) (enc n1 (ltk a b))
-    (0 2))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b)))))
-  (label 1)
-  (parent 0)
-  (unrealized (1 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass2
-  (vars (n1 n2 n1-0 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n1 n1-0) (n2 n1) (a a) (b b))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand resp 2) (enc n1 (ltk a b))
-    (0 2))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((recv (cat a n1)) (send (cat n1-0 (enc n1 (ltk a b))))))
-  (label 2)
-  (parent 0)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 2) (1 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand init 3) (enc n2-0 (ltk a b))
-    (1 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b)))))
-  (label 3)
-  (parent 1)
-  (unrealized (2 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass2
-  (vars (n1 n2 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (displaced 2 0 resp 2) (enc n2-0 (ltk a b))
-    (1 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2)) (recv (cat n1 (enc n2 (ltk a b))))
-      (send (enc n1 (ltk a b)))))
-  (label 4)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n1-0 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand resp 2 (n1 n1-0) (n2 n2-0) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 1) (1 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand resp 2) (enc n2-0 (ltk a b))
-    (1 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((recv (cat a n2-0)) (send (cat n1-0 (enc n2-0 (ltk a b))))))
-  (label 5)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand init 3) (enc n2-1 (ltk a b))
-    (2 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b)))))
-  (label 6)
-  (parent 3)
-  (unrealized (3 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((1 2) (0 2)) ((2 2) (1 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (displaced 3 0 resp 2) (enc n2-1 (ltk a b))
-    (2 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2)) (recv (cat n2-0 (enc n2 (ltk a b))))
-      (send (enc n2-0 (ltk a b)))))
-  (label 7)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n1-0 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand resp 2 (n1 n1-0) (n2 n2-1) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 1) (2 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand resp 2) (enc n2-1 (ltk a b))
-    (2 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((recv (cat a n2-1)) (send (cat n1-0 (enc n2-1 (ltk a b))))))
-  (label 8)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 n2-3 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (defstrand init 3 (n1 n2-2) (n2 n2-3) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1))
-    ((4 2) (3 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand init 3) (enc n2-2 (ltk a b))
-    (3 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b))))
-    ((send (cat a n2-3)) (recv (cat n2-2 (enc n2-3 (ltk a b))))
-      (send (enc n2-2 (ltk a b)))))
-  (label 9)
-  (parent 6)
-  (unrealized (4 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (3 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (displaced 4 0 resp 2) (enc n2-2 (ltk a b))
-    (3 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2)) (recv (cat n2-1 (enc n2 (ltk a b))))
-      (send (enc n2-1 (ltk a b)))))
-  (label 10)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 n1-0 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (defstrand resp 2 (n1 n1-0) (n2 n2-2) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1))
-    ((4 1) (3 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand resp 2) (enc n2-2 (ltk a b))
-    (3 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b))))
-    ((recv (cat a n2-2)) (send (cat n1-0 (enc n2-2 (ltk a b))))))
-  (label 11)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 n2-3 n2-4 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (defstrand init 3 (n1 n2-2) (n2 n2-3) (a a) (b b))
-  (defstrand init 3 (n1 n2-3) (n2 n2-4) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1))
-    ((4 2) (3 1)) ((5 2) (4 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand init 3) (enc n2-3 (ltk a b))
-    (4 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b))))
-    ((send (cat a n2-3)) (recv (cat n2-2 (enc n2-3 (ltk a b))))
-      (send (enc n2-2 (ltk a b))))
-    ((send (cat a n2-4)) (recv (cat n2-3 (enc n2-4 (ltk a b))))
-      (send (enc n2-3 (ltk a b)))))
-  (label 12)
-  (parent 9)
-  (unrealized (5 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (defstrand init 3 (n1 n2-2) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (4 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1))
-    ((4 2) (3 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (displaced 5 0 resp 2) (enc n2-3 (ltk a b))
-    (4 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b))))
-    ((send (cat a n2)) (recv (cat n2-2 (enc n2 (ltk a b))))
-      (send (enc n2-2 (ltk a b)))))
-  (label 13)
-  (parent 9)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 n2-3 n1-0 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (defstrand init 3 (n1 n2-2) (n2 n2-3) (a a) (b b))
-  (defstrand resp 2 (n1 n1-0) (n2 n2-3) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1))
-    ((4 2) (3 1)) ((5 1) (4 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand resp 2) (enc n2-3 (ltk a b))
-    (4 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b))))
-    ((send (cat a n2-3)) (recv (cat n2-2 (enc n2-3 (ltk a b))))
-      (send (enc n2-2 (ltk a b))))
-    ((recv (cat a n2-3)) (send (cat n1-0 (enc n2-3 (ltk a b))))))
-  (label 14)
-  (parent 9)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 n2-3 n2-4 n2-5 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (defstrand init 3 (n1 n2-2) (n2 n2-3) (a a) (b b))
-  (defstrand init 3 (n1 n2-3) (n2 n2-4) (a a) (b b))
-  (defstrand init 3 (n1 n2-4) (n2 n2-5) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1))
-    ((4 2) (3 1)) ((5 2) (4 1)) ((6 2) (5 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand init 3) (enc n2-4 (ltk a b))
-    (5 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b))))
-    ((send (cat a n2-3)) (recv (cat n2-2 (enc n2-3 (ltk a b))))
-      (send (enc n2-2 (ltk a b))))
-    ((send (cat a n2-4)) (recv (cat n2-3 (enc n2-4 (ltk a b))))
-      (send (enc n2-3 (ltk a b))))
-    ((send (cat a n2-5)) (recv (cat n2-4 (enc n2-5 (ltk a b))))
-      (send (enc n2-4 (ltk a b)))))
-  (label 15)
-  (parent 12)
-  (unrealized (6 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 n2-3 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (defstrand init 3 (n1 n2-2) (n2 n2-3) (a a) (b b))
-  (defstrand init 3 (n1 n2-3) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (5 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1))
-    ((4 2) (3 1)) ((5 2) (4 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (displaced 6 0 resp 2) (enc n2-4 (ltk a b))
-    (5 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b))))
-    ((send (cat a n2-3)) (recv (cat n2-2 (enc n2-3 (ltk a b))))
-      (send (enc n2-2 (ltk a b))))
-    ((send (cat a n2)) (recv (cat n2-3 (enc n2 (ltk a b))))
-      (send (enc n2-3 (ltk a b)))))
-  (label 16)
-  (parent 12)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 n2-3 n2-4 n1-0 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (defstrand init 3 (n1 n2-2) (n2 n2-3) (a a) (b b))
-  (defstrand init 3 (n1 n2-3) (n2 n2-4) (a a) (b b))
-  (defstrand resp 2 (n1 n1-0) (n2 n2-4) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1))
-    ((4 2) (3 1)) ((5 2) (4 1)) ((6 1) (5 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand resp 2) (enc n2-4 (ltk a b))
-    (5 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b))))
-    ((send (cat a n2-3)) (recv (cat n2-2 (enc n2-3 (ltk a b))))
-      (send (enc n2-2 (ltk a b))))
-    ((send (cat a n2-4)) (recv (cat n2-3 (enc n2-4 (ltk a b))))
-      (send (enc n2-3 (ltk a b))))
-    ((recv (cat a n2-4)) (send (cat n1-0 (enc n2-4 (ltk a b))))))
-  (label 17)
-  (parent 12)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 n2-3 n2-4 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (defstrand init 3 (n1 n2-2) (n2 n2-3) (a a) (b b))
-  (defstrand init 3 (n1 n2-3) (n2 n2-4) (a a) (b b))
-  (defstrand init 3 (n1 n2-4) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (6 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1))
-    ((4 2) (3 1)) ((5 2) (4 1)) ((6 2) (5 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (displaced 7 0 resp 2) (enc n2-5 (ltk a b))
-    (6 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b))))
-    ((send (cat a n2-3)) (recv (cat n2-2 (enc n2-3 (ltk a b))))
-      (send (enc n2-2 (ltk a b))))
-    ((send (cat a n2-4)) (recv (cat n2-3 (enc n2-4 (ltk a b))))
-      (send (enc n2-3 (ltk a b))))
-    ((send (cat a n2)) (recv (cat n2-4 (enc n2 (ltk a b))))
-      (send (enc n2-4 (ltk a b)))))
-  (label 19)
-  (parent 15)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 1))))
-
-(comment "Strand bound exceeded--aborting run")
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 n2-3 n2-4 n2-5 n2-6 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (defstrand init 3 (n1 n2-2) (n2 n2-3) (a a) (b b))
-  (defstrand init 3 (n1 n2-3) (n2 n2-4) (a a) (b b))
-  (defstrand init 3 (n1 n2-4) (n2 n2-5) (a a) (b b))
-  (defstrand init 3 (n1 n2-5) (n2 n2-6) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1))
-    ((4 2) (3 1)) ((5 2) (4 1)) ((6 2) (5 1)) ((7 2) (6 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand init 3) (enc n2-5 (ltk a b))
-    (6 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b))))
-    ((send (cat a n2-3)) (recv (cat n2-2 (enc n2-3 (ltk a b))))
-      (send (enc n2-2 (ltk a b))))
-    ((send (cat a n2-4)) (recv (cat n2-3 (enc n2-4 (ltk a b))))
-      (send (enc n2-3 (ltk a b))))
-    ((send (cat a n2-5)) (recv (cat n2-4 (enc n2-5 (ltk a b))))
-      (send (enc n2-4 (ltk a b))))
-    ((send (cat a n2-6)) (recv (cat n2-5 (enc n2-6 (ltk a b))))
-      (send (enc n2-5 (ltk a b)))))
-  (label 18)
-  (parent 15)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton mass2
-  (vars (n1 n2 n2-0 n2-1 n2-2 n2-3 n2-4 n2-5 n1-0 text) (a b name))
-  (defstrand resp 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n2-0) (n2 n2-1) (a a) (b b))
-  (defstrand init 3 (n1 n2-1) (n2 n2-2) (a a) (b b))
-  (defstrand init 3 (n1 n2-2) (n2 n2-3) (a a) (b b))
-  (defstrand init 3 (n1 n2-3) (n2 n2-4) (a a) (b b))
-  (defstrand init 3 (n1 n2-4) (n2 n2-5) (a a) (b b))
-  (defstrand resp 2 (n1 n1-0) (n2 n2-5) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)) ((2 2) (1 1)) ((3 2) (2 1))
-    ((4 2) (3 1)) ((5 2) (4 1)) ((6 2) (5 1)) ((7 1) (6 1)))
-  (non-orig (ltk a b))
-  (uniq-orig n1)
-  (operation encryption-test (added-strand resp 2) (enc n2-5 (ltk a b))
-    (6 1))
-  (traces
-    ((recv (cat a n2)) (send (cat n1 (enc n2 (ltk a b))))
-      (recv (enc n1 (ltk a b))))
-    ((send (cat a n2-0)) (recv (cat n1 (enc n2-0 (ltk a b))))
-      (send (enc n1 (ltk a b))))
-    ((send (cat a n2-1)) (recv (cat n2-0 (enc n2-1 (ltk a b))))
-      (send (enc n2-0 (ltk a b))))
-    ((send (cat a n2-2)) (recv (cat n2-1 (enc n2-2 (ltk a b))))
-      (send (enc n2-1 (ltk a b))))
-    ((send (cat a n2-3)) (recv (cat n2-2 (enc n2-3 (ltk a b))))
-      (send (enc n2-2 (ltk a b))))
-    ((send (cat a n2-4)) (recv (cat n2-3 (enc n2-4 (ltk a b))))
-      (send (enc n2-3 (ltk a b))))
-    ((send (cat a n2-5)) (recv (cat n2-4 (enc n2-5 (ltk a b))))
-      (send (enc n2-4 (ltk a b))))
-    ((recv (cat a n2-5)) (send (cat n1-0 (enc n2-5 (ltk a b))))))
-  (label 20)
-  (parent 15)
-  (unrealized)
-  (comment "aborted"))
diff --git a/tst/missing_contraction.scm b/tst/missing_contraction.scm
deleted file mode 100644
--- a/tst/missing_contraction.scm
+++ /dev/null
@@ -1,54 +0,0 @@
-; missing-contraction
-;   The purpose in creating this example was to see if
-; CPSA would stubmle when it should find a substitution to
-; solve a test node that ultimately unifies the reception
-; with something *not* in the escape set.  In this case,
-; the receiver's reception is unexplained.  Ordinary
-; contraction finds the map that unifies the names a and b
-; but (enc a n (pubk b)) is not part of the escape set so
-; contraction does not find the substitution that unifies
-; n and m.
-;   Contraction doesn't work that way but CPSA does have
-; another route to finding that shape, but it involves
-; augmentation, or more correctly, displacement.  A
-; displacement will create a sender that uses m as its n,
-; and will unify this with the existing sender, resulting
-; effectively in the substitution we were looking for.
-;   At the time, CPSA failed to do this, because the map
-; that collapses the two sender strands is not a homomorphism
-; because it changes the origination point of m on the new
-; strand.
-
-(defprotocol missing-contraction basic
-  (defrole sender
-    (vars (m n text) (a b name))
-    (trace
-     (send (enc a m (pubk a)))
-     (send (enc a n (pubk b)))))
-  (defrole receiver
-    (vars (m text) (a b name))
-    (trace
-     (recv (enc a m (pubk b))))))
-
-(defskeleton missing-contraction
-  (vars (m text) (a c name))
-  (defstrand sender 2 (m m) (a a))
-  (defstrand receiver 1 (m m) (a a) (b c))
-  (precedes ((0 1) (1 0)))
-  (uniq-orig m)
-  (non-orig (privk a)))
-
-(defskeleton missing-contraction
-  (vars (m text) (a c name))
-  (defstrand sender 1 (m m) (a a))
-  (deflistener (enc a m (pubk c)))
-  (uniq-orig m)
-  (non-orig (privk a)))
-
-(defskeleton missing-contraction
-  (vars (m text) (a b c name))
-  (defstrand sender 2 (m m) (a a) (b b))
-  (defstrand receiver 1 (m m) (a a) (b c))
-  (precedes ((0 1) (1 0)))
-  (uniq-orig m)
-  (non-orig (privk a) (privk b)))
diff --git a/tst/missing_contraction.tst b/tst/missing_contraction.tst
deleted file mode 100644
--- a/tst/missing_contraction.tst
+++ /dev/null
@@ -1,228 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from missing_contraction.scm")
-
-(defprotocol missing-contraction basic
-  (defrole sender
-    (vars (m n text) (a b name))
-    (trace (send (enc a m (pubk a))) (send (enc a n (pubk b)))))
-  (defrole receiver
-    (vars (m text) (a b name))
-    (trace (recv (enc a m (pubk b))))))
-
-(defskeleton missing-contraction
-  (vars (m n text) (a c b name))
-  (defstrand sender 2 (m m) (n n) (a a) (b b))
-  (defstrand receiver 1 (m m) (a a) (b c))
-  (precedes ((0 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig m)
-  (traces ((send (enc a m (pubk a))) (send (enc a n (pubk b))))
-    ((recv (enc a m (pubk c)))))
-  (label 0)
-  (unrealized (1 0))
-  (origs (m (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton missing-contraction
-  (vars (m n text) (a b name))
-  (defstrand sender 2 (m m) (n n) (a a) (b b))
-  (defstrand receiver 1 (m m) (a a) (b a))
-  (precedes ((0 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig m)
-  (operation nonce-test (contracted (c a)) m (1 0) (enc a m (pubk a)))
-  (traces ((send (enc a m (pubk a))) (send (enc a n (pubk b))))
-    ((recv (enc a m (pubk a)))))
-  (label 1)
-  (parent 0)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((m m) (a a) (c a) (n n) (b b))))
-  (origs (m (0 0))))
-
-(defskeleton missing-contraction
-  (vars (n text) (a c b name))
-  (defstrand sender 2 (m n) (n n) (a a) (b b))
-  (defstrand receiver 1 (m n) (a a) (b c))
-  (precedes ((0 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (displaced 2 0 sender 2) m (1 0)
-    (enc a m (pubk a)))
-  (traces ((send (enc a n (pubk a))) (send (enc a n (pubk b))))
-    ((recv (enc a n (pubk c)))))
-  (label 2)
-  (parent 0)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((m n) (a a) (c c) (n n) (b b))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol missing-contraction basic
-  (defrole sender
-    (vars (m n text) (a b name))
-    (trace (send (enc a m (pubk a))) (send (enc a n (pubk b)))))
-  (defrole receiver
-    (vars (m text) (a b name))
-    (trace (recv (enc a m (pubk b))))))
-
-(defskeleton missing-contraction
-  (vars (m text) (a c name))
-  (defstrand sender 1 (m m) (a a))
-  (deflistener (enc a m (pubk c)))
-  (non-orig (privk a))
-  (uniq-orig m)
-  (traces ((send (enc a m (pubk a))))
-    ((recv (enc a m (pubk c))) (send (enc a m (pubk c)))))
-  (label 3)
-  (unrealized (1 0))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton missing-contraction
-  (vars (m text) (a c name))
-  (defstrand sender 1 (m m) (a a))
-  (deflistener (enc a m (pubk c)))
-  (precedes ((0 0) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig m)
-  (traces ((send (enc a m (pubk a))))
-    ((recv (enc a m (pubk c))) (send (enc a m (pubk c)))))
-  (label 4)
-  (parent 3)
-  (unrealized (1 0))
-  (origs (m (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton missing-contraction
-  (vars (m text) (a name))
-  (defstrand sender 1 (m m) (a a))
-  (deflistener (enc a m (pubk a)))
-  (precedes ((0 0) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig m)
-  (operation nonce-test (contracted (c a)) m (1 0) (enc a m (pubk a)))
-  (traces ((send (enc a m (pubk a))))
-    ((recv (enc a m (pubk a))) (send (enc a m (pubk a)))))
-  (label 5)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((m m) (a a) (c a))))
-  (origs (m (0 0))))
-
-(defskeleton missing-contraction
-  (vars (m text) (c a b name))
-  (deflistener (enc a m (pubk c)))
-  (defstrand sender 2 (m m) (n m) (a a) (b b))
-  (precedes ((1 1) (0 0)))
-  (non-orig (privk a))
-  (uniq-orig m)
-  (operation nonce-test (displaced 0 2 sender 2) m-0 (1 0)
-    (enc a-0 m-0 (pubk a-0)))
-  (traces ((recv (enc a m (pubk c))) (send (enc a m (pubk c))))
-    ((send (enc a m (pubk a))) (send (enc a m (pubk b)))))
-  (label 6)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((1 0) ((m m) (a a) (c c))))
-  (origs (m (1 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol missing-contraction basic
-  (defrole sender
-    (vars (m n text) (a b name))
-    (trace (send (enc a m (pubk a))) (send (enc a n (pubk b)))))
-  (defrole receiver
-    (vars (m text) (a b name))
-    (trace (recv (enc a m (pubk b))))))
-
-(defskeleton missing-contraction
-  (vars (m n text) (a b c name))
-  (defstrand sender 2 (m m) (n n) (a a) (b b))
-  (defstrand receiver 1 (m m) (a a) (b c))
-  (precedes ((0 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (traces ((send (enc a m (pubk a))) (send (enc a n (pubk b))))
-    ((recv (enc a m (pubk c)))))
-  (label 7)
-  (unrealized (1 0))
-  (origs (m (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton missing-contraction
-  (vars (m n text) (a b name))
-  (defstrand sender 2 (m m) (n n) (a a) (b b))
-  (defstrand receiver 1 (m m) (a a) (b a))
-  (precedes ((0 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig m)
-  (operation nonce-test (contracted (c a)) m (1 0) (enc a m (pubk a)))
-  (traces ((send (enc a m (pubk a))) (send (enc a n (pubk b))))
-    ((recv (enc a m (pubk a)))))
-  (label 8)
-  (parent 7)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((m m) (a a) (b b) (c a) (n n))))
-  (origs (m (0 0))))
-
-(defskeleton missing-contraction
-  (vars (n text) (a b c name))
-  (defstrand sender 2 (m n) (n n) (a a) (b b))
-  (defstrand receiver 1 (m n) (a a) (b c))
-  (precedes ((0 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n)
-  (operation nonce-test (displaced 2 0 sender 2) m (1 0)
-    (enc a m (pubk a)))
-  (traces ((send (enc a n (pubk a))) (send (enc a n (pubk b))))
-    ((recv (enc a n (pubk c)))))
-  (label 9)
-  (parent 7)
-  (unrealized (1 0))
-  (origs (n (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton missing-contraction
-  (vars (n text) (a b name))
-  (defstrand sender 2 (m n) (n n) (a a) (b b))
-  (defstrand receiver 1 (m n) (a a) (b a))
-  (precedes ((0 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n)
-  (operation nonce-test (contracted (c a)) n (1 0) (enc a n (pubk a))
-    (enc a n (pubk b)))
-  (traces ((send (enc a n (pubk a))) (send (enc a n (pubk b))))
-    ((recv (enc a n (pubk a)))))
-  (label 10)
-  (parent 9)
-  (seen 8)
-  (unrealized)
-  (origs (n (0 0)))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton missing-contraction
-  (vars (n text) (a b name))
-  (defstrand sender 2 (m n) (n n) (a a) (b b))
-  (defstrand receiver 1 (m n) (a a) (b b))
-  (precedes ((0 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n)
-  (operation nonce-test (contracted (c b)) n (1 0) (enc a n (pubk a))
-    (enc a n (pubk b)))
-  (traces ((send (enc a n (pubk a))) (send (enc a n (pubk b))))
-    ((recv (enc a n (pubk b)))))
-  (label 11)
-  (parent 9)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((m n) (a a) (b b) (c b) (n n))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/mtic.scm b/tst/mtic.scm
new file mode 100644
--- /dev/null
+++ b/tst/mtic.scm
@@ -0,0 +1,51 @@
+(herald "MTI C(0) protocol"
+  (algebra diffie-hellman))
+
+(defprotocol mtic diffie-hellman
+  (defrole init
+    (vars (a b name) (h2 h3 base) (x expn))
+    (trace
+     (send (enc (exp (gen) x) a (pubk b)))
+     (recv (enc h2 (exp h2 x) h3 b (pubk a)))
+     (send (enc (exp h3 x) (pubk b)))
+    )
+    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role")
+  )
+  (defrole resp
+    (vars (b a name) (h1 base) (y z expn))
+    (trace
+     (recv (enc h1 a (pubk b)))
+     (send (enc (exp (gen) y) (exp h1 y) (exp (gen) z) b (pubk a)))
+     (recv (enc (exp h1 z) (pubk b)))
+    )
+    (uniq-gen y z)
+    (comment "Y and Z should be assumed to be freshly chosen per role")
+  )
+  (comment "Needham-Schroeder-Lowe DH challenge/responses in place of nonces")
+)
+
+;;; The initiator point-of-view
+(defskeleton mtic
+  (vars (a b name) (h2 h3 base) (x expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x))
+  (non-orig (privk b) (privk a))
+  (comment "Initiator point-of-view"))
+
+;;; The responder point-of-view
+(defskeleton mtic
+  (vars (a b name) (h1 base) (y z expn))
+  (defstrand resp 3 (a a) (b b) (h1 h1) (y y) (z z))
+  (non-orig (privk a))
+  (comment "Responder point-of-view"))
+
+;(defskeleton dhnsl
+;  (vars (a b a-0 b-0 name) (y z z-0 x expn))
+;  (defstrand resp 3 (b b) (a a) (h1 (exp (gen) (mul (rec z-0) x))) (y y)
+;    (z z))
+;  (defstrand init 1 (a a-0) (b b-0) (x x))
+;  (precedes ((1 0) (0 0)))
+;  (non-orig (privk a))
+;  (uniq-gen y z x)
+;  (comment "empty cohort"))
+
diff --git a/tst/mtic.tst b/tst/mtic.tst
new file mode 100644
--- /dev/null
+++ b/tst/mtic.tst
@@ -0,0 +1,126 @@
+(herald "MTI C(0) protocol" (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from mtic.scm")
+
+(defprotocol mtic diffie-hellman
+  (defrole init
+    (vars (a b name) (h2 h3 base) (x expn))
+    (trace (send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc h2 (exp h2 x) h3 b (pubk a)))
+      (send (enc (exp h3 x) (pubk b))))
+    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role"))
+  (defrole resp
+    (vars (b a name) (h1 base) (y z expn))
+    (trace (recv (enc h1 a (pubk b)))
+      (send (enc (exp (gen) y) (exp h1 y) (exp (gen) z) b (pubk a)))
+      (recv (enc (exp h1 z) (pubk b))))
+    (uniq-gen y z)
+    (ind-zero-in (y h1) (z h1))
+    (comment "Y and Z should be assumed to be freshly chosen per role"))
+  (comment
+    "Needham-Schroeder-Lowe DH challenge/responses in place of nonces"))
+
+(defskeleton mtic
+  (vars (a b name) (h2 h3 base) (x expn))
+  (defstrand init 3 (a a) (b b) (h2 h2) (h3 h3) (x x))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (comment "Initiator point-of-view")
+  (traces
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc h2 (exp h2 x) h3 b (pubk a)))
+      (send (enc (exp h3 x) (pubk b)))))
+  (label 0)
+  (unrealized (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton mtic
+  (vars (a b name) (h3 base) (x expr) (x-0 expn))
+  (defstrand init 3 (a a) (b b) (h2 (exp (gen) (rec x))) (h3 h3)
+    (x x-0))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x-0)
+  (operation nonce-test (displaced 1 0 init 1)
+    (exp (gen) (mul (rec x) x-1)) (0 1)
+    (enc (exp (gen) x-1) a (pubk b)))
+  (traces
+    ((send (enc (exp (gen) x-0) a (pubk b)))
+      (recv
+        (enc (exp (gen) (rec x)) (exp (gen) (mul (rec x) x-0)) h3 b
+          (pubk a))) (send (enc (exp h3 x-0) (pubk b)))))
+  (label 1)
+  (parent 0)
+  (seen 1)
+  (unrealized (0 1))
+  (origs)
+  (comment "1 in cohort - 0 not yet seen"))
+
+(comment "Nothing left to do")
+
+(defprotocol mtic diffie-hellman
+  (defrole init
+    (vars (a b name) (h2 h3 base) (x expn))
+    (trace (send (enc (exp (gen) x) a (pubk b)))
+      (recv (enc h2 (exp h2 x) h3 b (pubk a)))
+      (send (enc (exp h3 x) (pubk b))))
+    (uniq-gen x)
+    (comment "X should be assumed to be freshly chosen per role"))
+  (defrole resp
+    (vars (b a name) (h1 base) (y z expn))
+    (trace (recv (enc h1 a (pubk b)))
+      (send (enc (exp (gen) y) (exp h1 y) (exp (gen) z) b (pubk a)))
+      (recv (enc (exp h1 z) (pubk b))))
+    (uniq-gen y z)
+    (ind-zero-in (y h1) (z h1))
+    (comment "Y and Z should be assumed to be freshly chosen per role"))
+  (comment
+    "Needham-Schroeder-Lowe DH challenge/responses in place of nonces"))
+
+(defskeleton mtic
+  (vars (a b name) (h1 base) (y z expn))
+  (defstrand resp 3 (b b) (a a) (h1 h1) (y y) (z z))
+  (ind-zero-in (y h1) (z h1))
+  (non-orig (privk a))
+  (uniq-gen y z)
+  (comment "Responder point-of-view")
+  (traces
+    ((recv (enc h1 a (pubk b)))
+      (send (enc (exp (gen) y) (exp h1 y) (exp (gen) z) b (pubk a)))
+      (recv (enc (exp h1 z) (pubk b)))))
+  (label 2)
+  (unrealized (0 2))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton mtic
+  (vars (a b name) (z y x expn))
+  (defstrand resp 3 (b b) (a a) (h1 (exp (gen) x)) (y y) (z z))
+  (defstrand init 3 (a a) (b b) (h2 (exp (gen) y)) (h3 (exp (gen) z))
+    (x x))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)) (z (exp (gen) x)))
+  (non-orig (privk a))
+  (uniq-gen z y x)
+  (operation nonce-test (added-strand init 3) (exp (gen) (mul z x))
+    (0 2)
+    (enc (exp (gen) y) (exp (gen) (mul y x)) (exp (gen) z) b (pubk a)))
+  (traces
+    ((recv (enc (exp (gen) x) a (pubk b)))
+      (send
+        (enc (exp (gen) y) (exp (gen) (mul y x)) (exp (gen) z) b
+          (pubk a))) (recv (enc (exp (gen) (mul z x)) (pubk b))))
+    ((send (enc (exp (gen) x) a (pubk b)))
+      (recv
+        (enc (exp (gen) y) (exp (gen) (mul y x)) (exp (gen) z) b
+          (pubk a))) (send (enc (exp (gen) (mul z x)) (pubk b)))))
+  (label 3)
+  (parent 2)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (h1 (exp (gen) x)) (y y) (z z))))
+  (origs))
+
+(comment "Nothing left to do")
diff --git a/tst/neq_test.scm b/tst/neq_test.scm
new file mode 100644
--- /dev/null
+++ b/tst/neq_test.scm
@@ -0,0 +1,46 @@
+(herald "Inequality constraint test protocol"
+   (comment "First skeleton should have a shape,"
+            "second, and hird should be dead."))
+
+(defprotocol neqtest basic
+  (defrole init
+     (vars (n1 n2 text) (k skey))
+     (trace
+       (send (cat n1 (enc n1 n2 k)))
+       (recv n2))
+     (non-orig k)
+     (uniq-orig n1 n2)
+  )
+)
+
+;;; With no inequality declaration, a shape
+;;; should be found where n1 = n2.
+(defskeleton neqtest
+   (vars (n1 n2 text) (k skey))
+   (defstrand init 2 (n1 n1) (n2 n2) (k k)))
+
+;;; With the inequality declaration that n1 != n2,
+;;; no shape should exist.
+(defskeleton neqtest
+   (vars (n1 n2 text))
+   (defstrand init 2 (n1 n1) (n2 n2))
+   (neq (n1 n2)))
+
+(defprotocol neqtest2 basic
+  (defrole init
+     (vars (n1 n2 n3 text) (k skey))
+     (trace
+       (send (cat n1 (enc n1 n2 n3 k)))
+       (recv n2))
+     (non-orig k)
+     (uniq-orig n1 n2)
+  )
+)
+
+;;; Here, we use the neqlist declaration to force
+;;; deadness, as an alternative.
+(defskeleton neqtest2
+   (vars (n1 n2 n3 text) (k skey))
+   (defstrand init 2 (n1 n1) (n2 n2) (n3 n3) (k k))
+   (neqlist ((n1 n2 n3)))
+)
diff --git a/tst/neq_test.tst b/tst/neq_test.tst
new file mode 100644
--- /dev/null
+++ b/tst/neq_test.tst
@@ -0,0 +1,82 @@
+(herald "Inequality constraint test protocol"
+  (comment "First skeleton should have a shape,"
+    "second, and hird should be dead."))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from neq_test.scm")
+
+(defprotocol neqtest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))
+
+(defskeleton neqtest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (traces ((send (cat n1 (enc n1 n2 k))) (recv n2)))
+  (label 0)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton neqtest
+  (vars (n1 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n1) (k k))
+  (non-orig k)
+  (uniq-orig n1)
+  (operation nonce-test (displaced 1 0 init 1) n2 (0 1) (enc n1 n2 k))
+  (traces ((send (cat n1 (enc n1 n1 k))) (recv n1)))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n1 n1) (n2 n1) (k k))))
+  (origs (n1 (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol neqtest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))
+
+(defskeleton neqtest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (neq (n1 n2))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (traces ((send (cat n1 (enc n1 n2 k))) (recv n2)))
+  (label 2)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol neqtest2 basic
+  (defrole init
+    (vars (n1 n2 n3 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 n3 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))
+
+(defskeleton neqtest2
+  (vars (n1 n2 n3 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (n3 n3) (k k))
+  (neqlist ((n1 n2 n3)))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (traces ((send (cat n1 (enc n1 n2 n3 k))) (recv n2)))
+  (label 3)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
diff --git a/tst/neuman-stubblebine-alt.lisp b/tst/neuman-stubblebine-alt.lisp
deleted file mode 100644
--- a/tst/neuman-stubblebine-alt.lisp
+++ /dev/null
@@ -1,36 +0,0 @@
-;;; derived from the protocol description in the CPSA tst directory
-
-(defprotocol neuman-stubblebine basic
-  (defrole init
-    (vars (a name) (b name) (ks name) (ra text) (rb text) (ltk-a-ks skey) (k skey) (tb text))
-    (trace (send (cat a ra))
-	   (recv (cat (enc (cat b ra k tb) ltk-a-ks) (enc (cat a k tb) (ltk b ks)) rb))
-	   (send (cat (enc (cat a k tb) (ltk b ks)) (enc rb k)))))
-  (defrole resp
-    (vars (a name) (b name) (ks name) (ra text) (rb text) (k skey) (tb text))
-    (trace (recv (cat a ra))
-	   (send (cat b rb (enc (cat a ra tb) (ltk b ks))))
-	   (recv (cat (enc (cat a k tb) (ltk b ks)) (enc rb k)))))
-  (defrole keyserver
-    (vars (a name) (b name) (ks name) (ra text) (rb text) (k skey) (tb text))
-    (trace (recv (cat b rb (enc (cat a ra tb) (ltk b ks))))
-	   (send (cat (enc (cat b ra k tb) (ltk a ks)) (enc (cat a k tb) (ltk b ks)) rb)))
-    (uniq-orig k)))
-
-(defskeleton neuman-stubblebine
-  (vars (a name) (b name) (ks name) (ra text) (rb text))
-  (defstrand init 3 (a a) (b b) (ks ks) (ra ra) (rb rb))
-  (uniq-orig ra rb)
-  (non-orig (ltk a ks) (ltk b ks)))
-
-(defskeleton neuman-stubblebine
-  (vars (a name) (b name) (ks name) (ra text) (rb text))
-  (defstrand resp 3 (a a) (b b) (ks ks) (ra ra) (rb rb))
-  (uniq-orig ra rb)
-  (non-orig (ltk a ks) (ltk b ks)))
-
-(defskeleton neuman-stubblebine
-  (vars (a name) (b name) (ks name) (ra text) (rb text))
-  (defstrand keyserver 2 (a a) (b b) (ks ks) (ra ra) (rb rb))
-  (uniq-orig ra rb)
-  (non-orig (ltk a ks) (ltk b ks)))
diff --git a/tst/neuman-stubblebine-reauth.lisp b/tst/neuman-stubblebine-reauth.lisp
deleted file mode 100644
--- a/tst/neuman-stubblebine-reauth.lisp
+++ /dev/null
@@ -1,42 +0,0 @@
-(defprotocol neuman-stubblebine basic
-  (defrole init
-    (vars (a name) (b name) (ks name) (ra text) (ra-prime text) (rb text) (rb-prime text) (k skey) (tb text))
-    (trace (send (cat a ra))
-	   (recv (cat (enc (cat b ra k tb) (ltk a ks)) (enc (cat a k tb) (ltk b ks)) rb))
-	   (send (cat (enc (cat a k tb) (ltk b ks)) (enc rb k)))
-	   (send (cat (enc (cat a k tb) (ltk b ks)) ra-prime))
-	   (recv (cat rb-prime (enc ra-prime k)))
-	   (send (enc rb-prime k))))
-  (defrole resp
-    (vars (a name) (b name) (ks name) (ra text) (ra-prime text) (rb text) (rb-prime text) (k skey) (tb text))
-    (trace (recv (cat a ra))
-	   (send (cat b rb (enc (cat a ra tb) (ltk b ks))))
-	   (recv (cat (enc (cat a k tb) (ltk b ks)) (enc rb k)))
-	   (recv (cat (enc (cat a k tb) (ltk b ks)) ra-prime))
-	   (send (cat rb-prime (enc ra-prime k)))
-	   (recv (enc rb-prime k))))
-  (defrole keyserver
-    (vars (a name) (b name) (ks name) (ra text) (rb text) (k skey) (tb text))
-    (trace (recv (cat b rb (enc (cat a ra tb) (ltk b ks))))
-	   (send (cat (enc (cat b ra k tb) (ltk a ks)) (enc (cat a k tb) (ltk b ks)) rb)))
-    (uniq-orig k)))
-
-;(defskeleton neuman-stubblebine
-;  (vars (a name) (b name) (k skey) (ks name) (ra text) (rb text))
-;  (defstrand init 6 (a a) (b b) (ks ks) (ra ra) (rb rb))
-;  (deflistener k)
-;  (uniq-orig ra rb)
-;  (non-orig (ltk a ks) (ltk b ks)))
-
-(defskeleton neuman-stubblebine
-  (vars (a name) (b name) (ks name) (ra text) (rb text) (k skey))
-  (defstrand resp 6 (a a) (b b) (ks ks) (ra ra) (rb rb) (k k))
- ; (deflistener k)
-  (uniq-orig ra rb)
-  (non-orig (ltk a ks) (ltk b ks)))
-
-;(defskeleton neuman-stubblebine
-;  (vars (a name) (b name) (ks name) (ra text) (rb text))
-;  (defstrand keyserver 2 (a a) (b b) (ks ks) (ra ra) (rb rb))
-;  (uniq-orig ra rb)
-;  (non-orig (ltk a ks) (ltk b ks)))
diff --git a/tst/neuman-stubblebine-reauth.lsp b/tst/neuman-stubblebine-reauth.lsp
deleted file mode 100644
--- a/tst/neuman-stubblebine-reauth.lsp
+++ /dev/null
@@ -1,38 +0,0 @@
-(defprotocol neuman-stubblebine-reauth basic
-  (defrole init (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace
-     (send (cat a ra))
-     (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-     (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole resp (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace
-     (recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-     (recv (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole init-reauth
-    (vars (a b ks name) (ra-prime rb-prime text) (k skey) (tb text))
-    (trace
-     (recv (enc a k tb (ltk b ks)))
-     (send (cat (enc a k tb (ltk b ks)) ra-prime))
-     (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k))))
-  (defrole resp-reauth
-    (vars (a b ks name) (ra-prime rb-prime text) (k skey) (tb text))
-    (trace
-     (recv (cat (enc a k tb (ltk b ks)) ra-prime))
-     (send (cat rb-prime (enc ra-prime k)))
-     (recv (enc rb-prime k))))
-  (defrole keyserver
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace
-     (recv (cat b rb (enc a ra tb (ltk b ks))))
-     (send (cat (enc b ra k tb (ltk a ks))
-		(enc a k tb (ltk b ks)) rb)))
-    (uniq-orig k)))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb-0 tb rb text) (a b ks name) (k skey)
-	(ra-prime rb-prime text))
-  (defstrand resp 3 (a a) (b b) (ks ks) (ra ra) (rb rb) (k k) (tb tb))
-  (defstrand resp-reauth 3 (a a) (b b) (ks ks) (k k) (ra-prime ra-prime)
-    (rb-prime rb-prime))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k ra-prime rb-prime))
diff --git a/tst/neuman-stubblebine-reauth.tst b/tst/neuman-stubblebine-reauth.tst
deleted file mode 100644
--- a/tst/neuman-stubblebine-reauth.tst
+++ /dev/null
@@ -1,20353 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from neuman-stubblebine-reauth.lsp")
-
-(defprotocol neuman-stubblebine-reauth basic
-  (defrole init
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole resp
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole init-reauth
-    (vars (a b ks name) (ra-prime rb-prime text) (k skey) (tb text))
-    (trace (recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k))))
-  (defrole resp-reauth
-    (vars (a b ks name) (ra-prime rb-prime text) (k skey) (tb text))
-    (trace (recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k))))
-  (defrole keyserver
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    (uniq-orig k)))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k))))
-  (label 0)
-  (unrealized (0 2) (1 0))
-  (origs (rb (0 1)) (rb-prime (1 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((2 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc a k tb-0 (ltk b ks)) (1 0))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 2) (1 2) (2 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((2 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 3 0 resp 2)
-    (enc a ra-0 tb-0 (ltk b ks)) (2 0))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 2) (1 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (precedes ((2 1) (0 2)) ((2 1) (1 0)) ((3 1) (2 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp 2)
-    (enc a ra-0 tb-0 (ltk b ks)) (2 0))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks))))))
-  (label 3)
-  (parent 1)
-  (unrealized (0 2) (1 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((3 2) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb-prime k)
-    (1 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb-prime))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb-prime k)))))
-  (label 4)
-  (parent 2)
-  (unrealized (0 2) (3 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((3 3) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc rb-prime k) (1 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k))))
-  (label 5)
-  (parent 2)
-  (unrealized (0 2) (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc rb-prime k) (1 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k)))))
-  (label 6)
-  (parent 2)
-  (unrealized (0 2) (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((3 1) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb-prime k) (1 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv k) (send k)))
-  (label 7)
-  (parent 2)
-  (unrealized (0 2) (3 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-1 tb-1 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-1) (rb rb-prime) (tb tb-1) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((1 1) (4 1)) ((2 1) (0 2)) ((2 1) (1 0)) ((3 1) (2 0))
-    ((4 2) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb-prime k)
-    (1 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-1 (ltk a-0 ks-0))
-          (enc a-0 k tb-1 (ltk b-0 ks-0)) rb-prime))
-      (send (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) (enc rb-prime k)))))
-  (label 8)
-  (parent 3)
-  (unrealized (0 2) (4 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0 tb-1
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-1) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 1) (2 0)) ((4 3) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc rb-prime k) (1 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a-0 k tb-1 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k))))
-  (label 9)
-  (parent 3)
-  (unrealized (0 2) (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 rb-prime-0 tb-1
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb-1) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (1 0)) ((3 1) (2 0))
-    ((4 1) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc rb-prime k) (1 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k)))))
-  (label 10)
-  (parent 3)
-  (unrealized (0 2) (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (deflistener k)
-  (precedes ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0)) ((3 1) (2 0))
-    ((4 1) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb-prime k) (1 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv k) (send k)))
-  (label 11)
-  (parent 3)
-  (unrealized (0 2) (4 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((3 2) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (3 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k)))))
-  (label 12)
-  (parent 4)
-  (unrealized (0 2) (3 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((3 3) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (3 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k))))
-  (label 13)
-  (parent 5)
-  (unrealized (0 2) (3 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (3 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k)))))
-  (label 14)
-  (parent 6)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-1) (rb rb-prime) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((1 1) (4 1)) ((2 1) (0 2)) ((2 1) (1 0)) ((3 1) (2 0))
-    ((4 2) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test
-    (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-1 tb-0)) k (4 1)
-    (enc a k tb-0 (ltk b ks)) (enc b ra-0 k tb-0 (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb-0 (ltk b ks)) (enc rb-prime k)))))
-  (label 15)
-  (parent 8)
-  (unrealized (0 2) (4 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 1) (2 0)) ((4 3) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test
-    (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-1 tb-0)) k (4 0)
-    (enc a k tb-0 (ltk b ks)) (enc b ra-0 k tb-0 (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k))))
-  (label 16)
-  (parent 9)
-  (unrealized (0 2) (4 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (1 0)) ((3 1) (2 0))
-    ((4 1) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test
-    (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-1 tb-0)) k (4 0)
-    (enc a k tb-0 (ltk b ks)) (enc b ra-0 k tb-0 (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k)))))
-  (label 17)
-  (parent 10)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((3 0) (0 0)) ((3 2) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 4 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (3 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k)))))
-  (label 18)
-  (parent 12)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 1)) ((3 3) (1 2)) ((4 2) (3 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-0 k)
-    (3 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-0 k)))))
-  (label 19)
-  (parent 13)
-  (unrealized (0 2) (4 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((3 3) (1 2)) ((4 3) (3 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-0 k) (3 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 20)
-  (parent 13)
-  (unrealized (0 2) (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (3 0))
-    ((3 1) (1 0)) ((3 3) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 4 1 resp-reauth 2)
-    (enc ra-prime-0 k) (3 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k))))
-  (label 21)
-  (parent 13)
-  (unrealized (0 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((3 3) (1 2)) ((4 1) (3 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-0 k) (3 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 22)
-  (parent 13)
-  (unrealized (0 2) (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((3 3) (1 2)) ((4 1) (3 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-0 k)
-    (3 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv k) (send k)))
-  (label 23)
-  (parent 13)
-  (unrealized (0 2) (4 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 1))
-    ((3 1) (1 2)) ((4 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 24)
-  (parent 14)
-  (unrealized (4 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 1) (1 2)) ((4 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 25)
-  (parent 14)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb ra-prime rb-prime rb rb-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((1 1) (3 0)) ((2 1) (1 0))
-    ((3 1) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 4 1 resp-reauth 2) (enc rb-0 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k)))))
-  (label 26)
-  (parent 14)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 rb-prime-1 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 1) (1 2)) ((4 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 27)
-  (parent 14)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 1) (1 2)) ((4 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k)))) ((recv k) (send k)))
-  (label 28)
-  (parent 14)
-  (unrealized (4 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((1 1) (4 1)) ((2 1) (0 2)) ((2 1) (1 0)) ((3 1) (2 0))
-    ((4 2) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 2 keyserver 2)
-    (enc b ra-1 k tb-0 (ltk a ks)) (4 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb-0 (ltk b ks)) (enc rb-prime k)))))
-  (label 29)
-  (parent 15)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0 ra-1 tb-1
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-0) (tb tb-1) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-0 k)
-    (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-1 (ltk a-0 ks-0))
-          (enc a-0 k tb-1 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) (enc ra-prime-0 k)))))
-  (label 30)
-  (parent 16)
-  (unrealized (0 2) (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 tb-1 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-1) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-0 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a-0 k tb-1 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 31)
-  (parent 16)
-  (unrealized (0 2) (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (2 0))
-    ((4 1) (1 0)) ((4 3) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 1 resp-reauth 2)
-    (enc ra-prime-0 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k))))
-  (label 32)
-  (parent 16)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      rb-prime-0 tb-1 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb-1) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-0 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 33)
-  (parent 16)
-  (unrealized (0 2) (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-0 k)
-    (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv k) (send k)))
-  (label 34)
-  (parent 16)
-  (unrealized (0 2) (5 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (4 0)) ((2 1) (0 2)) ((2 1) (1 0)) ((3 1) (2 0))
-    ((4 1) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 2 keyserver 2)
-    (enc a k tb-0 (ltk b ks)) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k)))))
-  (label 35)
-  (parent 17)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 1))
-    ((3 0) (0 0)) ((3 2) (1 2)) ((4 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 36)
-  (parent 18)
-  (unrealized (4 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 0) (0 0)) ((3 2) (1 2)) ((4 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 37)
-  (parent 18)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb ra-prime rb-prime rb text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((1 1) (3 1)) ((2 1) (1 0))
-    ((3 0) (0 0)) ((3 2) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 4 1 resp-reauth 2) (enc rb-0 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k)))))
-  (label 38)
-  (parent 18)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (3 0)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 0) (0 0)) ((3 2) (1 2)) ((4 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 39)
-  (parent 18)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 0) (0 0)) ((3 2) (1 2)) ((4 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv k) (send k)))
-  (label 40)
-  (parent 18)
-  (unrealized (4 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 1)) ((3 3) (1 2)) ((4 2) (3 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 41)
-  (parent 19)
-  (unrealized (0 2) (4 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((3 3) (1 2)) ((4 3) (3 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 42)
-  (parent 20)
-  (unrealized (0 2) (4 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 1))
-    ((3 1) (1 0)) ((3 3) (1 2)) ((4 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 43)
-  (parent 21)
-  (unrealized (4 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((3 1) (1 0)) ((3 3) (1 2)) ((4 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 44)
-  (parent 21)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((3 1) (1 0)) ((3 3) (1 2)) ((4 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 45)
-  (parent 21)
-  (unrealized (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((3 1) (1 0)) ((3 3) (1 2)) ((4 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv k) (send k)))
-  (label 46)
-  (parent 21)
-  (unrealized (4 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((3 3) (1 2)) ((4 1) (3 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 47)
-  (parent 22)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 1))
-    ((3 1) (1 2)) ((4 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 48)
-  (parent 24)
-  (unrealized (4 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 1) (1 2)) ((4 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 49)
-  (parent 25)
-  (unrealized (4 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 rb-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 1) (1 2)) ((4 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 50)
-  (parent 27)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((1 1) (4 1)) ((2 1) (0 2)) ((2 1) (1 0)) ((3 1) (2 0))
-    ((4 2) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 2 keyserver 2)
-    (enc a k tb-0 (ltk b ks)) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k)))))
-  (label 51)
-  (parent 29)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0 ra-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test
-    (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-1 tb-0)) k (5 1)
-    (enc a k tb-0 (ltk b ks)) (enc b ra-0 k tb-0 (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb-0 (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 52)
-  (parent 30)
-  (unrealized (0 2) (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test
-    (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-1 tb-0)) k (5 0)
-    (enc a k tb-0 (ltk b ks)) (enc b ra-0 k tb-0 (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 53)
-  (parent 31)
-  (unrealized (0 2) (5 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (4 0)) ((3 1) (2 0))
-    ((4 1) (1 0)) ((4 3) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 2 keyserver 2)
-    (enc a k tb-0 (ltk b ks)) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k))))
-  (label 54)
-  (parent 32)
-  (unrealized (0 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      rb-prime-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test
-    (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-1 tb-0)) k (5 0)
-    (enc a k tb-0 (ltk b ks)) (enc b ra-0 k tb-0 (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 55)
-  (parent 33)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-1 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (5 1)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 1))
-    ((3 1) (2 0)) ((4 1) (1 2)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 56)
-  (parent 35)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 1) (1 2)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 57)
-  (parent 35)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra ra-prime rb-prime tb ra-0 rb rb-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((1 1) (4 0)) ((2 1) (1 0))
-    ((3 1) (2 0)) ((4 1) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 1 resp-reauth 2) (enc rb-1 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (cat a ra-0)) (send (cat b rb-0 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k)))))
-  (label 58)
-  (parent 35)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 rb-prime-1
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 0)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 1) (1 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 59)
-  (parent 35)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0)) ((3 1) (2 0))
-    ((4 1) (1 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k)))) ((recv k) (send k)))
-  (label 60)
-  (parent 35)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 1))
-    ((3 0) (0 0)) ((3 2) (1 2)) ((4 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 61)
-  (parent 36)
-  (unrealized (4 1))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 0) (0 0)) ((3 2) (1 2)) ((4 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 62)
-  (parent 37)
-  (unrealized (4 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((3 0) (0 0)) ((3 2) (1 2)) ((4 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 63)
-  (parent 39)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (3 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 1)) ((3 3) (1 2)) ((4 0) (0 0))
-    ((4 2) (3 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (4 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 64)
-  (parent 41)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 1)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 65)
-  (parent 42)
-  (unrealized (0 2) (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 66)
-  (parent 42)
-  (unrealized (0 2) (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((3 3) (1 2)) ((4 1) (1 0)) ((4 3) (3 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 1 resp-reauth 2)
-    (enc ra-prime-1 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k))))
-  (label 67)
-  (parent 42)
-  (unrealized (0 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 68)
-  (parent 42)
-  (unrealized (0 2) (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))) ((recv k) (send k)))
-  (label 69)
-  (parent 42)
-  (unrealized (0 2) (5 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 1))
-    ((3 1) (1 0)) ((3 3) (1 2)) ((4 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 70)
-  (parent 43)
-  (unrealized (4 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((3 1) (1 0)) ((3 3) (1 2)) ((4 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 71)
-  (parent 44)
-  (unrealized (4 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((3 1) (1 0)) ((3 3) (1 2)) ((4 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (4 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 72)
-  (parent 45)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (3 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-0 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((3 3) (1 2)) ((4 1) (3 2))
-    ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 73)
-  (parent 47)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (3 2))
-    ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 74)
-  (parent 47)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb ra-prime rb-prime rb ra-prime-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((1 1) (3 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((3 3) (1 2)) ((4 1) (3 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 1 resp-reauth 2) (enc rb-0 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 75)
-  (parent 47)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 rb-prime-1
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (3 2))
-    ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 76)
-  (parent 47)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (3 2))
-    ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))) ((recv k) (send k)))
-  (label 77)
-  (parent 47)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 1))
-    ((3 1) (1 2)) ((4 0) (0 0)) ((4 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (4 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 78)
-  (parent 48)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (4 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-0 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 1) (1 2)) ((4 3) (0 2)) ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-0 k)
-    (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-0 k)))))
-  (label 79)
-  (parent 49)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (1 2)) ((4 3) (0 2)) ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-0 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 80)
-  (parent 49)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((1 1) (4 2)) ((2 1) (4 0))
-    ((3 1) (1 2)) ((4 1) (1 0)) ((4 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 1 resp-reauth 2)
-    (enc ra-prime-0 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb (enc ra-prime k))) (send (enc rb k))))
-  (label 81)
-  (parent 49)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (4 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 rb-prime-1
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (1 2)) ((4 3) (0 2)) ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-0 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat rb-prime-1 (enc ra-prime-0 k)))))
-  (label 82)
-  (parent 49)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (1 2)) ((4 3) (0 2)) ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-0 k)
-    (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 83)
-  (parent 49)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-1 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (5 1)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 1))
-    ((3 1) (2 0)) ((4 2) (1 2)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 84)
-  (parent 51)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 2) (1 2)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 85)
-  (parent 51)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra ra-prime rb-prime tb ra-0 rb rb-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((1 1) (4 1)) ((2 1) (1 0))
-    ((3 1) (2 0)) ((4 2) (1 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 1 resp-reauth 2) (enc rb-1 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (cat a ra-0)) (send (cat b rb-0 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k)))))
-  (label 86)
-  (parent 51)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 0)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 2) (1 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 87)
-  (parent 51)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (deflistener k)
-  (precedes ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0)) ((3 1) (2 0))
-    ((4 2) (1 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv k) (send k)))
-  (label 88)
-  (parent 51)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc b ra-1 k tb-0 (ltk a ks)) (5 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb-0 (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 89)
-  (parent 52)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 ra-1 tb-1 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-1) (tb tb-1) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-1 (ltk a-0 ks-0))
-          (enc a-0 k tb-1 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 90)
-  (parent 53)
-  (unrealized (0 2) (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 ra-prime-2 tb-1 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-1) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a-0 k tb-1 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 91)
-  (parent 53)
-  (unrealized (0 2) (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (5 2)) ((2 1) (0 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (1 0)) ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k))))
-  (label 92)
-  (parent 53)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 rb-prime-0 tb-1 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb-1) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 93)
-  (parent 53)
-  (unrealized (0 2) (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))) ((recv k) (send k)))
-  (label 94)
-  (parent 53)
-  (unrealized (0 2) (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-1 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (5 1)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 1))
-    ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 95)
-  (parent 54)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 96)
-  (parent 54)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 0)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 97)
-  (parent 54)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0)) ((3 1) (2 0))
-    ((4 1) (1 0)) ((4 3) (1 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv k) (send k)))
-  (label 98)
-  (parent 54)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc a k tb-0 (ltk b ks)) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 99)
-  (parent 55)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 1)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 1))
-    ((3 1) (2 0)) ((4 1) (1 2)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 1) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 100)
-  (parent 56)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 1) (1 2)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 101)
-  (parent 57)
-  (unrealized (5 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 rb-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 0)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 1) (1 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 102)
-  (parent 59)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 0) (0 0)) ((3 2) (1 2)) ((4 3) (0 2))
-    ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-0 k)
-    (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-0 k)))))
-  (label 103)
-  (parent 62)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 0) (0 0)) ((3 2) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-0 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 104)
-  (parent 62)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((1 1) (4 2)) ((2 1) (4 0))
-    ((3 0) (0 0)) ((3 2) (1 2)) ((4 1) (1 0)) ((4 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 1 resp-reauth 2)
-    (enc ra-prime-0 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb (enc ra-prime k))) (send (enc rb k))))
-  (label 105)
-  (parent 62)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (3 0)) (rb (0 1)) (ra-prime (4 1))
-    (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 0) (0 0)) ((3 2) (1 2)) ((4 3) (0 2))
-    ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-0 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 106)
-  (parent 62)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 0) (0 0)) ((3 2) (1 2)) ((4 3) (0 2))
-    ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-0 k)
-    (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 107)
-  (parent 62)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 1)) ((3 3) (1 2)) ((4 0) (0 0))
-    ((4 2) (3 2)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 108)
-  (parent 64)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 0) (0 0))
-    ((4 2) (3 2)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 109)
-  (parent 64)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb ra-prime rb-prime rb ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((1 1) (3 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 1)) ((3 3) (1 2)) ((4 0) (0 0))
-    ((4 2) (3 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 1 resp-reauth 2) (enc rb-0 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 110)
-  (parent 64)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (4 0)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 0) (0 0))
-    ((4 2) (3 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 111)
-  (parent 64)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 0) (0 0))
-    ((4 2) (3 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv k) (send k)))
-  (label 112)
-  (parent 64)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 1)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 113)
-  (parent 65)
-  (unrealized (0 2) (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 114)
-  (parent 66)
-  (unrealized (0 2) (5 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 3) (1 2)) ((4 1) (1 0)) ((4 3) (3 2))
-    ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 115)
-  (parent 67)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (1 0)) ((4 3) (3 2))
-    ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 116)
-  (parent 67)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (1 0)) ((4 3) (3 2))
-    ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 117)
-  (parent 67)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (1 0)) ((4 3) (3 2))
-    ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k))) ((recv k) (send k)))
-  (label 118)
-  (parent 67)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 119)
-  (parent 68)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 1))
-    ((3 1) (1 0)) ((3 3) (1 2)) ((4 0) (0 0)) ((4 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 5 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (4 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 120)
-  (parent 70)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (4 0)) (rb (0 1)) (ra-prime (3 1))
-    (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 1) (1 0)) ((3 3) (1 2)) ((4 3) (0 2))
-    ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-0 k)
-    (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-0 k)))))
-  (label 121)
-  (parent 71)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (1 0)) ((3 3) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-0 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 122)
-  (parent 71)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (1 0)) ((3 3) (1 2)) ((4 3) (0 2))
-    ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-0 k) (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 123)
-  (parent 71)
-  (unrealized (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (1 0)) ((3 3) (1 2)) ((4 3) (0 2))
-    ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-0 k)
-    (4 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 124)
-  (parent 71)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((3 3) (1 2)) ((4 1) (3 2))
-    ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 125)
-  (parent 73)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (3 2))
-    ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 126)
-  (parent 74)
-  (unrealized (5 2))
-  (comment "6 in cohort - 6 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 rb-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (3 2))
-    ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 127)
-  (parent 76)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 1) (1 2)) ((4 3) (0 2)) ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 128)
-  (parent 79)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (1 2)) ((4 3) (0 2)) ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 129)
-  (parent 80)
-  (unrealized (5 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 rb-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (1 2)) ((4 3) (0 2)) ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-1 (enc ra-prime-0 k)))))
-  (label 130)
-  (parent 82)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 1)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 1))
-    ((3 1) (2 0)) ((4 2) (1 2)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 1) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 131)
-  (parent 84)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 2) (1 2)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 132)
-  (parent 85)
-  (unrealized (5 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 0)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 2) (1 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 133)
-  (parent 87)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc a k tb-0 (ltk b ks)) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 134)
-  (parent 89)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 ra-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-1) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test
-    (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-1 tb-0)) k (6 1)
-    (enc a k tb-0 (ltk b ks)) (enc b ra-0 k tb-0 (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb-0 (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 135)
-  (parent 90)
-  (unrealized (0 2) (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 ra-prime-2 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test
-    (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-1 tb-0)) k (6 0)
-    (enc a k tb-0 (ltk b ks)) (enc b ra-0 k tb-0 (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 136)
-  (parent 91)
-  (unrealized (0 2) (6 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (5 2)) ((2 1) (0 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (1 0)) ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc a k tb-0 (ltk b ks)) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k))))
-  (label 137)
-  (parent 92)
-  (unrealized (0 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 rb-prime-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test
-    (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-1 tb-0)) k (6 0)
-    (enc a k tb-0 (ltk b ks)) (enc b ra-0 k tb-0 (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 138)
-  (parent 93)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 1)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 1))
-    ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 1) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 139)
-  (parent 95)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 140)
-  (parent 96)
-  (unrealized (5 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 0)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 141)
-  (parent 97)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (4 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      ra-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (6 1)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 142)
-  (parent 99)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      ra-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 143)
-  (parent 99)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra ra-prime rb-prime tb ra-0 rb rb-0 ra-prime-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((1 1) (4 2)) ((2 1) (1 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2) (enc rb-1 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (cat a ra-0)) (send (cat b rb-0 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 144)
-  (parent 99)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 0)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 145)
-  (parent 99)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (4 2))
-    ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))) ((recv k) (send k)))
-  (label 146)
-  (parent 99)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 1)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 1))
-    ((3 1) (2 0)) ((4 1) (1 2)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc b ra-1 k tb (ltk a ks)) (5 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 147)
-  (parent 100)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      ra-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-0) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 1) (1 2)) ((5 3) (0 2))
-    ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-0 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-0 k)))))
-  (label 148)
-  (parent 101)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      ra-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 1) (1 2)) ((5 3) (0 2))
-    ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-0 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 149)
-  (parent 101)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((1 1) (5 2)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 1) (1 2)) ((5 1) (1 0)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2)
-    (enc ra-prime-0 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb (enc ra-prime k))) (send (enc rb k))))
-  (label 150)
-  (parent 101)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (5 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 1) (1 2)) ((5 3) (0 2))
-    ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-0 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat rb-prime-1 (enc ra-prime-0 k)))))
-  (label 151)
-  (parent 101)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 1) (1 2)) ((5 3) (0 2))
-    ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-0 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 152)
-  (parent 101)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 0) (0 0)) ((3 2) (1 2)) ((4 3) (0 2))
-    ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 153)
-  (parent 103)
-  (unrealized (5 1))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 0) (0 0)) ((3 2) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 154)
-  (parent 104)
-  (unrealized (5 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 0) (0 0)) ((3 2) (1 2)) ((4 3) (0 2))
-    ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 155)
-  (parent 106)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (3 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 1)) ((3 3) (1 2)) ((4 0) (0 0))
-    ((4 2) (3 2)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 156)
-  (parent 108)
-  (unrealized (5 1))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 0) (0 0))
-    ((4 2) (3 2)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 157)
-  (parent 109)
-  (unrealized (5 2))
-  (comment "6 in cohort - 6 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 0) (0 0))
-    ((4 2) (3 2)) ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 158)
-  (parent 111)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (4 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 1)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (5 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 159)
-  (parent 113)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-2) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-2 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-2 k)))))
-  (label 160)
-  (parent 114)
-  (unrealized (0 2) (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-2 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 161)
-  (parent 114)
-  (unrealized (0 2) (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (0 2)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 3) (3 2))
-    ((5 1) (1 0)) ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2)
-    (enc ra-prime-2 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k))))
-  (label 162)
-  (parent 114)
-  (unrealized (0 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-2 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k)))))
-  (label 163)
-  (parent 114)
-  (unrealized (0 2) (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-2 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))) ((recv k) (send k)))
-  (label 164)
-  (parent 114)
-  (unrealized (0 2) (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 3) (1 2)) ((4 1) (1 0)) ((4 3) (3 2))
-    ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 165)
-  (parent 115)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (1 0)) ((4 3) (3 2))
-    ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 166)
-  (parent 116)
-  (unrealized (5 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (1 0)) ((4 3) (3 2))
-    ((5 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 167)
-  (parent 117)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (4 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 168)
-  (parent 119)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k))))
-  (label 169)
-  (parent 119)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb ra-prime rb-prime rb ra-prime-0 ra-prime-1 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((1 1) (3 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2) (enc rb-0 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 170)
-  (parent 119)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 171)
-  (parent 119)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))) ((recv k) (send k)))
-  (label 172)
-  (parent 119)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 1) (1 0)) ((3 3) (1 2)) ((4 3) (0 2))
-    ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 173)
-  (parent 121)
-  (unrealized (5 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (1 0)) ((3 3) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 174)
-  (parent 122)
-  (unrealized (5 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (1 0)) ((3 3) (1 2)) ((4 3) (0 2))
-    ((5 1) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (5 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 175)
-  (parent 123)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (3 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((3 3) (1 2)) ((4 1) (3 2))
-    ((5 0) (0 0)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (5 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 176)
-  (parent 125)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (5 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2))
-    ((4 1) (3 2)) ((5 3) (0 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 177)
-  (parent 126)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 1) (3 2)) ((5 3) (0 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 178)
-  (parent 126)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((1 1) (5 2)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (3 2))
-    ((5 1) (1 0)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb (enc ra-prime k))) (send (enc rb k))))
-  (label 179)
-  (parent 126)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (5 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (3 2))
-    ((4 1) (5 2)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 4 resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 180)
-  (parent 126)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 1) (3 2)) ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-1 (enc ra-prime-1 k)))))
-  (label 181)
-  (parent 126)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 1) (3 2)) ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 182)
-  (parent 126)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 1) (1 2)) ((4 3) (0 2)) ((5 0) (0 0))
-    ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (5 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 183)
-  (parent 128)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (5 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 184)
-  (parent 129)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 185)
-  (parent 129)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((1 1) (5 2)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 1) (1 2)) ((4 3) (0 2)) ((5 1) (1 0))
-    ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k))))
-  (label 186)
-  (parent 129)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (5 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-1 (enc ra-prime-1 k)))))
-  (label 187)
-  (parent 129)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))) ((recv k) (send k)))
-  (label 188)
-  (parent 129)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 1)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 1))
-    ((3 1) (2 0)) ((4 2) (1 2)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc b ra-1 k tb (ltk a ks)) (5 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 189)
-  (parent 131)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-1 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-0) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 2) (1 2)) ((5 3) (0 2))
-    ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-0 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-0 k)))))
-  (label 190)
-  (parent 132)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 2) (1 2)) ((5 3) (0 2))
-    ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-0 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 191)
-  (parent 132)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((1 1) (5 2)) ((2 1) (5 0))
-    ((3 1) (2 0)) ((4 2) (1 2)) ((5 1) (1 0)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2)
-    (enc ra-prime-0 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb (enc ra-prime k))) (send (enc rb k))))
-  (label 192)
-  (parent 132)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (5 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 2) (1 2)) ((5 3) (0 2))
-    ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-0 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 193)
-  (parent 132)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 2) (1 2)) ((5 3) (0 2))
-    ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-0 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 194)
-  (parent 132)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-1 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (6 1)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 2) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 195)
-  (parent 134)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 2) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 196)
-  (parent 134)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra ra-prime rb-prime tb ra-0 rb rb-0 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((1 1) (4 2)) ((2 1) (1 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2) (enc rb-1 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (cat a ra-0)) (send (cat b rb-0 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 197)
-  (parent 134)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 0)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 2) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 198)
-  (parent 134)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0)) ((2 1) (5 1))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 2) (4 2))
-    ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv k) (send k)))
-  (label 199)
-  (parent 134)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-1 k tb-0 (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb-0 (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 200)
-  (parent 135)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (6 2)) ((2 1) (0 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 3) (4 2))
-    ((6 1) (1 0)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k))))
-  (label 203)
-  (parent 136)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-1 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (6 1)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (1 0))
-    ((5 3) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 206)
-  (parent 137)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (1 0))
-    ((5 3) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 207)
-  (parent 137)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 0)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (1 0))
-    ((5 3) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 208)
-  (parent 137)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (1 0)) ((5 3) (4 2))
-    ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k))) ((recv k) (send k)))
-  (label 209)
-  (parent 137)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      rb-prime-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc a k tb-0 (ltk b ks)) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 210)
-  (parent 138)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 1)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 1))
-    ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc b ra-1 k tb (ltk a ks)) (5 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 211)
-  (parent 139)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (4 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-1 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-0) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2))
-    ((5 3) (0 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-0 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-0 k)))))
-  (label 212)
-  (parent 140)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2))
-    ((5 3) (0 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-0 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 213)
-  (parent 140)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2))
-    ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-0 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 214)
-  (parent 140)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2))
-    ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-0 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 215)
-  (parent 140)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      ra-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 1)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 216)
-  (parent 142)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      ra-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 217)
-  (parent 143)
-  (unrealized (6 2))
-  (comment "6 in cohort - 6 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      rb-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 0)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 218)
-  (parent 145)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      ra-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 1) (1 2)) ((5 3) (0 2))
-    ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 219)
-  (parent 148)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      ra-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 1) (1 2)) ((5 3) (0 2))
-    ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 220)
-  (parent 149)
-  (unrealized (6 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      rb-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 1) (1 2)) ((5 3) (0 2))
-    ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-1 (enc ra-prime-0 k)))))
-  (label 221)
-  (parent 151)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 0) (0 0)) ((3 2) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 222)
-  (parent 154)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 0) (0 0)) ((3 2) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 223)
-  (parent 154)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((1 1) (5 2)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 0) (0 0)) ((3 2) (1 2)) ((4 3) (0 2))
-    ((5 1) (1 0)) ((5 3) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k))))
-  (label 224)
-  (parent 154)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (3 0)) (rb (0 1)) (ra-prime (5 1))
-    (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 0) (0 0)) ((3 2) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 225)
-  (parent 154)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 0) (0 0)) ((3 2) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))) ((recv k) (send k)))
-  (label 226)
-  (parent 154)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 0) (0 0))
-    ((4 2) (3 2)) ((4 2) (5 2)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 4 init 3) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 227)
-  (parent 157)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (4 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2))
-    ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 228)
-  (parent 157)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 229)
-  (parent 157)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((1 1) (5 2)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((3 3) (1 2)) ((4 0) (0 0))
-    ((4 2) (3 2)) ((5 1) (1 0)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb (enc ra-prime k))) (send (enc rb k))))
-  (label 230)
-  (parent 157)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (4 0)) (rb (0 1)) (ra-prime (5 1))
-    (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 231)
-  (parent 157)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 232)
-  (parent 157)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 1)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 233)
-  (parent 159)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k))))
-  (label 234)
-  (parent 159)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb ra-prime rb-prime rb ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((1 1) (3 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 1)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 1 resp-reauth 2) (enc rb-0 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 235)
-  (parent 159)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (5 0)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 236)
-  (parent 159)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv k) (send k)))
-  (label 237)
-  (parent 159)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-2) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-2))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-2 k)))))
-  (label 238)
-  (parent 160)
-  (unrealized (0 2) (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 239)
-  (parent 161)
-  (unrealized (0 2) (6 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2)) ((4 3) (3 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 240)
-  (parent 162)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 3) (3 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k))))
-  (label 241)
-  (parent 162)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 3) (3 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 242)
-  (parent 162)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 3) (3 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k))) ((recv k) (send k)))
-  (label 243)
-  (parent 162)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k)))))
-  (label 244)
-  (parent 163)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 3) (1 2)) ((4 1) (1 0)) ((4 3) (3 2))
-    ((5 0) (0 0)) ((5 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (5 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 245)
-  (parent 165)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (5 0)) (rb (0 1)) (ra-prime (4 1))
-    (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2)) ((4 1) (1 0))
-    ((4 3) (3 2)) ((5 3) (0 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 246)
-  (parent 166)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((3 3) (1 2)) ((4 1) (1 0)) ((4 3) (3 2))
-    ((4 3) (5 2)) ((5 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 4 init-reauth 4)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 247)
-  (parent 166)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (4 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 1) (1 0))
-    ((4 3) (3 2)) ((5 3) (0 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 248)
-  (parent 166)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 1) (1 0))
-    ((4 3) (3 2)) ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 249)
-  (parent 166)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 1) (1 0))
-    ((4 3) (3 2)) ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 250)
-  (parent 166)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      ra-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 251)
-  (parent 168)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      ra-prime-2 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k))))
-  (label 252)
-  (parent 169)
-  (unrealized (6 2))
-  (comment "7 in cohort - 7 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      rb-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 253)
-  (parent 171)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 text) (a b ks name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((3 1) (1 0)) ((3 3) (1 2)) ((4 3) (0 2))
-    ((5 0) (0 0)) ((5 2) (4 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 6 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (5 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 254)
-  (parent 173)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (5 0)) (rb (0 1)) (ra-prime (3 1))
-    (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 tb-0
-      text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (1 0)) ((3 3) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 255)
-  (parent 174)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (1 0)) ((3 3) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 256)
-  (parent 174)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (1 0)) ((3 3) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 257)
-  (parent 174)
-  (unrealized (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (1 0)) ((3 3) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (5 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))) ((recv k) (send k)))
-  (label 258)
-  (parent 174)
-  (unrealized (6 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      ra-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2))
-    ((4 1) (3 2)) ((5 3) (0 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 259)
-  (parent 177)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      ra-prime-2 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 1) (3 2)) ((5 3) (0 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 260)
-  (parent 178)
-  (unrealized (6 2))
-  (comment "6 in cohort - 6 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      rb-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 1) (3 2)) ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-1 (enc ra-prime-1 k)))))
-  (label 261)
-  (parent 181)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      ra-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 262)
-  (parent 184)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      ra-prime-2 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 263)
-  (parent 185)
-  (unrealized (6 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      rb-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-1 (enc ra-prime-1 k)))))
-  (label 264)
-  (parent 187)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 2) (1 2)) ((5 3) (0 2))
-    ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 265)
-  (parent 190)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 2) (1 2)) ((5 3) (0 2))
-    ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 266)
-  (parent 191)
-  (unrealized (6 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 2) (1 2)) ((5 3) (0 2))
-    ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 267)
-  (parent 193)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 1)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 2) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 268)
-  (parent 195)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 2) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 269)
-  (parent 196)
-  (unrealized (6 2))
-  (comment "6 in cohort - 6 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 0)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 2) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 270)
-  (parent 198)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc a k tb-0 (ltk b ks)) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 271)
-  (parent 200)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((1 1) (6 2)) ((2 1) (0 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 3) (4 2))
-    ((6 1) (1 0)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc a k tb-0 (ltk b ks)) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k))))
-  (label 272)
-  (parent 203)
-  (unrealized (0 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 1)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (1 0))
-    ((5 3) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 273)
-  (parent 206)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (1 0))
-    ((5 3) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 274)
-  (parent 207)
-  (unrealized (6 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 0)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (1 0))
-    ((5 3) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 275)
-  (parent 208)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (5 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra ra-prime rb-prime tb ra-0 rb rb-0 ra-prime-0 ra-prime-1
-      rb-prime-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((1 1) (4 2)) ((2 1) (1 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2) (enc rb-1 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (cat a ra-0)) (send (cat b rb-0 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 278)
-  (parent 210)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2))
-    ((5 3) (0 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 281)
-  (parent 212)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2))
-    ((5 3) (0 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))))
-  (label 282)
-  (parent 213)
-  (unrealized (6 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2))
-    ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k)))))
-  (label 283)
-  (parent 214)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (4 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 1)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-1 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 284)
-  (parent 216)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((1 1) (6 2)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (4 2)) ((6 1) (1 0)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb (enc ra-prime k))) (send (enc rb k))))
-  (label 287)
-  (parent 217)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (6 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (4 2)) ((5 1) (6 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 5 resp-reauth 2)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 288)
-  (parent 217)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 1) (1 2)) ((5 3) (0 2))
-    ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-1 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 291)
-  (parent 219)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((1 1) (6 2)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 1) (1 2)) ((5 3) (0 2))
-    ((6 1) (1 0)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k))))
-  (label 294)
-  (parent 220)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (6 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 0) (0 0)) ((3 2) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 297)
-  (parent 222)
-  (unrealized (6 1))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 0) (0 0)) ((3 2) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 298)
-  (parent 223)
-  (unrealized (6 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 0) (0 0)) ((3 2) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 299)
-  (parent 225)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (3 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2))
-    ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 300)
-  (parent 228)
-  (unrealized (6 1))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 301)
-  (parent 229)
-  (unrealized (6 2))
-  (comment "6 in cohort - 6 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 302)
-  (parent 231)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (4 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 1)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 303)
-  (parent 233)
-  (unrealized (6 1))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k))))
-  (label 304)
-  (parent 234)
-  (unrealized (6 2))
-  (comment "7 in cohort - 7 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 305)
-  (parent 236)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (5 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-2) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 0) (0 0))
-    ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-2))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-2 k)))))
-  (label 306)
-  (parent 238)
-  (unrealized (0 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-2)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (6 2)) ((2 1) (0 2)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (1 0)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-3 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-2 (enc ra-prime k)))
-      (send (enc ra-prime-2 k))))
-  (label 309)
-  (parent 239)
-  (unrealized (0 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2)) ((4 3) (3 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 312)
-  (parent 240)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 3) (3 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k))))
-  (label 313)
-  (parent 241)
-  (unrealized (6 2))
-  (comment "6 in cohort - 6 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 3) (3 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 314)
-  (parent 242)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (5 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb ra-prime rb-prime rb ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((1 1) (3 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2) (enc rb-0 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k)))))
-  (label 317)
-  (parent 244)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2)) ((4 1) (1 0))
-    ((4 3) (3 2)) ((5 3) (0 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 320)
-  (parent 246)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 1) (1 0))
-    ((4 3) (3 2)) ((5 3) (0 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 321)
-  (parent 248)
-  (unrealized (6 2))
-  (comment "5 in cohort - 5 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 1) (1 0))
-    ((4 3) (3 2)) ((5 3) (0 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 322)
-  (parent 249)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (4 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)) ((6 0) (0 0)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 323)
-  (parent 251)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (6 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((4 3) (6 2)) ((5 1) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 4 init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 325)
-  (parent 252)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((1 1) (6 2)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)) ((6 1) (1 0)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb (enc ra-prime k))) (send (enc rb k))))
-  (label 327)
-  (parent 252)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (6 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (4 2)) ((5 1) (6 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 5 resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 328)
-  (parent 252)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (1 0)) ((3 3) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 331)
-  (parent 255)
-  (unrealized (6 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (1 0)) ((3 3) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 332)
-  (parent 256)
-  (unrealized (6 2))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (1 0)) ((3 3) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 1) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (6 0) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 333)
-  (parent 257)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (3 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2))
-    ((4 1) (3 2)) ((5 3) (0 2)) ((6 0) (0 0)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 334)
-  (parent 259)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (6 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((1 1) (6 2)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 1) (3 2)) ((5 3) (0 2)) ((6 1) (1 0)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k))))
-  (label 337)
-  (parent 260)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (6 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 1) (3 2)) ((4 1) (6 2)) ((5 3) (0 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 4 resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat ra-prime-1 (enc ra-prime-0 k)))
-      (send (enc ra-prime-1 k))))
-  (label 338)
-  (parent 260)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)) ((6 0) (0 0)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 341)
-  (parent 262)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (6 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((1 1) (6 2)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 1) (1 2)) ((4 3) (0 2))
-    ((5 3) (4 2)) ((6 1) (1 0)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k))))
-  (label 344)
-  (parent 263)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (6 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 2) (1 2)) ((5 3) (0 2))
-    ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-1 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 347)
-  (parent 265)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((1 1) (6 2)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 2) (1 2)) ((5 3) (0 2))
-    ((6 1) (1 0)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k))))
-  (label 350)
-  (parent 266)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (6 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 1)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 2) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-1 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 353)
-  (parent 268)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 2) (4 2)) ((5 2) (6 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 5 init 3) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 354)
-  (parent 269)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((1 1) (6 2)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 2) (4 2)) ((6 1) (1 0)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb (enc ra-prime k))) (send (enc rb k))))
-  (label 357)
-  (parent 269)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (6 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra ra-prime rb-prime tb ra-0 rb rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)) ((1 1) (4 2)) ((2 1) (1 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2) (enc rb-1 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (cat a ra-0)) (send (cat b rb-0 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 362)
-  (parent 271)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 1)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (1 0))
-    ((5 3) (4 2)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-1 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 369)
-  (parent 273)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (5 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 1) (1 0))
-    ((5 3) (4 2)) ((5 3) (6 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 5 init-reauth 4)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 371)
-  (parent 274)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (5 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((3 1) (2 0)) ((4 1) (1 0)) ((4 3) (1 2))
-    ((5 3) (0 2)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-1 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k)))))
-  (label 375)
-  (parent 281)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (4 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((1 1) (6 2)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 0) (0 0)) ((3 2) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 1) (1 0)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k))))
-  (label 382)
-  (parent 298)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (3 0)) (rb (0 1)) (ra-prime (6 1))
-    (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 0) (0 0)) ((4 2) (3 2)) ((4 2) (6 2)) ((5 3) (0 2))
-    ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 4 init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat ra-prime-1 (enc ra-prime-0 k)))
-      (send (enc ra-prime-1 k))))
-  (label 385)
-  (parent 301)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (4 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((1 1) (6 2)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2)) ((6 1) (1 0))
-    ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k))))
-  (label 388)
-  (parent 301)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (4 0)) (rb (0 1)) (ra-prime (6 1))
-    (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2)) ((5 2) (6 2))
-    ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 5 init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 391)
-  (parent 304)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (5 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((4 3) (6 2)) ((5 0) (0 0)) ((5 2) (4 2))
-    ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 4 init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 393)
-  (parent 304)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (5 0)) (rb (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((1 1) (6 2)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2)) ((6 1) (1 0))
-    ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb (enc ra-prime k))) (send (enc rb k))))
-  (label 395)
-  (parent 304)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (5 0)) (rb (0 1)) (ra-prime (6 1))
-    (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb ra-prime rb-prime rb ra-prime-0 ra-prime-1 ra-prime-2 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb ra-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-2) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((1 1) (3 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 0) (0 0))
-    ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 1 resp-reauth 2) (enc rb-0 k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b ra-prime (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc ra-prime k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-2))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-2 k)))))
-  (label 400)
-  (parent 306)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb ra-prime) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (6 0)) (ra-prime (0 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2)) ((4 3) (3 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 0) (0 0)) ((6 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 407)
-  (parent 312)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (6 0)) (rb (0 1)) (ra-prime (5 1))
-    (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 3) (3 2))
-    ((4 3) (6 2)) ((5 1) (1 0)) ((5 3) (4 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 4 init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k))))
-  (label 409)
-  (parent 313)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (5 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 3) (3 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((5 3) (6 2)) ((6 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 5 init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k))))
-  (label 410)
-  (parent 313)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (5 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 3) (1 2)) ((4 1) (1 0))
-    ((4 3) (3 2)) ((5 3) (0 2)) ((6 0) (0 0)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 414)
-  (parent 320)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (6 0)) (rb (0 1)) (ra-prime (4 1))
-    (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((3 3) (1 2)) ((4 1) (1 0))
-    ((4 3) (3 2)) ((4 3) (6 2)) ((5 3) (0 2)) ((6 3) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 4 init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat ra-prime-1 (enc ra-prime-0 k)))
-      (send (enc ra-prime-1 k))))
-  (label 416)
-  (parent 321)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (rb (0 1)) (ra-prime (4 1)) (rb-prime (1 1))))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 text)
-    (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((3 1) (1 0)) ((3 3) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 0) (0 0)) ((6 2) (5 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (displaced 7 2 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (6 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k)))))
-  (label 420)
-  (parent 331)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1)
-      ((ra ra) (tb tb) (rb rb) (a a) (b b) (ks ks) (k k)
-        (ra-prime ra-prime) (rb-prime rb-prime) (tb-0 tb))))
-  (origs (k (2 1)) (ra (6 0)) (rb (0 1)) (ra-prime (3 1))
-    (rb-prime (1 1))))
-
-(comment "Strand bound exceeded--aborting run")
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 ra-prime-2 ra-1 tb-1 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-2) (tb tb-1) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 3) (5 2)) ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-1 (ltk a-0 ks-0))
-          (enc a-0 k tb-1 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) (enc ra-prime-2 k)))))
-  (label 201)
-  (parent 136)
-  (unrealized (0 2) (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 ra-prime-2 ra-prime-3 tb-1 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb-1) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 3) (5 2)) ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a-0 k tb-1 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 202)
-  (parent 136)
-  (unrealized (0 2) (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 ra-prime-2 rb-prime-0 tb-1 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb-1) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a-0 k tb-1 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k)))))
-  (label 204)
-  (parent 136)
-  (unrealized (0 2) (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime tb-0 ra-0 rb-0 rb-1 ra-prime-0
-      ra-prime-1 ra-prime-2 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb-0) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb-0) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (4 2)) ((2 1) (0 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb-0 (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb-0 (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb-0 (ltk a ks)) (enc a k tb-0 (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb-0 (ltk b ks)))))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb-0 (ltk b ks)))
-      (send (cat (enc a k tb-0 (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))) ((recv k) (send k)))
-  (label 205)
-  (parent 136)
-  (unrealized (0 2) (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      rb-prime-0 ra-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (7 1)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 1) (5 2)) ((7 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 276)
-  (parent 210)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      rb-prime-0 ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (7 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 1) (5 2)) ((7 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k))))
-  (label 277)
-  (parent 210)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      rb-prime-0 rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (7 0)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 1) (5 2)) ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 279)
-  (parent 210)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      rb-prime-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 1) (5 2)) ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))) ((recv k) (send k)))
-  (label 280)
-  (parent 210)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      ra-prime-1 ra-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 1) (4 2)) ((6 3) (0 2)) ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 285)
-  (parent 217)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      ra-prime-1 ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 1) (4 2)) ((6 3) (0 2)) ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 286)
-  (parent 217)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      ra-prime-1 rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 1) (4 2)) ((6 3) (0 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-1 (enc ra-prime-1 k)))))
-  (label 289)
-  (parent 217)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 rb-prime-0
-      ra-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 1) (4 2)) ((6 3) (0 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 290)
-  (parent 217)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      ra-prime-1 ra-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 1)) ((3 1) (2 0)) ((4 1) (1 2))
-    ((5 3) (0 2)) ((6 3) (5 2)) ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 292)
-  (parent 220)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      ra-prime-1 ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 1) (1 2))
-    ((5 3) (0 2)) ((6 3) (5 2)) ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 293)
-  (parent 220)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      ra-prime-1 rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 1) (1 2))
-    ((5 3) (0 2)) ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-1 (enc ra-prime-1 k)))))
-  (label 295)
-  (parent 220)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 rb-prime-0 ra-prime-0
-      ra-prime-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (5 2)) ((1 1) (4 0)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 1) (1 2))
-    ((5 3) (0 2)) ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))) ((recv k) (send k)))
-  (label 296)
-  (parent 220)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-3) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((2 1) (7 1)) ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2))
-    ((6 3) (5 2)) ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-3 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-3 k)))))
-  (label 307)
-  (parent 239)
-  (unrealized (0 2) (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 ra-prime-4 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-4) (rb-prime ra-prime-3)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((2 1) (7 0)) ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2))
-    ((6 3) (5 2)) ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-3 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-4))
-      (recv (cat ra-prime-3 (enc ra-prime-4 k)))
-      (send (enc ra-prime-3 k))))
-  (label 308)
-  (parent 239)
-  (unrealized (0 2) (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-3) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((2 1) (7 0)) ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2))
-    ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-3 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (send (cat rb-prime-0 (enc ra-prime-3 k)))))
-  (label 310)
-  (parent 239)
-  (unrealized (0 2) (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (0 2)) ((2 1) (1 0))
-    ((2 1) (3 0)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((2 1) (7 0)) ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2))
-    ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-3 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))) ((recv k) (send k)))
-  (label 311)
-  (parent 239)
-  (unrealized (0 2) (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (5 2))
-    ((7 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k))))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 315)
-  (parent 244)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (5 2))
-    ((7 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat rb (enc ra-prime-3 k))) (send (enc rb k))))
-  (label 316)
-  (parent 244)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-1) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (5 2))
-    ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-1 (enc rb k)))))
-  (label 318)
-  (parent 244)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (5 2))
-    ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k)))) ((recv k) (send k)))
-  (label 319)
-  (parent 244)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      ra-prime-2 ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-2) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 1) (4 2)) ((6 3) (0 2))
-    ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-2 k)))))
-  (label 324)
-  (parent 252)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      ra-prime-2 ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 1) (4 2)) ((6 3) (0 2))
-    ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 326)
-  (parent 252)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      ra-prime-2 rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 1) (4 2)) ((6 3) (0 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat rb-prime-1 (enc ra-prime-2 k)))))
-  (label 329)
-  (parent 252)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 rb-prime-0
-      ra-prime-2 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 1) (4 2)) ((6 3) (0 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 330)
-  (parent 252)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      ra-prime-2 ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-2) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1))
-    ((3 3) (1 2)) ((4 1) (3 2)) ((5 3) (0 2)) ((6 3) (5 2))
-    ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-2 k)))))
-  (label 335)
-  (parent 260)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      ra-prime-2 ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 1) (3 2)) ((5 3) (0 2)) ((6 3) (5 2))
-    ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 336)
-  (parent 260)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      ra-prime-2 rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 1) (3 2)) ((5 3) (0 2)) ((6 3) (5 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat rb-prime-1 (enc ra-prime-2 k)))))
-  (label 339)
-  (parent 260)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 rb-prime-0 ra-prime-1
-      ra-prime-2 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-0) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 1) (3 2)) ((5 3) (0 2)) ((6 3) (5 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (send (cat rb-prime-0 (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))) ((recv k) (send k)))
-  (label 340)
-  (parent 260)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      ra-prime-2 ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-2) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1)) ((3 1) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2)) ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-2 k)))))
-  (label 342)
-  (parent 263)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      ra-prime-2 ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2)) ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 343)
-  (parent 263)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      ra-prime-2 rb-prime-1 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat rb-prime-1 (enc ra-prime-2 k)))))
-  (label 345)
-  (parent 263)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 rb-prime-0 ra-prime-0 ra-prime-1
-      ra-prime-2 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb-prime) (rb-prime rb-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 0)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (1 2))
-    ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat (enc a k tb (ltk b ks)) rb-prime))
-      (send (cat rb-prime-0 (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))) ((recv k) (send k)))
-  (label 346)
-  (parent 263)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 1)) ((3 1) (2 0)) ((4 2) (1 2))
-    ((5 3) (0 2)) ((6 3) (5 2)) ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 348)
-  (parent 266)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 2) (1 2))
-    ((5 3) (0 2)) ((6 3) (5 2)) ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 349)
-  (parent 266)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 2) (1 2))
-    ((5 3) (0 2)) ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 351)
-  (parent 266)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (5 2)) ((1 1) (4 1)) ((2 1) (1 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 2) (1 2))
-    ((5 3) (0 2)) ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))) ((recv k) (send k)))
-  (label 352)
-  (parent 266)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 0)) ((2 1) (7 1)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 2) (4 2)) ((6 3) (0 2)) ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 355)
-  (parent 269)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 2) (4 2)) ((6 3) (0 2)) ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 356)
-  (parent 269)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 2) (4 2)) ((6 3) (0 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 358)
-  (parent 269)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-0) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (6 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 1)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 2) (4 2)) ((6 3) (0 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 359)
-  (parent 269)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (7 1)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((2 1) (7 1)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 2) (5 2)) ((7 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 360)
-  (parent 271)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (7 2)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 2) (5 2)) ((7 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k))))
-  (label 361)
-  (parent 271)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (7 0)) ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 1)) ((2 1) (7 0)) ((3 1) (2 0))
-    ((4 3) (1 2)) ((5 3) (4 2)) ((6 2) (5 2)) ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 363)
-  (parent 271)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-1) (tb tb) (a a) (b b)
-    (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (4 2)) ((2 1) (1 0)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 1)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 2) (5 2)) ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv k) (send k)))
-  (label 364)
-  (parent 271)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (7 1)) ((1 1) (6 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 1) (1 0)) ((6 3) (5 2)) ((7 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 365)
-  (parent 272)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (7 2)) ((1 1) (6 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 1) (1 0)) ((6 3) (5 2)) ((7 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k))))
-  (label 366)
-  (parent 272)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (7 0)) ((1 1) (6 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 3) (4 2)) ((6 1) (1 0)) ((6 3) (5 2)) ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 367)
-  (parent 272)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((1 1) (6 2)) ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 0))
-    ((2 1) (7 0)) ((3 1) (2 0)) ((4 3) (1 2)) ((5 3) (4 2))
-    ((6 1) (1 0)) ((6 3) (5 2)) ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k))) ((recv k) (send k)))
-  (label 368)
-  (parent 272)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 1)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 3) (0 2)) ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 370)
-  (parent 274)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 3) (0 2)) ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 372)
-  (parent 274)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (6 2)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 3) (0 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 373)
-  (parent 274)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (6 2)) ((1 1) (5 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 3) (1 2))
-    ((5 1) (1 0)) ((5 3) (4 2)) ((6 3) (0 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 374)
-  (parent 274)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-1 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-1) (rb ra-prime-1) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 1)) ((3 1) (2 0)) ((4 1) (1 0))
-    ((4 3) (1 2)) ((5 3) (0 2)) ((6 3) (5 2)) ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-1 k)))))
-  (label 376)
-  (parent 282)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      ra-prime-2 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 1) (1 0))
-    ((4 3) (1 2)) ((5 3) (0 2)) ((6 3) (5 2)) ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))))
-  (label 377)
-  (parent 282)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-1) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 1) (1 0))
-    ((4 3) (1 2)) ((5 3) (0 2)) ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-1 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-1))
-      (send (cat rb-prime-0 (enc ra-prime-1 k)))))
-  (label 378)
-  (parent 282)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra rb ra-prime rb-prime tb ra-0 rb-0 rb-1 ra-prime-0 ra-prime-1
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (5 2)) ((1 1) (4 2)) ((2 1) (4 0)) ((2 1) (5 0))
-    ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (2 0)) ((4 1) (1 0))
-    ((4 3) (1 2)) ((5 3) (0 2)) ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-1 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k))) ((recv k) (send k)))
-  (label 379)
-  (parent 282)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-2) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1)) ((3 0) (0 0))
-    ((3 2) (1 2)) ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2))
-    ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-2 k)))))
-  (label 380)
-  (parent 298)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 0) (0 0))
-    ((3 2) (1 2)) ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2))
-    ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 381)
-  (parent 298)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 0) (0 0))
-    ((3 2) (1 2)) ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k)))))
-  (label 383)
-  (parent 298)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb-prime) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 0) (0 0))
-    ((3 2) (1 2)) ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-prime))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb-prime k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))) ((recv k) (send k)))
-  (label 384)
-  (parent 298)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-2) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1))
-    ((3 3) (1 2)) ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2))
-    ((6 3) (5 2)) ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-2 k)))))
-  (label 386)
-  (parent 301)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2))
-    ((6 3) (5 2)) ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 387)
-  (parent 301)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2))
-    ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k)))))
-  (label 389)
-  (parent 301)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 1)) ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 0) (0 0)) ((4 2) (3 2)) ((5 3) (0 2))
-    ((6 3) (5 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-0))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-0 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))) ((recv k) (send k)))
-  (label 390)
-  (parent 301)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-2) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((2 1) (7 1))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2))
-    ((6 3) (0 2)) ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-2 k)))))
-  (label 392)
-  (parent 304)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2))
-    ((6 3) (0 2)) ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 394)
-  (parent 304)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2))
-    ((6 3) (0 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k)))))
-  (label 396)
-  (parent 304)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-1) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 1)) ((2 1) (6 0)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 0) (0 0)) ((5 2) (4 2))
-    ((6 3) (0 2)) ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-1))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-1 k))))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 397)
-  (parent 304)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-2) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1)) ((2 1) (7 1))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 0) (0 0))
-    ((6 2) (5 2)) ((7 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-2))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-2 k))))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 398)
-  (parent 306)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-2) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 0) (0 0))
-    ((6 2) (5 2)) ((7 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-2))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-2 k))))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat rb (enc ra-prime-3 k))) (send (enc rb k))))
-  (label 399)
-  (parent 306)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-2) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 0) (0 0))
-    ((6 2) (5 2)) ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-2))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-2 k))))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 401)
-  (parent 306)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra) (rb ra-prime-2) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((2 1) (4 0)) ((2 1) (5 0)) ((2 1) (6 1)) ((2 1) (7 0))
-    ((3 3) (1 2)) ((4 3) (3 2)) ((5 3) (4 2)) ((6 0) (0 0))
-    ((6 2) (5 2)) ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a ra))
-      (recv
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          ra-prime-2))
-      (send (cat (enc a k tb (ltk b ks)) (enc ra-prime-2 k))))
-    ((recv k) (send k)))
-  (label 402)
-  (parent 306)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-2)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (6 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (1 0)) ((6 3) (5 2))
-    ((7 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-2 (enc ra-prime k)))
-      (send (enc ra-prime-2 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 403)
-  (parent 309)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-2)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime rb) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (6 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (1 0)) ((6 3) (5 2))
-    ((7 3) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-2 (enc ra-prime k)))
-      (send (enc ra-prime-2 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat rb (enc ra-prime-3 k))) (send (enc rb k))))
-  (label 404)
-  (parent 309)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-2)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime rb) (rb-prime rb-prime-0) (tb tb-0)
-    (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (6 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (1 0)) ((6 3) (5 2))
-    ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2) (enc rb k)
-    (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-2 (enc ra-prime k)))
-      (send (enc ra-prime-2 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat rb-prime-0 (enc rb k)))))
-  (label 405)
-  (parent 309)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-2)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (6 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 3) (4 2)) ((6 1) (1 0)) ((6 3) (5 2))
-    ((7 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-2 (enc ra-prime k)))
-      (send (enc ra-prime-2 k))) ((recv k) (send k)))
-  (label 406)
-  (parent 309)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-2) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (1 0)) ((5 3) (4 2)) ((6 3) (0 2))
-    ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-2 k)))))
-  (label 408)
-  (parent 313)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (1 0)) ((5 3) (4 2)) ((6 3) (0 2))
-    ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 411)
-  (parent 313)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (1 0)) ((5 3) (4 2)) ((6 3) (0 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k)))))
-  (label 412)
-  (parent 313)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (5 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 3) (1 2))
-    ((4 3) (3 2)) ((5 1) (1 0)) ((5 3) (4 2)) ((6 3) (0 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-1 (enc ra-prime k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat rb (enc ra-prime-2 k))) (send (enc rb k)))
-    ((recv k) (send k)))
-  (label 413)
-  (parent 313)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-2) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1)) ((3 3) (1 2))
-    ((4 1) (1 0)) ((4 3) (3 2)) ((5 3) (0 2)) ((6 3) (5 2))
-    ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-2 k)))))
-  (label 415)
-  (parent 321)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 3) (1 2))
-    ((4 1) (1 0)) ((4 3) (3 2)) ((5 3) (0 2)) ((6 3) (5 2))
-    ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 417)
-  (parent 321)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 3) (1 2))
-    ((4 1) (1 0)) ((4 3) (3 2)) ((5 3) (0 2)) ((6 3) (5 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k)))))
-  (label 418)
-  (parent 321)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (4 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 3) (1 2))
-    ((4 1) (1 0)) ((4 3) (3 2)) ((5 3) (0 2)) ((6 3) (5 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb-prime (enc ra-prime-0 k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat ra-prime-0 (enc ra-prime k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat rb (enc ra-prime-1 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))) ((recv k) (send k)))
-  (label 419)
-  (parent 321)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init 3 (ra ra-0) (rb ra-prime-2) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 1)) ((3 1) (1 0))
-    ((3 3) (1 2)) ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2))
-    ((7 2) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init 3) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc ra-prime-2 k)))))
-  (label 421)
-  (parent 332)
-  (unrealized (7 1))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      ra-prime-3 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-3) (rb-prime ra-prime-2)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (1 0))
-    ((3 3) (1 2)) ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2))
-    ((7 3) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand init-reauth 4)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (enc a-0 k tb-0 (ltk b-0 ks-0)))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-3))
-      (recv (cat ra-prime-2 (enc ra-prime-3 k)))
-      (send (enc ra-prime-2 k))))
-  (label 422)
-  (parent 332)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      rb-prime-0 tb-0 text) (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 2 (ra-prime ra-prime-2) (rb-prime rb-prime-0)
-    (tb tb-0) (a a-0) (b b-0) (ks ks-0) (k k))
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (1 0))
-    ((3 3) (1 2)) ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-strand resp-reauth 2)
-    (enc ra-prime-2 k) (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k)))
-    ((recv (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) ra-prime-2))
-      (send (cat rb-prime-0 (enc ra-prime-2 k)))))
-  (label 423)
-  (parent 332)
-  (unrealized (7 0))
-  (comment "aborted"))
-
-(defskeleton neuman-stubblebine-reauth
-  (vars
-    (ra tb rb ra-prime rb-prime rb-0 ra-prime-0 ra-prime-1 ra-prime-2
-      text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand resp-reauth 3 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime) (rb-prime rb-prime)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-0) (rb-prime rb) (tb tb)
-    (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-1) (rb-prime ra-prime-0)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand init-reauth 4 (ra-prime ra-prime-2) (rb-prime ra-prime-1)
-    (tb tb) (a a) (b b) (ks ks) (k k))
-  (deflistener k)
-  (precedes ((0 1) (2 0)) ((1 1) (3 2)) ((2 1) (3 0)) ((2 1) (4 0))
-    ((2 1) (5 0)) ((2 1) (6 0)) ((2 1) (7 0)) ((3 1) (1 0))
-    ((3 3) (1 2)) ((4 3) (0 2)) ((5 3) (4 2)) ((6 3) (5 2))
-    ((7 1) (6 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb ra-prime rb-prime k)
-  (operation encryption-test (added-listener k) (enc ra-prime-2 k)
-    (6 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat (enc a k tb (ltk b ks)) ra-prime))
-      (send (cat rb-prime (enc ra-prime k))) (recv (enc rb-prime k)))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime))
-      (recv (cat rb-prime (enc ra-prime k))) (send (enc rb-prime k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-0))
-      (recv (cat rb (enc ra-prime-0 k))) (send (enc rb k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-1))
-      (recv (cat ra-prime-0 (enc ra-prime-1 k)))
-      (send (enc ra-prime-0 k)))
-    ((recv (enc a k tb (ltk b ks)))
-      (send (cat (enc a k tb (ltk b ks)) ra-prime-2))
-      (recv (cat ra-prime-1 (enc ra-prime-2 k)))
-      (send (enc ra-prime-1 k))) ((recv k) (send k)))
-  (label 424)
-  (parent 332)
-  (unrealized (7 0))
-  (comment "aborted"))
diff --git a/tst/neuman-stubblebine.scm b/tst/neuman-stubblebine.scm
deleted file mode 100644
--- a/tst/neuman-stubblebine.scm
+++ /dev/null
@@ -1,37 +0,0 @@
-(defprotocol neuman-stubblebine basic
-  (defrole init (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace
-     (send (cat a ra))
-     (recv (cat (enc b ra k tb (ltk a ks))
-		(enc a k tb (ltk b ks)) rb))
-     (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole resp (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace
-     (recv (cat a ra))
-     (send (cat b rb (enc a ra tb (ltk b ks))))
-     (recv (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole keyserver
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace
-     (recv (cat b rb (enc a ra tb (ltk b ks))))
-     (send (cat (enc b ra k tb (ltk a ks))
-		(enc a k tb (ltk b ks)) rb)))
-    (uniq-orig k)))
-
-(defskeleton neuman-stubblebine
-  (vars (a b ks name) (ra rb text))
-  (defstrand init 3 (a a) (b b) (ks ks) (ra ra) (rb rb))
-  (uniq-orig ra rb)
-  (non-orig (ltk a ks) (ltk b ks)))
-
-(defskeleton neuman-stubblebine
-  (vars (a b ks name) (ra rb text))
-  (defstrand resp 3 (a a) (b b) (ks ks) (ra ra) (rb rb))
-  (uniq-orig ra rb)
-  (non-orig (ltk a ks) (ltk b ks)))
-
-(defskeleton neuman-stubblebine
-  (vars (a b ks name) (ra rb text))
-  (defstrand keyserver 2 (a a) (b b) (ks ks) (ra ra) (rb rb))
-  (uniq-orig ra rb)
-  (non-orig (ltk a ks) (ltk b ks)))
diff --git a/tst/neuman-stubblebine.tst b/tst/neuman-stubblebine.tst
deleted file mode 100644
--- a/tst/neuman-stubblebine.tst
+++ /dev/null
@@ -1,458 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from neuman-stubblebine.scm")
-
-(defprotocol neuman-stubblebine basic
-  (defrole init
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole resp
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole keyserver
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    (uniq-orig k)))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb text) (a b ks name) (k skey))
-  (defstrand init 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb)
-  (traces
-    ((send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (ra (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb rb-0 text) (a b ks name) (k skey))
-  (defstrand init 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc b ra k tb (ltk a ks)) (0 1))
-  (traces
-    ((send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0))))
-  (label 1)
-  (parent 0)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb rb-0 rb-1 text) (a b ks name) (k skey))
-  (defstrand init 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (added-strand resp 2)
-    (enc a ra tb (ltk b ks)) (1 0))
-  (traces
-    ((send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv (cat a ra)) (send (cat b rb-1 (enc a ra tb (ltk b ks))))))
-  (label 2)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (ra ra) (rb rb) (k k) (tb tb))))
-  (origs (k (1 1)) (ra (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol neuman-stubblebine basic
-  (defrole init
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole resp
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole keyserver
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    (uniq-orig k)))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb)
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 3)
-  (unrealized (0 2))
-  (origs (rb (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb ra-0 rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((1 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (added-strand keyserver 2)
-    (enc a k tb (ltk b ks)) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0))))
-  (label 4)
-  (parent 3)
-  (unrealized (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (displaced 2 0 resp 2)
-    (enc a ra-0 tb (ltk b ks)) (1 0))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0))))
-  (label 5)
-  (parent 4)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb ra-0 rb-0 rb-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (precedes ((1 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (added-strand resp 2)
-    (enc a ra-0 tb (ltk b ks)) (1 0))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0))
-      (send (cat b rb-1 (enc a ra-0 tb (ltk b ks))))))
-  (label 6)
-  (parent 4)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb rb-0 ra-0 tb-0 text) (a b ks a-0 b-0 ks-0 name)
-    (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (2 1)) ((2 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a-0 ra-0))
-      (recv
-        (cat (enc b-0 ra-0 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 7)
-  (parent 5)
-  (unrealized (2 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (deflistener k)
-  (precedes ((0 1) (1 0)) ((1 1) (2 0)) ((2 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((recv k) (send k)))
-  (label 8)
-  (parent 5)
-  (unrealized (2 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb ra-0 rb-0 rb-1 ra-1 tb-0 text)
-    (a b ks a-0 b-0 ks-0 name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb-0) (a a-0) (b b-0)
-    (ks ks-0) (k k))
-  (precedes ((0 1) (3 1)) ((1 1) (3 1)) ((2 1) (1 0)) ((3 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (added-strand init 3) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a-0 ra-1))
-      (recv
-        (cat (enc b-0 ra-1 k tb-0 (ltk a-0 ks-0))
-          (enc a-0 k tb-0 (ltk b-0 ks-0)) rb))
-      (send (cat (enc a-0 k tb-0 (ltk b-0 ks-0)) (enc rb k)))))
-  (label 9)
-  (parent 6)
-  (unrealized (3 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb ra-0 rb-0 rb-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (deflistener k)
-  (precedes ((1 1) (3 0)) ((2 1) (1 0)) ((3 1) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (added-listener k) (enc rb k) (0 2))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((recv k) (send k)))
-  (label 10)
-  (parent 6)
-  (unrealized (3 0))
-  (comment "empty cohort"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb rb-0 ra-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (2 1)) ((2 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (2 1) (enc a k tb (ltk b ks)) (enc b ra k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 11)
-  (parent 7)
-  (unrealized (2 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb ra-0 rb-0 rb-1 ra-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-1) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (3 1)) ((1 1) (3 1)) ((2 1) (1 0)) ((3 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (ks-0 ks) (tb-0 tb))
-    k (3 1) (enc a k tb (ltk b ks)) (enc b ra-0 k tb (ltk a ks)))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-1))
-      (recv
-        (cat (enc b ra-1 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 12)
-  (parent 9)
-  (unrealized (3 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb rb-0 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand init 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (2 1)) ((2 0) (0 0)) ((2 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (displaced 3 1 keyserver 2)
-    (enc b ra-0 k tb (ltk a ks)) (2 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb-0)))
-    ((send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 13)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (ra ra) (rb rb) (k k) (tb tb))))
-  (origs (k (1 1)) (ra (2 0)) (rb (0 1))))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb ra-0 rb-0 rb-1 text) (a b ks name) (k skey))
-  (defstrand resp 3 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (defstrand keyserver 2 (ra ra-0) (rb rb-0) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra-0) (rb rb-1) (tb tb) (a a) (b b) (ks ks))
-  (defstrand init 3 (ra ra-0) (rb rb) (tb tb) (a a) (b b) (ks ks) (k k))
-  (precedes ((0 1) (3 1)) ((1 1) (3 1)) ((2 1) (1 0)) ((3 2) (0 2)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (displaced 4 1 keyserver 2)
-    (enc b ra-1 k tb (ltk a ks)) (3 1))
-  (traces
-    ((recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k))))
-    ((recv (cat b rb-0 (enc a ra-0 tb (ltk b ks))))
-      (send
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks))
-          rb-0)))
-    ((recv (cat a ra-0)) (send (cat b rb-1 (enc a ra-0 tb (ltk b ks)))))
-    ((send (cat a ra-0))
-      (recv
-        (cat (enc b ra-0 k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (label 14)
-  (parent 12)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (ra ra) (rb rb) (k k) (tb tb))))
-  (origs (k (1 1)) (rb (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol neuman-stubblebine basic
-  (defrole init
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (send (cat a ra))
-      (recv (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))
-      (send (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole resp
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (recv (cat a ra)) (send (cat b rb (enc a ra tb (ltk b ks))))
-      (recv (cat (enc a k tb (ltk b ks)) (enc rb k)))))
-  (defrole keyserver
-    (vars (a b ks name) (ra rb text) (k skey) (tb text))
-    (trace (recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    (uniq-orig k)))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb text) (a b ks name) (k skey))
-  (defstrand keyserver 2 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (traces
-    ((recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb))))
-  (label 15)
-  (unrealized (0 0))
-  (origs (k (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton neuman-stubblebine
-  (vars (ra rb tb rb-0 text) (a b ks name) (k skey))
-  (defstrand keyserver 2 (ra ra) (rb rb) (tb tb) (a a) (b b) (ks ks)
-    (k k))
-  (defstrand resp 2 (ra ra) (rb rb-0) (tb tb) (a a) (b b) (ks ks))
-  (precedes ((1 1) (0 0)))
-  (non-orig (ltk a ks) (ltk b ks))
-  (uniq-orig ra rb k)
-  (operation encryption-test (added-strand resp 2)
-    (enc a ra tb (ltk b ks)) (0 0))
-  (traces
-    ((recv (cat b rb (enc a ra tb (ltk b ks))))
-      (send
-        (cat (enc b ra k tb (ltk a ks)) (enc a k tb (ltk b ks)) rb)))
-    ((recv (cat a ra)) (send (cat b rb-0 (enc a ra tb (ltk b ks))))))
-  (label 16)
-  (parent 15)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (ks ks) (ra ra) (rb rb) (k k) (tb tb))))
-  (origs (k (0 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/no_contraction.scm b/tst/no_contraction.scm
deleted file mode 100644
--- a/tst/no_contraction.scm
+++ /dev/null
@@ -1,16 +0,0 @@
-(defprotocol no-contraction basic
-  (defrole init
-    (vars (a b name) (n text))
-    (trace
-     (send (enc (enc n (privk a))(pubk b)))))
-  (defrole resp
-    (vars (a name) (n text))
-    (trace
-     (recv (enc n (privk a))))))
-
-(defskeleton no-contraction
-  (vars (a b name) (n m text))
-  (defstrand resp 1 (a a) (n n))
-  (defstrand init 1 (n n))
-  (uniq-orig n)
-  (non-orig (privk a)))
diff --git a/tst/no_contraction.tst b/tst/no_contraction.tst
deleted file mode 100644
--- a/tst/no_contraction.tst
+++ /dev/null
@@ -1,58 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from no_contraction.scm")
-
-(defprotocol no-contraction basic
-  (defrole init
-    (vars (a b name) (n text))
-    (trace (send (enc (enc n (privk a)) (pubk b)))))
-  (defrole resp
-    (vars (a name) (n text))
-    (trace (recv (enc n (privk a))))))
-
-(defskeleton no-contraction
-  (vars (n text) (a a-0 b name))
-  (defstrand resp 1 (n n) (a a))
-  (defstrand init 1 (n n) (a a-0) (b b))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (traces ((recv (enc n (privk a))))
-    ((send (enc (enc n (privk a-0)) (pubk b)))))
-  (label 0)
-  (unrealized (0 0))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton no-contraction
-  (vars (n text) (a a-0 b name))
-  (defstrand resp 1 (n n) (a a))
-  (defstrand init 1 (n n) (a a-0) (b b))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (traces ((recv (enc n (privk a))))
-    ((send (enc (enc n (privk a-0)) (pubk b)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 0))
-  (origs (n (1 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton no-contraction
-  (vars (n text) (a b name))
-  (defstrand resp 1 (n n) (a a))
-  (defstrand init 1 (n n) (a a) (b b))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation encryption-test (displaced 2 1 init 1) (enc n (privk a-0))
-    (0 0))
-  (traces ((recv (enc n (privk a))))
-    ((send (enc (enc n (privk a)) (pubk b)))))
-  (label 2)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((a a) (n n) (a-0 a) (b b))))
-  (origs (n (1 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/non_transforming.scm b/tst/non_transforming.scm
deleted file mode 100644
--- a/tst/non_transforming.scm
+++ /dev/null
@@ -1,42 +0,0 @@
-; non_transforming.scm --
-;  Illustrates a bug.  In the given
-; POV, if we try an augmentation with
-; (breaker 3), cowt causes a unification
-; that makes the 3rd node no longer a
-; transforming node, because the same
-; message is sent at the 2nd node.
-
-(defprotocol non_transforming basic
-  (defrole sender
-    (vars (a b text) (B name))
-    (trace
-      (send (enc a b (pubk B)))
-    )
-    (uniq-orig a b)
-    (non-orig (privk B))
-  )
-  (defrole recv
-    (vars (a b text) (B name))
-    (trace
-      (recv (enc a (pubk B)))
-      (recv (enc b (pubk B)))
-    )
-  )
-  (defrole breaker
-    (vars (a b text) (B name))
-    (trace
-       (recv (enc a b (pubk B)))
-       (send (enc a (pubk B)))
-       (send (enc b (pubk B)))
-    )
-  )
-)
-
-(defskeleton non_transforming
-  (vars (a b c d text) (B B0 B1 name))
-  (defstrand recv 2 (a a) (b b) (B B))
-  (defstrand sender 1 (a a) (b d) (B B0))
-  (defstrand sender 1 (a c) (b b) (B B1))
-  (precedes ((1 0) (0 0)) ((2 0) (0 1)))
-  (uniq-orig a b)
-)
diff --git a/tst/non_transforming.tst b/tst/non_transforming.tst
deleted file mode 100644
--- a/tst/non_transforming.tst
+++ /dev/null
@@ -1,278 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from non_transforming.scm")
-
-(defprotocol non_transforming basic
-  (defrole sender
-    (vars (a b text) (B name))
-    (trace (send (enc a b (pubk B))))
-    (non-orig (privk B))
-    (uniq-orig a b))
-  (defrole recv
-    (vars (a b text) (B name))
-    (trace (recv (enc a (pubk B))) (recv (enc b (pubk B)))))
-  (defrole breaker
-    (vars (a b text) (B name))
-    (trace (recv (enc a b (pubk B))) (send (enc a (pubk B)))
-      (send (enc b (pubk B))))))
-
-(defskeleton non_transforming
-  (vars (a b c d text) (B B0 B1 name))
-  (defstrand recv 2 (a a) (b b) (B B))
-  (defstrand sender 1 (a a) (b d) (B B0))
-  (defstrand sender 1 (a c) (b b) (B B1))
-  (precedes ((1 0) (0 0)) ((2 0) (0 1)))
-  (non-orig (privk B0) (privk B1))
-  (uniq-orig a b c d)
-  (traces ((recv (enc a (pubk B))) (recv (enc b (pubk B))))
-    ((send (enc a d (pubk B0)))) ((send (enc c b (pubk B1)))))
-  (label 0)
-  (unrealized (0 0) (0 1))
-  (origs (c (2 0)) (d (1 0)) (a (1 0)) (b (2 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton non_transforming
-  (vars (a d text) (B B0 name))
-  (defstrand recv 2 (a a) (b d) (B B))
-  (defstrand sender 1 (a a) (b d) (B B0))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk B0))
-  (uniq-orig a d)
-  (operation collapsed 2 1)
-  (traces ((recv (enc a (pubk B))) (recv (enc d (pubk B))))
-    ((send (enc a d (pubk B0)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 0) (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton non_transforming
-  (vars (a b c d text) (B B0 B1 name))
-  (defstrand recv 2 (a a) (b b) (B B))
-  (defstrand sender 1 (a a) (b d) (B B0))
-  (defstrand sender 1 (a c) (b b) (B B1))
-  (defstrand breaker 2 (a a) (b d) (B B0))
-  (precedes ((1 0) (3 0)) ((2 0) (0 1)) ((3 1) (0 0)))
-  (non-orig (privk B0) (privk B1))
-  (uniq-orig a b c d)
-  (operation nonce-test (added-strand breaker 2) a (0 0)
-    (enc a d (pubk B0)))
-  (traces ((recv (enc a (pubk B))) (recv (enc b (pubk B))))
-    ((send (enc a d (pubk B0)))) ((send (enc c b (pubk B1))))
-    ((recv (enc a d (pubk B0))) (send (enc a (pubk B0)))))
-  (label 2)
-  (parent 0)
-  (unrealized (0 0) (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton non_transforming
-  (vars (a d text) (B B0 name))
-  (defstrand recv 2 (a a) (b d) (B B))
-  (defstrand sender 1 (a a) (b d) (B B0))
-  (defstrand breaker 2 (a a) (b d) (B B0))
-  (precedes ((1 0) (2 0)) ((2 1) (0 0)))
-  (non-orig (privk B0))
-  (uniq-orig a d)
-  (operation nonce-test (added-strand breaker 2) a (0 0)
-    (enc a d (pubk B0)))
-  (traces ((recv (enc a (pubk B))) (recv (enc d (pubk B))))
-    ((send (enc a d (pubk B0))))
-    ((recv (enc a d (pubk B0))) (send (enc a (pubk B0)))))
-  (label 3)
-  (parent 1)
-  (unrealized (0 0) (0 1))
-  (origs (a (1 0)) (d (1 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton non_transforming
-  (vars (a b c d text) (B0 B1 name))
-  (defstrand recv 2 (a a) (b b) (B B0))
-  (defstrand sender 1 (a a) (b d) (B B0))
-  (defstrand sender 1 (a c) (b b) (B B1))
-  (defstrand breaker 2 (a a) (b d) (B B0))
-  (precedes ((1 0) (3 0)) ((2 0) (0 1)) ((3 1) (0 0)))
-  (non-orig (privk B0) (privk B1))
-  (uniq-orig a b c d)
-  (operation nonce-test (contracted (B B0)) a (0 0) (enc a (pubk B0))
-    (enc a d (pubk B0)))
-  (traces ((recv (enc a (pubk B0))) (recv (enc b (pubk B0))))
-    ((send (enc a d (pubk B0)))) ((send (enc c b (pubk B1))))
-    ((recv (enc a d (pubk B0))) (send (enc a (pubk B0)))))
-  (label 4)
-  (parent 2)
-  (unrealized (0 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton non_transforming
-  (vars (a d text) (B0 name))
-  (defstrand recv 2 (a a) (b d) (B B0))
-  (defstrand sender 1 (a a) (b d) (B B0))
-  (defstrand breaker 2 (a a) (b d) (B B0))
-  (precedes ((1 0) (2 0)) ((2 1) (0 0)))
-  (non-orig (privk B0))
-  (uniq-orig a d)
-  (operation nonce-test (contracted (B B0)) a (0 0) (enc a (pubk B0))
-    (enc a d (pubk B0)))
-  (traces ((recv (enc a (pubk B0))) (recv (enc d (pubk B0))))
-    ((send (enc a d (pubk B0))))
-    ((recv (enc a d (pubk B0))) (send (enc a (pubk B0)))))
-  (label 5)
-  (parent 3)
-  (unrealized (0 1))
-  (origs (a (1 0)) (d (1 0)))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton non_transforming
-  (vars (a b c d text) (B0 B1 name))
-  (defstrand recv 2 (a a) (b b) (B B0))
-  (defstrand sender 1 (a a) (b d) (B B0))
-  (defstrand sender 1 (a c) (b b) (B B1))
-  (defstrand breaker 2 (a a) (b d) (B B0))
-  (defstrand breaker 3 (a c) (b b) (B B1))
-  (precedes ((1 0) (3 0)) ((2 0) (4 0)) ((3 1) (0 0)) ((4 2) (0 1)))
-  (non-orig (privk B0) (privk B1))
-  (uniq-orig a b c d)
-  (operation nonce-test (added-strand breaker 3) b (0 1)
-    (enc c b (pubk B1)))
-  (traces ((recv (enc a (pubk B0))) (recv (enc b (pubk B0))))
-    ((send (enc a d (pubk B0)))) ((send (enc c b (pubk B1))))
-    ((recv (enc a d (pubk B0))) (send (enc a (pubk B0))))
-    ((recv (enc c b (pubk B1))) (send (enc c (pubk B1)))
-      (send (enc b (pubk B1)))))
-  (label 6)
-  (parent 4)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton non_transforming
-  (vars (a c d text) (B0 B1 name))
-  (defstrand recv 2 (a a) (b c) (B B0))
-  (defstrand sender 1 (a a) (b d) (B B0))
-  (defstrand sender 1 (a c) (b c) (B B1))
-  (defstrand breaker 2 (a a) (b d) (B B0))
-  (defstrand breaker 2 (a c) (b c) (B B1))
-  (precedes ((1 0) (3 0)) ((2 0) (4 0)) ((3 1) (0 0)) ((4 1) (0 1)))
-  (non-orig (privk B0) (privk B1))
-  (uniq-orig a c d)
-  (operation nonce-test (added-strand breaker 2) c (0 1)
-    (enc c c (pubk B1)))
-  (traces ((recv (enc a (pubk B0))) (recv (enc c (pubk B0))))
-    ((send (enc a d (pubk B0)))) ((send (enc c c (pubk B1))))
-    ((recv (enc a d (pubk B0))) (send (enc a (pubk B0))))
-    ((recv (enc c c (pubk B1))) (send (enc c (pubk B1)))))
-  (label 7)
-  (parent 4)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton non_transforming
-  (vars (a d text) (B0 name))
-  (defstrand recv 2 (a a) (b d) (B B0))
-  (defstrand sender 1 (a a) (b d) (B B0))
-  (defstrand breaker 3 (a a) (b d) (B B0))
-  (precedes ((1 0) (2 0)) ((2 1) (0 0)) ((2 2) (0 1)))
-  (non-orig (privk B0))
-  (uniq-orig a d)
-  (operation nonce-test (displaced 2 3 breaker 3) d (0 1)
-    (enc a d (pubk B0)))
-  (traces ((recv (enc a (pubk B0))) (recv (enc d (pubk B0))))
-    ((send (enc a d (pubk B0))))
-    ((recv (enc a d (pubk B0))) (send (enc a (pubk B0)))
-      (send (enc d (pubk B0)))))
-  (label 8)
-  (parent 5)
-  (unrealized)
-  (shape)
-  (maps ((0 1 1) ((a a) (b d) (c a) (d d) (B B0) (B0 B0) (B1 B0))))
-  (origs (a (1 0)) (d (1 0))))
-
-(defskeleton non_transforming
-  (vars (a d text) (B0 name))
-  (defstrand recv 2 (a a) (b d) (B B0))
-  (defstrand sender 1 (a a) (b d) (B B0))
-  (defstrand breaker 2 (a a) (b d) (B B0))
-  (defstrand breaker 3 (a a) (b d) (B B0))
-  (precedes ((1 0) (2 0)) ((1 0) (3 0)) ((2 1) (0 0)) ((3 2) (0 1)))
-  (non-orig (privk B0))
-  (uniq-orig a d)
-  (operation nonce-test (added-strand breaker 3) d (0 1)
-    (enc a d (pubk B0)))
-  (traces ((recv (enc a (pubk B0))) (recv (enc d (pubk B0))))
-    ((send (enc a d (pubk B0))))
-    ((recv (enc a d (pubk B0))) (send (enc a (pubk B0))))
-    ((recv (enc a d (pubk B0))) (send (enc a (pubk B0)))
-      (send (enc d (pubk B0)))))
-  (label 9)
-  (parent 5)
-  (unrealized)
-  (shape)
-  (maps ((0 1 1) ((a a) (b d) (c a) (d d) (B B0) (B0 B0) (B1 B0))))
-  (origs (a (1 0)) (d (1 0))))
-
-(defskeleton non_transforming
-  (vars (a text) (B0 name))
-  (defstrand recv 2 (a a) (b a) (B B0))
-  (defstrand sender 1 (a a) (b a) (B B0))
-  (defstrand breaker 2 (a a) (b a) (B B0))
-  (precedes ((1 0) (2 0)) ((2 1) (0 0)))
-  (non-orig (privk B0))
-  (uniq-orig a)
-  (operation nonce-test (displaced 3 2 breaker 2) a (0 1)
-    (enc a a (pubk B0)))
-  (traces ((recv (enc a (pubk B0))) (recv (enc a (pubk B0))))
-    ((send (enc a a (pubk B0))))
-    ((recv (enc a a (pubk B0))) (send (enc a (pubk B0)))))
-  (label 10)
-  (parent 5)
-  (unrealized)
-  (shape)
-  (maps ((0 1 1) ((a a) (b a) (c a) (d a) (B B0) (B0 B0) (B1 B0))))
-  (origs (a (1 0))))
-
-(defskeleton non_transforming
-  (vars (a b c d text) (B1 name))
-  (defstrand recv 2 (a a) (b b) (B B1))
-  (defstrand sender 1 (a a) (b d) (B B1))
-  (defstrand sender 1 (a c) (b b) (B B1))
-  (defstrand breaker 2 (a a) (b d) (B B1))
-  (defstrand breaker 3 (a c) (b b) (B B1))
-  (precedes ((1 0) (3 0)) ((2 0) (4 0)) ((3 1) (0 0)) ((4 2) (0 1)))
-  (non-orig (privk B1))
-  (uniq-orig a b c d)
-  (operation nonce-test (contracted (B0 B1)) b (0 1) (enc b (pubk B1))
-    (enc c b (pubk B1)))
-  (traces ((recv (enc a (pubk B1))) (recv (enc b (pubk B1))))
-    ((send (enc a d (pubk B1)))) ((send (enc c b (pubk B1))))
-    ((recv (enc a d (pubk B1))) (send (enc a (pubk B1))))
-    ((recv (enc c b (pubk B1))) (send (enc c (pubk B1)))
-      (send (enc b (pubk B1)))))
-  (label 11)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps ((0 1 2) ((a a) (b b) (c c) (d d) (B B1) (B0 B1) (B1 B1))))
-  (origs (c (2 0)) (d (1 0)) (a (1 0)) (b (2 0))))
-
-(defskeleton non_transforming
-  (vars (a c d text) (B1 name))
-  (defstrand recv 2 (a a) (b c) (B B1))
-  (defstrand sender 1 (a a) (b d) (B B1))
-  (defstrand sender 1 (a c) (b c) (B B1))
-  (defstrand breaker 2 (a a) (b d) (B B1))
-  (defstrand breaker 2 (a c) (b c) (B B1))
-  (precedes ((1 0) (3 0)) ((2 0) (4 0)) ((3 1) (0 0)) ((4 1) (0 1)))
-  (non-orig (privk B1))
-  (uniq-orig a c d)
-  (operation nonce-test (contracted (B0 B1)) c (0 1) (enc c (pubk B1))
-    (enc c c (pubk B1)))
-  (traces ((recv (enc a (pubk B1))) (recv (enc c (pubk B1))))
-    ((send (enc a d (pubk B1)))) ((send (enc c c (pubk B1))))
-    ((recv (enc a d (pubk B1))) (send (enc a (pubk B1))))
-    ((recv (enc c c (pubk B1))) (send (enc c (pubk B1)))))
-  (label 12)
-  (parent 7)
-  (unrealized)
-  (shape)
-  (maps ((0 1 2) ((a a) (b c) (c c) (d d) (B B1) (B0 B1) (B1 B1))))
-  (origs (c (2 0)) (d (1 0)) (a (1 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/nonaug-prune.scm b/tst/nonaug-prune.scm
deleted file mode 100644
--- a/tst/nonaug-prune.scm
+++ /dev/null
@@ -1,42 +0,0 @@
-;; This protocol shows that it is possible to prune
-;; two strands of a parent skeleton after augmenting
-;; with a new strand.
-
-(defprotocol nonaug-prune basic
-  (defrole orig
-    (vars (n text) (A B name) (k akey))
-    (trace
-     (send (enc n B B k))
-     (send (enc n A k))
-     (recv (enc n A A A k)))
-    (uniq-orig n)
-    (non-orig (invk k)))
-  (defrole trans1
-    (vars (n text) (A C name) (k akey))
-    (trace
-     (recv (enc n A A k))
-     (recv (enc n A k))
-     (send (enc n n C k))))
-  (defrole trans2
-    (vars (n text) (A name) (k akey))
-    (trace
-     (recv (enc n A k))
-     (send (enc n A A A k))))
-)
-
-;; (defskeleton nonaug-prune
-;;   (vars (n text) (A B C name) (k akey))
-;;   (defstrand trans1 3 (n n) (A A) (C C) (k k))
-;;   (defstrand orig 3 (n n) (A A) (B B) (k k))
-;;   (precedes ((1 0) (0 0)) ((0 2) (1 2))))
-
-;; (defskeleton nonaug-prune
-;;   (vars (n text) (A B name) (k akey))
-;;   (defstrand orig 3 (n n) (A A) (B B) (k k)))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A)(B B) (k k))
-  (precedes ((2 0) (0 0)) ((2 0) (1 0))))
diff --git a/tst/nonaug-prune.tst b/tst/nonaug-prune.tst
deleted file mode 100644
--- a/tst/nonaug-prune.tst
+++ /dev/null
@@ -1,823 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from nonaug-prune.scm")
-
-(defprotocol nonaug-prune basic
-  (defrole orig
-    (vars (n text) (A B name) (k akey))
-    (trace (send (enc n B B k)) (send (enc n A k))
-      (recv (enc n A A A k)))
-    (non-orig (invk k))
-    (uniq-orig n))
-  (defrole trans1
-    (vars (n text) (A C name) (k akey))
-    (trace (recv (enc n A A k)) (recv (enc n A k))
-      (send (enc n n C k))))
-  (defrole trans2
-    (vars (n text) (A name) (k akey))
-    (trace (recv (enc n A k)) (send (enc n A A A k)))))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (precedes ((2 0) (0 0)) ((2 0) (1 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k))))
-  (label 0)
-  (unrealized (0 0) (1 0) (2 2))
-  (origs (n (2 0)))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation collapsed 1 0)
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k))))
-  (label 1)
-  (parent 0)
-  (seen 3)
-  (unrealized (0 0) (1 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (precedes ((2 0) (0 0)) ((2 0) (1 0)) ((2 0) (3 0)) ((3 2) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans1 3) n (2 2) (enc n B k)
-    (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k))))
-  (label 2)
-  (parent 0)
-  (unrealized (0 0) (1 0) (2 2) (3 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (precedes ((0 1) (2 2)) ((2 0) (0 0)) ((2 0) (1 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 3 0 trans2 2) n (2 2) (enc n A k)
-    (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k))))
-  (label 3)
-  (parent 0)
-  (unrealized (0 0) (1 0))
-  (origs (n (2 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (precedes ((1 1) (2 2)) ((2 0) (0 0)) ((2 0) (1 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 3 1 trans2 2) n (2 2) (enc n A k)
-    (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k))))
-  (label 4)
-  (parent 0)
-  (unrealized (0 0) (1 0))
-  (origs (n (2 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((2 0) (0 0)) ((2 0) (1 0)) ((2 0) (3 0)) ((3 1) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans2 2) n (2 2) (enc n A k)
-    (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 5)
-  (parent 0)
-  (unrealized (0 0) (1 0) (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (precedes ((1 0) (0 0)) ((1 0) (2 0)) ((2 2) (1 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans1 3) n (1 2) (enc n B k)
-    (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k))))
-  (label 6)
-  (parent 1)
-  (unrealized (0 0) (1 2) (2 1))
-  (origs (n (1 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (precedes ((0 1) (1 2)) ((1 0) (0 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 2 0 trans2 2) n (1 2) (enc n B k)
-    (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k))))
-  (label 7)
-  (parent 1)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (precedes ((2 0) (0 0)) ((2 0) (1 0)) ((2 0) (3 0)) ((2 1) (3 1))
-    ((3 2) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 4 2 orig 2) n (3 1) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k))))
-  (label 8)
-  (parent 2)
-  (seen 15)
-  (unrealized (0 0) (1 0) (2 2))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (precedes ((0 1) (2 2)) ((2 0) (0 0)) ((2 1) (1 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 3 2 orig 2) n (1 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k))))
-  (label 9)
-  (parent 3)
-  (unrealized (0 0))
-  (origs (n (2 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (precedes ((1 1) (2 2)) ((2 0) (0 0)) ((2 1) (1 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 3 2 orig 2) n (1 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k))))
-  (label 10)
-  (parent 4)
-  (unrealized (0 0))
-  (origs (n (2 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((2 0) (0 0)) ((2 0) (1 0)) ((2 1) (3 0)) ((3 1) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 4 2 orig 2) n (3 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 11)
-  (parent 5)
-  (unrealized (0 0) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (precedes ((1 0) (0 0)) ((1 0) (2 0)) ((1 1) (2 1)) ((2 2) (1 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 3 1 orig 2) n (2 1) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k))))
-  (label 12)
-  (parent 6)
-  (seen 15)
-  (unrealized (0 0) (1 2))
-  (origs (n (1 0)))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (precedes ((0 1) (1 2)) ((1 1) (0 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 2 1 orig 2) n (0 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k))))
-  (label 13)
-  (parent 7)
-  (unrealized)
-  (shape)
-  (maps ((0 0 1) ((n n) (A B) (B B) (k k))))
-  (origs (n (1 0))))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C C-0 name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C-0) (k k))
-  (precedes ((2 0) (0 0)) ((2 0) (1 0)) ((2 0) (3 0)) ((2 0) (4 0))
-    ((2 1) (3 1)) ((3 2) (2 2)) ((4 2) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans1 3) n (2 2) (enc n B k)
-    (enc n n C k) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C-0 k))))
-  (label 14)
-  (parent 8)
-  (seen 8)
-  (unrealized (0 0) (1 0) (2 2) (4 1))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (precedes ((0 1) (2 2)) ((2 0) (0 0)) ((2 0) (1 0)) ((2 0) (3 0))
-    ((2 1) (3 1)) ((3 2) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 4 0 trans2 2) n (2 2) (enc n B k)
-    (enc n n C k) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k))))
-  (label 15)
-  (parent 8)
-  (unrealized (0 0) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (precedes ((2 0) (0 0)) ((2 0) (1 0)) ((2 0) (3 0)) ((2 0) (4 0))
-    ((2 1) (3 1)) ((3 2) (2 2)) ((4 1) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans2 2) n (2 2) (enc n B k)
-    (enc n n C k) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k)))
-    ((recv (enc n B k)) (send (enc n B B B k))))
-  (label 16)
-  (parent 8)
-  (unrealized (0 0) (1 0) (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (precedes ((0 1) (2 2)) ((2 1) (0 0)) ((2 1) (1 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 3 2 orig 2) n (0 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k))))
-  (label 17)
-  (parent 9)
-  (unrealized)
-  (shape)
-  (maps ((0 1 2) ((n n) (A B) (B B) (k k))))
-  (origs (n (2 0))))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (precedes ((1 1) (2 2)) ((2 1) (0 0)) ((2 1) (1 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 3 2 orig 2) n (0 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k))))
-  (label 18)
-  (parent 10)
-  (seen 17)
-  (unrealized (0 0))
-  (origs (n (2 0)))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((2 0) (0 0)) ((2 1) (1 0)) ((2 1) (3 0)) ((3 1) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 4 2 orig 2) n (1 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 19)
-  (parent 11)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C C-0 name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C-0) (k k))
-  (precedes ((1 0) (0 0)) ((1 0) (2 0)) ((1 0) (3 0)) ((1 1) (2 1))
-    ((2 2) (1 2)) ((3 2) (1 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans1 3) n (1 2) (enc n B k)
-    (enc n n C k) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C-0 k))))
-  (label 20)
-  (parent 12)
-  (seen 12)
-  (unrealized (0 0) (1 2) (3 1))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (precedes ((0 1) (1 2)) ((1 0) (0 0)) ((1 0) (2 0)) ((1 1) (2 1))
-    ((2 2) (1 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 3 0 trans2 2) n (1 2) (enc n B k)
-    (enc n n C k) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k))))
-  (label 21)
-  (parent 12)
-  (unrealized (0 0))
-  (origs (n (1 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (precedes ((0 1) (2 2)) ((2 0) (0 0)) ((2 0) (3 0)) ((2 1) (1 0))
-    ((2 1) (3 1)) ((3 2) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 4 2 orig 2) n (1 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k))))
-  (label 22)
-  (parent 15)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (precedes ((2 0) (0 0)) ((2 0) (1 0)) ((2 0) (3 0)) ((2 1) (3 1))
-    ((2 1) (4 0)) ((3 2) (2 2)) ((4 1) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 5 2 orig 2) n (4 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k)))
-    ((recv (enc n B k)) (send (enc n B B B k))))
-  (label 23)
-  (parent 16)
-  (unrealized (0 0) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (precedes ((1 1) (0 0)) ((1 1) (2 2)) ((2 1) (1 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 3 1 trans2 2) n (0 0) (enc n A k)
-    (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k))))
-  (label 24)
-  (parent 18)
-  (unrealized (0 0))
-  (origs (n (2 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((1 1) (2 2)) ((2 0) (3 0)) ((2 1) (0 0)) ((2 1) (1 0))
-    ((3 1) (0 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans2 2) n (0 0) (enc n A k)
-    (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 25)
-  (parent 18)
-  (unrealized (0 0) (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((2 1) (0 0)) ((2 1) (1 0)) ((2 1) (3 0)) ((3 1) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 4 2 orig 2) n (0 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 26)
-  (parent 19)
-  (seen 31)
-  (unrealized (0 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (precedes ((0 1) (1 2)) ((1 0) (2 0)) ((1 1) (0 0)) ((1 1) (2 1))
-    ((2 2) (1 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 3 1 orig 2) n (0 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k))))
-  (label 27)
-  (parent 21)
-  (seen 13)
-  (unrealized)
-  (origs (n (1 0)))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (precedes ((0 1) (2 2)) ((2 0) (3 0)) ((2 1) (0 0)) ((2 1) (1 0))
-    ((2 1) (3 1)) ((3 2) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 4 2 orig 2) n (0 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k))))
-  (label 28)
-  (parent 22)
-  (seen 17)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (precedes ((2 0) (0 0)) ((2 0) (3 0)) ((2 1) (1 0)) ((2 1) (3 1))
-    ((2 1) (4 0)) ((3 2) (2 2)) ((4 1) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 5 2 orig 2) n (1 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k)))
-    ((recv (enc n B k)) (send (enc n B B B k))))
-  (label 29)
-  (parent 23)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A name) (k akey))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B A) (k k))
-  (precedes ((1 1) (0 0)) ((1 1) (2 2)) ((2 1) (1 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (contracted (B A)) n (0 0) (enc n A k)
-    (enc n A A k) (enc n A A A k))
-  (traces ((recv (enc n A k)) (send (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n A A k)) (send (enc n A k)) (recv (enc n A A A k))))
-  (label 30)
-  (parent 24)
-  (seen 17)
-  (unrealized)
-  (origs (n (2 0)))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((1 1) (2 2)) ((2 1) (1 0)) ((2 1) (3 0)) ((3 1) (0 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 4 2 orig 2) n (3 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 31)
-  (parent 25)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A name) (k akey))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((2 1) (0 0)) ((2 1) (1 0)) ((2 1) (3 0)) ((3 1) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (contracted (B A)) n (0 0) (enc n A k)
-    (enc n A A k))
-  (traces ((recv (enc n A k)) (send (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n A A k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 32)
-  (parent 26)
-  (unrealized)
-  (shape)
-  (maps ((0 1 2) ((n n) (A A) (B A) (k k))))
-  (origs (n (2 0))))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((2 1) (1 0)) ((2 1) (3 0)) ((3 1) (0 0)) ((3 1) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 4 3 trans2 2) n (0 0) (enc n A k)
-    (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 33)
-  (parent 26)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((2 0) (4 0)) ((2 1) (0 0)) ((2 1) (1 0)) ((2 1) (3 0))
-    ((3 1) (2 2)) ((4 1) (0 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans2 2) n (0 0) (enc n A k)
-    (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 34)
-  (parent 26)
-  (unrealized (0 0) (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (B C name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand orig 3 (n n) (A B) (B B) (k k))
-  (defstrand trans1 3 (n n) (A B) (C C) (k k))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (precedes ((2 0) (3 0)) ((2 1) (0 0)) ((2 1) (1 0)) ((2 1) (3 1))
-    ((2 1) (4 0)) ((3 2) (2 2)) ((4 1) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 5 2 orig 2) n (0 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n B k)) (send (enc n B B B k)))
-    ((send (enc n B B k)) (send (enc n B k)) (recv (enc n B B B k)))
-    ((recv (enc n B B k)) (recv (enc n B k)) (send (enc n n C k)))
-    ((recv (enc n B k)) (send (enc n B B B k))))
-  (label 35)
-  (parent 29)
-  (seen 32)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A name) (k akey))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((1 1) (2 2)) ((2 1) (1 0)) ((2 1) (3 0)) ((3 1) (0 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (contracted (B A)) n (0 0) (enc n A k)
-    (enc n A A k) (enc n A A A k))
-  (traces ((recv (enc n A k)) (send (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n A A k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 36)
-  (parent 31)
-  (seen 17)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A name) (k akey))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((2 1) (1 0)) ((2 1) (3 0)) ((3 1) (0 0)) ((3 1) (2 2)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (contracted (B A)) n (0 0) (enc n A k)
-    (enc n A A k) (enc n A A A k))
-  (traces ((recv (enc n A k)) (send (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n A A k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 37)
-  (parent 33)
-  (seen 32)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A B name) (k akey))
-  (defstrand trans2 2 (n n) (A B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B B) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((2 1) (1 0)) ((2 1) (3 0)) ((2 1) (4 0)) ((3 1) (2 2))
-    ((4 1) (0 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (displaced 5 2 orig 2) n (4 0) (enc n B B k))
-  (traces ((recv (enc n B k)) (send (enc n B B B k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n B B k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 38)
-  (parent 34)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nonaug-prune
-  (vars (n text) (A name) (k akey))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand orig 3 (n n) (A A) (B A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (defstrand trans2 2 (n n) (A A) (k k))
-  (precedes ((2 1) (1 0)) ((2 1) (3 0)) ((2 1) (4 0)) ((3 1) (2 2))
-    ((4 1) (0 0)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (contracted (B A)) n (0 0) (enc n A k)
-    (enc n A A k) (enc n A A A k))
-  (traces ((recv (enc n A k)) (send (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((send (enc n A A k)) (send (enc n A k)) (recv (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k)))
-    ((recv (enc n A k)) (send (enc n A A A k))))
-  (label 39)
-  (parent 38)
-  (seen 32)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
diff --git a/tst/ns-l.scm b/tst/ns-l.scm
deleted file mode 100644
--- a/tst/ns-l.scm
+++ /dev/null
@@ -1,38 +0,0 @@
-(herald "Needham-Schroeder-Low Public-Key Protocol"
-	(comment "With deflistener's"))
-
-;;; Used to generate output for inclusion in the primer.
-;;; Use margin = 60 (-m 60) to generate the output.
-
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-     (send (enc n1 a (pubk b)))
-     (recv (enc b n1 n2 (pubk a)))
-     (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc n1 a (pubk b)))
-     (send (enc b n1 n2 (pubk a)))
-     (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder"))
-
-;;; The initiator point-of-view
-(defskeleton ns
-  (vars (a b name) (n1 text))
-  (defstrand init 3 (a a) (b b) (n1 n1))
-  (deflistener n1)
-  (non-orig (privk b) (privk a))
-  (uniq-orig n1)
-  (comment "Initiator point-of-view with a listener"))
-
-;;; The responder point-of-view
-(defskeleton ns
-  (vars (a name) (n2 text))
-  (defstrand resp 3 (a a) (n2 n2))
-  (deflistener n2)
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (comment "Responder point-of-view with a listener"))
diff --git a/tst/ns-l.tst b/tst/ns-l.tst
deleted file mode 100644
--- a/tst/ns-l.tst
+++ /dev/null
@@ -1,220 +0,0 @@
-(herald "Needham-Schroeder-Low Public-Key Protocol"
-  (comment "With deflistener's"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from ns-l.scm")
-
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc n1 a (pubk b))) (recv (enc b n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc n1 a (pubk b))) (send (enc b n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder"))
-
-(defskeleton ns
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (deflistener n1)
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (comment "Initiator point-of-view with a listener")
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc b n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))) ((recv n1) (send n1)))
-  (label 0)
-  (unrealized (0 1) (1 0))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton ns
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (deflistener n1)
-  (precedes ((0 0) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc b n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))) ((recv n1) (send n1)))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1) (1 0))
-  (origs (n1 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n1 n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (deflistener n1)
-  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (2 0)) ((2 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (operation nonce-test (added-strand resp 2) n1 (1 0)
-    (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc b n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))) ((recv n1) (send n1))
-    ((recv (enc n1 a (pubk b))) (send (enc b n1 n2-0 (pubk a)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 1) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n2 text) (a b name))
-  (defstrand init 3 (n1 n2) (n2 n2) (a a) (b b))
-  (deflistener n2)
-  (defstrand resp 2 (n2 n2) (n1 n2) (b b) (a a))
-  (precedes ((0 0) (2 0)) ((0 2) (1 0)) ((2 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n2)
-  (operation nonce-test (displaced 3 0 init 3) n2-0 (1 0)
-    (enc n2-0 a (pubk b)) (enc b n2-0 n2-0 (pubk a)))
-  (traces
-    ((send (enc n2 a (pubk b))) (recv (enc b n2 n2 (pubk a)))
-      (send (enc n2 (pubk b)))) ((recv n2) (send n2))
-    ((recv (enc n2 a (pubk b))) (send (enc b n2 n2 (pubk a)))))
-  (label 3)
-  (parent 2)
-  (unrealized (0 1) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n2) (n2 n2) (a a) (b b))
-  (deflistener n2)
-  (defstrand resp 2 (n2 n2) (n1 n2) (b b) (a a))
-  (defstrand resp 2 (n2 n2-0) (n1 n2) (b b) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 2) (1 0)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand resp 2) n2 (1 0) (enc n2 (pubk b))
-    (enc n2 a (pubk b)) (enc b n2 n2 (pubk a)))
-  (traces
-    ((send (enc n2 a (pubk b))) (recv (enc b n2 n2 (pubk a)))
-      (send (enc n2 (pubk b)))) ((recv n2) (send n2))
-    ((recv (enc n2 a (pubk b))) (send (enc b n2 n2 (pubk a))))
-    ((recv (enc n2 a (pubk b))) (send (enc b n2 n2-0 (pubk a)))))
-  (label 4)
-  (parent 3)
-  (unrealized (0 1) (1 0))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
-
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc n1 a (pubk b))) (recv (enc b n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc n1 a (pubk b))) (send (enc b n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder"))
-
-(defskeleton ns
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (deflistener n2)
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (comment "Responder point-of-view with a listener")
-  (traces
-    ((recv (enc n1 a (pubk b))) (send (enc b n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b)))) ((recv n2) (send n2)))
-  (label 5)
-  (unrealized (0 2) (1 0))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton ns
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (deflistener n2)
-  (precedes ((0 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (traces
-    ((recv (enc n1 a (pubk b))) (send (enc b n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b)))) ((recv n2) (send n2)))
-  (label 6)
-  (parent 5)
-  (unrealized (0 2) (1 0))
-  (origs (n2 (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (deflistener n2)
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((2 2) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand init 3) n2 (1 0)
-    (enc b n1 n2 (pubk a)))
-  (traces
-    ((recv (enc n1 a (pubk b))) (send (enc b n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b)))) ((recv n2) (send n2))
-    ((send (enc n1 a (pubk b))) (recv (enc b n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (label 7)
-  (parent 6)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton ns
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (deflistener n2)
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((2 2) (0 2)) ((2 2) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (operation nonce-test (displaced 3 2 init 3) n2 (0 2)
-    (enc b n1 n2 (pubk a)))
-  (traces
-    ((recv (enc n1 a (pubk b))) (send (enc b n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b)))) ((recv n2) (send n2))
-    ((send (enc n1 a (pubk b))) (recv (enc b n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (label 8)
-  (parent 7)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((a a) (n2 n2) (b b) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(defskeleton ns
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (deflistener n2)
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((0 1) (3 1)) ((2 2) (1 0)) ((3 2) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand init 3) n2 (0 2)
-    (enc b n1 n2 (pubk a)))
-  (traces
-    ((recv (enc n1 a (pubk b))) (send (enc b n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b)))) ((recv n2) (send n2))
-    ((send (enc n1 a (pubk b))) (recv (enc b n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((send (enc n1 a (pubk b))) (recv (enc b n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (label 9)
-  (parent 7)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((a a) (n2 n2) (b b) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/ns.scm b/tst/ns.scm
--- a/tst/ns.scm
+++ b/tst/ns.scm
@@ -1,146 +1,37 @@
-(herald "Needham-Schroeder Public-Key Protocol Variants")
-
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-     (send (enc n1 a (pubk b)))
-     (recv (enc n1 n2 (pubk a)))
-     (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc n1 a (pubk b)))
-     (send (enc n1 n2 (pubk a)))
-     (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder with no role origination assumptions"))
-
-;;; The initiator point-of-view
-(defskeleton ns
-  (vars (a b name) (n1 text))
-  (defstrand init 3 (a a) (b b) (n1 n1))
-  (non-orig (privk b) (privk a))
-  (uniq-orig n1)
-  (comment "Initiator point-of-view"))
-
-;;; Double initiator point-of-view
-(defskeleton ns
-  (vars (a b name) (n1 n1-0 text))
-  (defstrand init 3 (a a) (b b) (n1 n1))
-  (defstrand init 3 (a a) (b b) (n1 n1-0))
-  (non-orig (privk b) (privk a))
-  (uniq-orig n1 n1-0)
-  (comment "Double initiator point-of-view"))
-
-;;; Double initiator point-of-view, same nonce
-(defskeleton ns
-  (vars (a b name) (n1 text))
-  (defstrand init 3 (a a) (b b) (n1 n1))
-  (defstrand init 3 (a a) (b b) (n1 n1))
-  (non-orig (privk b) (privk a))
-  (uniq-orig n1)
-  (comment "Double initiator point-of-view, same nonce"))
-
-;;; The responder point-of-view
-(defskeleton ns
-  (vars (a name) (n2 text))
-  (defstrand resp 3 (a a) (n2 n2))
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (comment "Responder point-of-view"))
-
-;;; Needham-Schroeder Protocol with origination assumptions on roles
-;;; This
-
-(defprotocol ns-role-origs basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-     (send (enc n1 a (pubk b)))
-     (recv (enc n1 n2 (pubk a)))
-     (send (enc n2 (pubk b))))
-    (non-orig (privk b))
-    (uniq-orig n1))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc n1 a (pubk b)))
-     (send (enc n1 n2 (pubk a)))
-     (recv (enc n2 (pubk b))))
-    (non-orig (privk a))
-    (uniq-orig n2))
-  (comment "Needham-Schroeder with role assumptions that are too strong"))
-
-;;; The initiator point-of-view
-(defskeleton ns-role-origs
-  (vars)
-  (defstrand init 3))
-
-;;; The responder point-of-view
-(defskeleton ns-role-origs
-  (vars)
-  (defstrand resp 3))
-
-;;; Needham-Schroeder Protocol with a doubled nonce.  Look at the
-;;; first message in each role.
-
-(defprotocol ns2 basic
-  (defrole init
-    (vars (a b name) (n1 n2 n3 text))
-    (trace
-     (send (enc n1 n3 a (pubk b)))
-     (recv (enc n1 n2 (pubk a)))
-     (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc n1 n1 a (pubk b)))
-     (send (enc n1 n2 (pubk a)))
-     (recv (enc n2 (pubk b))))
-    (note doubled nonce in the first message))
-  (note that this protocol is derived from Needham-Schroeder))
-
-(defskeleton ns2
-  (vars (a b name) (n1 text))
-  (defstrand init 3 (a a) (b b) (n1 n1))
-  (non-orig (privk b) (privk a))
-  (uniq-orig n1)
-  (note the disappearance of this note))
-
-;;; Note that the association list style key-value pairs that follow
-;;; the list of strands can be supplied in any order, and values with
-;;; the same key are appended together.  Check the output to see how
-;;; CPSA interprets this input.
-(defskeleton ns
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
-  (non-orig (privk b))
-  (precedes ((0 0) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig n1)
-  (precedes ((1 1) (0 1))))
-
-(defprotocol nsl-typeless basic
-  (defrole init
-    (vars (a b name) (n1 text) (n2 mesg))
-    (trace
-     (send (enc a n1 (pubk b)))
-     (recv (enc n1 n2 b (pubk a)))
-     (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 text) (n1 mesg))
-    (trace
-     (recv (enc a n1 (pubk b)))
-     (send (enc n1 n2 b (pubk a)))
-     (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder-Lowe with untyped nonces"))
-
-;;; The responder point-of-view
-(defskeleton nsl-typeless
-  (vars (a b name) (n2 text))
-  (defstrand resp 2 (a a) (n2 n2) (b b))
-  (deflistener n2)
-  (non-orig (privk a) (privk b))
-  (uniq-orig n2)
-  (comment "Shows typeflaw in typeless NSL"))
+(herald "Needham-Schroeder Public-Key Protocol"
+	(comment "This protocol contains a man-in-the-middle"
+		 "attack discovered by Galvin Lowe."))
+
+;;; Used to generate output for inclusion in the primer.
+;;; Use margin = 60 (-m 60) to generate the output.
+
+(defprotocol ns basic
+  (defrole init
+    (vars (a b name) (n1 n2 text))
+    (trace
+     (send (enc n1 a (pubk b)))
+     (recv (enc n1 n2 (pubk a)))
+     (send (enc n2 (pubk b)))))
+  (defrole resp
+    (vars (b a name) (n2 n1 text))
+    (trace
+     (recv (enc n1 a (pubk b)))
+     (send (enc n1 n2 (pubk a)))
+     (recv (enc n2 (pubk b)))))
+  (comment "Needham-Schroeder"))
+
+;;; The initiator point-of-view
+(defskeleton ns
+  (vars (a b name) (n1 text))
+  (defstrand init 3 (a a) (b b) (n1 n1))
+  (non-orig (privk b) (privk a))
+  (uniq-orig n1)
+  (comment "Initiator point-of-view"))
+
+;;; The responder point-of-view
+(defskeleton ns
+  (vars (a b name) (n2 text))
+  (defstrand resp 3 (a a) (b b) (n2 n2))
+  (non-orig (privk a) (privk b))
+  (uniq-orig n2)
+  (comment "Responder point-of-view"))
diff --git a/tst/ns.tst b/tst/ns.tst
--- a/tst/ns.tst
+++ b/tst/ns.tst
@@ -1,6 +1,8 @@
-(herald "Needham-Schroeder Public-Key Protocol Variants")
+(herald "Needham-Schroeder Public-Key Protocol"
+  (comment "This protocol contains a man-in-the-middle"
+    "attack discovered by Galvin Lowe."))
 
-(comment "CPSA 2.5.4")
+(comment "CPSA 3.2.2")
 (comment "All input read from ns.scm")
 
 (defprotocol ns basic
@@ -12,7 +14,7 @@
     (vars (b a name) (n2 n1 text))
     (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
       (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder with no role origination assumptions"))
+  (comment "Needham-Schroeder"))
 
 (defskeleton ns
   (vars (n1 n2 text) (a b name))
@@ -77,273 +79,18 @@
     (vars (b a name) (n2 n1 text))
     (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
       (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder with no role origination assumptions"))
-
-(defskeleton ns
-  (vars (n1 n1-0 n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1-0) (n2 n2-0) (a a) (b b))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1 n1-0)
-  (comment "Double initiator point-of-view")
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((send (enc n1-0 a (pubk b))) (recv (enc n1-0 n2-0 (pubk a)))
-      (send (enc n2-0 (pubk b)))))
-  (label 3)
-  (unrealized (0 1) (1 1))
-  (origs (n1 (0 0)) (n1-0 (1 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (operation collapsed 1 0)
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (label 4)
-  (parent 3)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n1 n1-0 n2 n2-0 n2-1 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1-0) (n2 n2-0) (a a) (b b))
-  (defstrand resp 2 (n2 n2-1) (n1 n1-0) (b b) (a a))
-  (precedes ((1 0) (2 0)) ((2 1) (1 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1 n1-0)
-  (operation nonce-test (added-strand resp 2) n1-0 (1 1)
-    (enc n1-0 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((send (enc n1-0 a (pubk b))) (recv (enc n1-0 n2-0 (pubk a)))
-      (send (enc n2-0 (pubk b))))
-    ((recv (enc n1-0 a (pubk b))) (send (enc n1-0 n2-1 (pubk a)))))
-  (label 5)
-  (parent 3)
-  (unrealized (0 1) (1 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n1 n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (operation nonce-test (added-strand resp 2) n1 (0 1)
-    (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2-0 (pubk a)))))
-  (label 6)
-  (parent 4)
-  (unrealized (0 1))
-  (origs (n1 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n1 n1-0 n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1-0) (n2 n2-0) (a a) (b b))
-  (defstrand resp 2 (n2 n2-0) (n1 n1-0) (b b) (a a))
-  (precedes ((1 0) (2 0)) ((2 1) (1 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1 n1-0)
-  (operation nonce-test (contracted (n2-1 n2-0)) n1-0 (1 1)
-    (enc n1-0 n2-0 (pubk a)) (enc n1-0 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((send (enc n1-0 a (pubk b))) (recv (enc n1-0 n2-0 (pubk a)))
-      (send (enc n2-0 (pubk b))))
-    ((recv (enc n1-0 a (pubk b))) (send (enc n1-0 n2-0 (pubk a)))))
-  (label 7)
-  (parent 5)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
-    (enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))))
-  (label 8)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps ((0 0) ((a a) (b b) (n1 n1) (n1-0 n1) (n2 n2) (n2-0 n2))))
-  (origs (n1 (0 0))))
-
-(defskeleton ns
-  (vars (n1 n1-0 n2 n2-0 n2-1 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1-0) (n2 n2-0) (a a) (b b))
-  (defstrand resp 2 (n2 n2-0) (n1 n1-0) (b b) (a a))
-  (defstrand resp 2 (n2 n2-1) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (3 0)) ((1 0) (2 0)) ((2 1) (1 1)) ((3 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1 n1-0)
-  (operation nonce-test (added-strand resp 2) n1 (0 1)
-    (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((send (enc n1-0 a (pubk b))) (recv (enc n1-0 n2-0 (pubk a)))
-      (send (enc n2-0 (pubk b))))
-    ((recv (enc n1-0 a (pubk b))) (send (enc n1-0 n2-0 (pubk a))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2-1 (pubk a)))))
-  (label 9)
-  (parent 7)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n1 n1-0 n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (defstrand init 3 (n1 n1-0) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2) (n1 n1-0) (b b) (a a))
-  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (3 0)) ((1 0) (2 0)) ((2 1) (1 1)) ((3 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1 n1-0)
-  (operation nonce-test (contracted (n2-1 n2-0)) n1 (0 1)
-    (enc n1 n2-0 (pubk a)) (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2-0 (pubk a)))
-      (send (enc n2-0 (pubk b))))
-    ((send (enc n1-0 a (pubk b))) (recv (enc n1-0 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1-0 a (pubk b))) (send (enc n1-0 n2 (pubk a))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2-0 (pubk a)))))
-  (label 10)
-  (parent 9)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((a a) (b b) (n1 n1) (n1-0 n1-0) (n2 n2-0) (n2-0 n2))))
-  (origs (n1 (0 0)) (n1-0 (1 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder with no role origination assumptions"))
-
-(defskeleton ns
-  (vars (n1 n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand init 3 (n1 n1) (n2 n2-0) (a a) (b b))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (comment "Double initiator point-of-view, same nonce")
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2-0 (pubk a)))
-      (send (enc n2-0 (pubk b)))))
-  (label 11)
-  (unrealized)
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton ns
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (label 12)
-  (parent 11)
-  (unrealized (0 1))
-  (origs (n1 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n1 n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (operation nonce-test (added-strand resp 2) n1 (0 1)
-    (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2-0 (pubk a)))))
-  (label 13)
-  (parent 12)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
-    (enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))))
-  (label 14)
-  (parent 13)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder with no role origination assumptions"))
+  (comment "Needham-Schroeder"))
 
 (defskeleton ns
   (vars (n2 n1 text) (a b name))
   (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (non-orig (privk a))
+  (non-orig (privk a) (privk b))
   (uniq-orig n2)
   (comment "Responder point-of-view")
   (traces
     ((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
       (recv (enc n2 (pubk b)))))
-  (label 15)
+  (label 3)
   (unrealized (0 2))
   (origs (n2 (0 1)))
   (comment "1 in cohort - 1 not yet seen"))
@@ -353,129 +100,8 @@
   (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
   (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
   (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand init 3) n2 (0 2)
-    (enc n1 n2 (pubk a)))
-  (traces
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b))))
-    ((send (enc n1 a (pubk b-0))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b-0)))))
-  (label 16)
-  (parent 15)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (n2 n2) (b b) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol ns-role-origs basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    (non-orig (privk b))
-    (uniq-orig n1))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b))))
-    (non-orig (privk a))
-    (uniq-orig n2))
-  (comment
-    "Needham-Schroeder with role assumptions that are too strong"))
-
-(defskeleton ns-role-origs
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (non-orig (privk b))
-  (uniq-orig n1)
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (label 17)
-  (unrealized (0 1))
-  (origs (n1 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns-role-origs
-  (vars (n1 n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
   (non-orig (privk a) (privk b))
-  (uniq-orig n1 n2-0)
-  (operation nonce-test (added-strand resp 2) n1 (0 1)
-    (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2-0 (pubk a)))))
-  (label 18)
-  (parent 17)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns-role-origs
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1 n2)
-  (operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
-    (enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))))
-  (label 19)
-  (parent 18)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n2 (1 1)) (n1 (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol ns-role-origs basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    (non-orig (privk b))
-    (uniq-orig n1))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b))))
-    (non-orig (privk a))
-    (uniq-orig n2))
-  (comment
-    "Needham-Schroeder with role assumptions that are too strong"))
-
-(defskeleton ns-role-origs
-  (vars (n2 n1 text) (b a name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (non-orig (privk a))
   (uniq-orig n2)
-  (traces
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b)))))
-  (label 20)
-  (unrealized (0 2))
-  (origs (n2 (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns-role-origs
-  (vars (n2 n1 text) (b a b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
-  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
-  (non-orig (privk a) (privk b-0))
-  (uniq-orig n2 n1)
   (operation nonce-test (added-strand init 3) n2 (0 2)
     (enc n1 n2 (pubk a)))
   (traces
@@ -483,250 +109,11 @@
       (recv (enc n2 (pubk b))))
     ((send (enc n1 a (pubk b-0))) (recv (enc n1 n2 (pubk a)))
       (send (enc n2 (pubk b-0)))))
-  (label 21)
-  (parent 20)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton ns-role-origs
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n2 n1)
-  (operation nonce-test (contracted (b-0 b)) n1 (0 0)
-    (enc n1 a (pubk b)))
-  (traces
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b))))
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (label 22)
-  (parent 21)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (a a) (n2 n2) (n1 n1))))
-  (origs (n1 (1 0)) (n2 (0 1))))
-
-(defskeleton ns-role-origs
-  (vars (n2 n1 n2-0 text) (b a b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
-  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b-0) (a a))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 2) (0 2)) ((2 1) (0 0)))
-  (non-orig (privk a) (privk b-0))
-  (uniq-orig n2 n1 n2-0)
-  (operation nonce-test (added-strand resp 2) n1 (0 0)
-    (enc n1 a (pubk b-0)))
-  (traces
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b))))
-    ((send (enc n1 a (pubk b-0))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b-0))))
-    ((recv (enc n1 a (pubk b-0))) (send (enc n1 n2-0 (pubk a)))))
-  (label 23)
-  (parent 21)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns-role-origs
-  (vars (n2 n1 n2-0 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 2) (0 2)) ((2 1) (0 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n2 n1 n2-0)
-  (operation nonce-test (contracted (b-0 b)) n1 (0 0)
-    (enc n1 n2-0 (pubk a)) (enc n1 a (pubk b)))
-  (traces
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b))))
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2-0 (pubk a)))))
-  (label 24)
-  (parent 23)
-  (seen 22)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
-
-(defprotocol ns2 basic
-  (defrole init
-    (vars (a b name) (n1 n2 n3 text))
-    (trace (send (enc n1 n3 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc n1 n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b))))
-    (note doubled nonce in the first message))
-  (note that this protocol is derived from Needham-Schroeder))
-
-(defskeleton ns2
-  (vars (n1 n2 n3 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (n3 n3) (a a) (b b))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (traces
-    ((send (enc n1 n3 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (label 25)
-  (unrealized (0 1))
-  (origs (n1 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns2
-  (vars (n2 n3 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n3) (n2 n2) (n3 n3) (a a) (b b))
-  (defstrand resp 2 (n2 n2-0) (n1 n3) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n3)
-  (operation nonce-test (added-strand resp 2) n3 (0 1)
-    (enc n3 n3 a (pubk b)))
-  (traces
-    ((send (enc n3 n3 a (pubk b))) (recv (enc n3 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n3 n3 a (pubk b))) (send (enc n3 n2-0 (pubk a)))))
-  (label 26)
-  (parent 25)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns2
-  (vars (n3 n2 text) (a b name))
-  (defstrand init 3 (n1 n3) (n2 n2) (n3 n3) (a a) (b b))
-  (defstrand resp 2 (n2 n2) (n1 n3) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n3)
-  (operation nonce-test (contracted (n2-0 n2)) n3 (0 1)
-    (enc n3 n2 (pubk a)) (enc n3 n3 a (pubk b)))
-  (traces
-    ((send (enc n3 n3 a (pubk b))) (recv (enc n3 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n3 n3 a (pubk b))) (send (enc n3 n2 (pubk a)))))
-  (label 27)
-  (parent 26)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n3) (n2 n2) (n3 n3))))
-  (origs (n3 (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
-      (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder with no role origination assumptions"))
-
-(defskeleton ns
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1)
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
-      (send (enc n2 (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))))
-  (label 28)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((n1 n1) (n2 n2) (a a) (b b))))
-  (origs (n1 (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol nsl-typeless basic
-  (defrole init
-    (vars (a b name) (n1 text) (n2 mesg))
-    (trace (send (enc a n1 (pubk b))) (recv (enc n1 n2 b (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (defrole resp
-    (vars (b a name) (n2 text) (n1 mesg))
-    (trace (recv (enc a n1 (pubk b))) (send (enc n1 n2 b (pubk a)))
-      (recv (enc n2 (pubk b)))))
-  (comment "Needham-Schroeder-Lowe with untyped nonces"))
-
-(defskeleton nsl-typeless
-  (vars (n1 mesg) (n2 text) (a b name))
-  (defstrand resp 2 (n1 n1) (n2 n2) (b b) (a a))
-  (deflistener n2)
-  (non-orig (privk a) (privk b))
-  (uniq-orig n2)
-  (comment "Shows typeflaw in typeless NSL")
-  (traces ((recv (enc a n1 (pubk b))) (send (enc n1 n2 b (pubk a))))
-    ((recv n2) (send n2)))
-  (label 29)
-  (unrealized (1 0))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton nsl-typeless
-  (vars (n1 mesg) (n2 text) (a b name))
-  (defstrand resp 2 (n1 n1) (n2 n2) (b b) (a a))
-  (deflistener n2)
-  (precedes ((0 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n2)
-  (traces ((recv (enc a n1 (pubk b))) (send (enc n1 n2 b (pubk a))))
-    ((recv n2) (send n2)))
-  (label 30)
-  (parent 29)
-  (unrealized (1 0))
-  (origs (n2 (0 1)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton nsl-typeless
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 2 (n1 n1) (n2 n2) (b b) (a a))
-  (deflistener n2)
-  (defstrand init 3 (n2 n2) (n1 n1) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((2 2) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand init 3) n2 (1 0)
-    (enc n1 n2 b (pubk a)))
-  (traces ((recv (enc a n1 (pubk b))) (send (enc n1 n2 b (pubk a))))
-    ((recv n2) (send n2))
-    ((send (enc a n1 (pubk b))) (recv (enc n1 n2 b (pubk a)))
-      (send (enc n2 (pubk b)))))
-  (label 31)
-  (parent 30)
-  (unrealized (1 0))
-  (comment "empty cohort"))
-
-(defskeleton nsl-typeless
-  (vars (n2 n2-0 text) (a b a-0 name))
-  (defstrand resp 2 (n1 a-0) (n2 n2) (b b) (a a))
-  (deflistener n2)
-  (defstrand resp 2 (n1 (cat n2 b)) (n2 n2-0) (b a) (a a-0))
-  (precedes ((0 1) (2 0)) ((2 1) (1 0)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand resp 2) n2 (1 0)
-    (enc a-0 n2 b (pubk a)))
-  (traces ((recv (enc a a-0 (pubk b))) (send (enc a-0 n2 b (pubk a))))
-    ((recv n2) (send n2))
-    ((recv (enc a-0 n2 b (pubk a)))
-      (send (enc (cat n2 b) n2-0 a (pubk a-0)))))
-  (label 32)
-  (parent 30)
+  (label 4)
+  (parent 3)
   (unrealized)
   (shape)
-  (maps ((0 1) ((a a) (b b) (n2 n2) (n1 a-0))))
+  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
   (origs (n2 (0 1))))
 
 (comment "Nothing left to do")
diff --git a/tst/nsl3.scm b/tst/nsl3.scm
deleted file mode 100644
--- a/tst/nsl3.scm
+++ /dev/null
@@ -1,55 +0,0 @@
-(herald "Three Party Needham-Schroeder-Lowe Protocol")
-
-(defprotocol nsl3 basic
-  (defrole init (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace
-     (send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-     (recv (enc na1 nc1 c b
-		(enc na0 nb0 b c (pubk a))
-		(enc nb1 nc0 c a (pubk b))
-		(pubk a)))
-     (send (enc nb0
-		(enc nb1 nc0 c a (pubk b))
-		(enc nc1 (pubk c))
-		(pubk b))))
-    (uniq-orig na0 na1))
-  (defrole mid (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace
-     (recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-     (send (enc nb1 b a
-		(enc na1 a b (pubk c))
-		(enc na0 nb0 b c (pubk a))
-		(pubk c)))
-     (recv (enc nb0
-		(enc nb1 nc0 c a (pubk b))
-		(enc nc1 (pubk c))
-		(pubk b)))
-     (send (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    (uniq-orig nb0 nb1))
-  (defrole resp (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace
-     (recv (enc nb1 b a
-		(enc na1 a b (pubk c))
-		(enc na0 nb0 b c (pubk a))
-		(pubk c)))
-     (send (enc na1 nc1 c b
-		(enc na0 nb0 b c (pubk a))
-		(enc nb1 nc0 c a (pubk b))
-		(pubk a)))
-     (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    (uniq-orig nc0 nc1)))
-
-(defskeleton nsl3
-  (vars (a b c name))
-  (defstrand init 3 (a a) (b b) (c c))
-  (non-orig (privk a) (privk b) (privk c)))
-
-(defskeleton nsl3
-  (vars (a b c name))
-  (defstrand mid 4 (a a) (b b) (c c))
-  (non-orig (privk a) (privk b) (privk c)))
-
-(defskeleton nsl3
-  (vars (a b c name))
-  (defstrand resp 3 (a a) (b b) (c c))
-  (non-orig (privk a) (privk b) (privk c)))
diff --git a/tst/nsl3.tst b/tst/nsl3.tst
deleted file mode 100644
--- a/tst/nsl3.tst
+++ /dev/null
@@ -1,1467 +0,0 @@
-(herald "Three Party Needham-Schroeder-Lowe Protocol")
-
-(comment "CPSA 2.5.4")
-(comment "All input read from nsl3.scm")
-
-(defprotocol nsl3 basic
-  (defrole init
-    (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace (send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    (uniq-orig na0 na1))
-  (defrole mid
-    (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace (recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    (uniq-orig nb0 nb1))
-  (defrole resp
-    (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace
-      (recv
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    (uniq-orig nc0 nc1)))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 text) (a b c name))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1)
-  (traces
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b)))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (na1 (0 0)) (na0 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 nb0-0 nb1-0 text) (a b c name))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nb0-0 nb1-0)
-  (operation nonce-test (added-strand mid 2) na0 (0 1)
-    (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-  (traces
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 nb0-0 nb1-0 nc0-0 nc1-0 text)
-    (a b c name))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0)
-    (nc0 nc0-0) (nc1 nc1-0) (a a) (b b) (c c))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nb0-0 nb1-0 nc0-0 nc1-0)
-  (operation nonce-test (added-strand resp 2) na0 (0 1)
-    (enc na0 a c (enc na1 a b (pubk c)) (pubk b))
-    (enc nb1-0 b a (enc na1 a b (pubk c)) (enc na0 nb0-0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c))))
-    ((recv
-       (enc nb1-0 b a (enc na1 a b (pubk c))
-         (enc na0 nb0-0 b c (pubk a)) (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0-0 b c (pubk a))
-          (enc nb1-0 nc0-0 c a (pubk b)) (pubk a)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 text) (a b c name))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (a a) (b b)
-    (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nb0 nb1 nc0 nc1)
-  (operation nonce-test
-    (contracted (nb0-0 nb0) (nb1-0 nb1) (nc0-0 nc0) (nc1-0 nc1)) na0
-    (0 1) (enc na0 a c (enc na1 a b (pubk c)) (pubk b))
-    (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0 c a (pubk b)) (pubk a))
-    (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))))
-  (label 3)
-  (parent 2)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (b b) (c c) (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1)
-        (nc0 nc0) (nc1 nc1))))
-  (origs (nc0 (2 1)) (nc1 (2 1)) (nb0 (1 1)) (nb1 (1 1)) (na1 (0 0))
-    (na0 (0 0))))
-
-(defskeleton nsl3
-  (vars
-    (na0 na1 nb0 nb1 nc0 nc1 nb0-0 nb1-0 nc0-0 nc1-0 nb0-1 nb1-1 text)
-    (a b c name))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0)
-    (nc0 nc0-0) (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-1) (nb1 nb1-1) (a a)
-    (b b) (c c))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (2 0)) ((2 1) (0 1))
-    ((3 1) (0 1)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nb0-0 nb1-0 nc0-0 nc1-0 nb0-1 nb1-1)
-  (operation nonce-test (added-strand mid 2) na0 (0 1)
-    (enc na0 a c (enc na1 a b (pubk c)) (pubk b))
-    (enc na1 nc1-0 c b (enc na0 nb0-0 b c (pubk a))
-      (enc nb1-0 nc0-0 c a (pubk b)) (pubk a))
-    (enc nb1-0 b a (enc na1 a b (pubk c)) (enc na0 nb0-0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c))))
-    ((recv
-       (enc nb1-0 b a (enc na1 a b (pubk c))
-         (enc na0 nb0-0 b c (pubk a)) (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0-0 b c (pubk a))
-          (enc nb1-0 nc0-0 c a (pubk b)) (pubk a))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-1 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-1 b c (pubk a)) (pubk c)))))
-  (label 4)
-  (parent 2)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 nb0-0 nb1-0 text) (a b c name))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (a a) (b b)
-    (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (2 0)) ((2 1) (0 1))
-    ((3 1) (0 1)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nb0 nb1 nc0 nc1 nb0-0 nb1-0)
-  (operation nonce-test
-    (contracted (nb0-1 nb0) (nb1-1 nb1) (nc0-0 nc0) (nc1-0 nc1)) na0
-    (0 1) (enc na0 a c (enc na1 a b (pubk c)) (pubk b))
-    (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0 c a (pubk b)) (pubk a))
-    (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-      (pubk c))
-    (enc nb1-0 b a (enc na1 a b (pubk c)) (enc na0 nb0-0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c)))))
-  (label 5)
-  (parent 4)
-  (seen 3)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
-
-(defprotocol nsl3 basic
-  (defrole init
-    (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace (send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    (uniq-orig na0 na1))
-  (defrole mid
-    (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace (recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    (uniq-orig nb0 nb1))
-  (defrole resp
-    (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace
-      (recv
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    (uniq-orig nc0 nc1)))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 text) (a b c name))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nb0 nb1)
-  (traces
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c)))))
-  (label 6)
-  (unrealized (0 2))
-  (origs (nb1 (0 1)) (nb0 (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 nc0-0 nc1-0 text) (a b c name))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nb0 nb1 nc0-0 nc1-0)
-  (operation nonce-test (added-strand resp 2) nb0 (0 2)
-    (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a)))))
-  (label 7)
-  (parent 6)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 nc0-0 nc1-0 text) (a b c name))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (precedes ((0 1) (1 0)) ((1 1) (2 1)) ((2 0) (0 0)) ((2 2) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nb0 nb1 nc0-0 nc1-0)
-  (operation nonce-test (added-strand init 3) nb0 (0 2)
-    (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0-0 c a (pubk b)) (pubk a))
-    (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0-0 c a (pubk b)) (enc nc1-0 (pubk c))
-          (pubk b)))))
-  (label 8)
-  (parent 7)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 text) (a b c name))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 0)) ((1 1) (2 1)) ((2 0) (0 0)) ((2 2) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nb0 nb1 nc0 nc1)
-  (operation nonce-test (contracted (nc0-0 nc0) (nc1-0 nc1)) nb0 (0 2)
-    (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0 c a (pubk b)) (pubk a))
-    (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c)) (pubk b))
-    (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b)))))
-  (label 9)
-  (parent 8)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (b b) (c c) (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1)
-        (nc0 nc0) (nc1 nc1))))
-  (origs (na0 (2 0)) (na1 (2 0)) (nc0 (1 1)) (nc1 (1 1)) (nb1 (0 1))
-    (nb0 (0 1))))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 nc0-0 nc1-0 nc0-1 nc1-1 text)
-    (a b c name))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-1)
-    (nc1 nc1-1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((1 1) (2 1)) ((2 0) (0 0))
-    ((2 2) (0 2)) ((3 1) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nb0 nb1 nc0-0 nc1-0 nc0-1 nc1-1)
-  (operation nonce-test (added-strand resp 2) nb0 (0 2)
-    (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0-0 c a (pubk b)) (pubk a))
-    (enc nb0 (enc nb1 nc0-0 c a (pubk b)) (enc nc1-0 (pubk c)) (pubk b))
-    (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0-0 c a (pubk b)) (enc nc1-0 (pubk c))
-          (pubk b))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-1 c a (pubk b)) (pubk a)))))
-  (label 10)
-  (parent 8)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 nc0-0 nc1-0 text) (a b c name))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((1 1) (2 1)) ((2 0) (0 0))
-    ((2 2) (0 2)) ((3 1) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nb0 nb1 nc0 nc1 nc0-0 nc1-0)
-  (operation nonce-test (contracted (nc0-1 nc0) (nc1-1 nc1)) nb0 (0 2)
-    (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0 c a (pubk b)) (pubk a))
-    (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0-0 c a (pubk b)) (pubk a))
-    (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c)) (pubk b))
-    (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a)))))
-  (label 11)
-  (parent 10)
-  (seen 9)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
-
-(defprotocol nsl3 basic
-  (defrole init
-    (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace (send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    (uniq-orig na0 na1))
-  (defrole mid
-    (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace (recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    (uniq-orig nb0 nb1))
-  (defrole resp
-    (vars (a b c name) (na0 na1 nb0 nb1 nc0 nc1 text))
-    (trace
-      (recv
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    (uniq-orig nc0 nc1)))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 text) (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nc0 nc1)
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c)))))
-  (label 12)
-  (unrealized (0 2))
-  (origs (nc1 (0 1)) (nc0 (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 text) (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nc0 nc1)
-  (operation nonce-test (added-strand init 3) nc0 (0 2)
-    (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0 c a (pubk b)) (pubk a)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b)))))
-  (label 13)
-  (parent 12)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 nb0-0 nb1-0 text) (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 2) (0 2)) ((2 1) (0 0)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nc0 nc1 nb0-0 nb1-0)
-  (operation nonce-test (added-strand mid 2) na1 (0 0)
-    (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c)))))
-  (label 14)
-  (parent 13)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nc0 nc1 nb0 nb1 text) (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (a a) (b b)
-    (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 2) (0 2)) ((2 1) (0 0)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nc0 nc1 nb0 nb1)
-  (operation nonce-test (contracted (nb0-0 nb0) (nb1-0 nb1)) na1 (0 0)
-    (enc na0 a c (enc na1 a b (pubk c)) (pubk b))
-    (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))))
-  (label 15)
-  (parent 14)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nb0 nb1 nc0 nc1 nb0-0 nb1-0 nc0-0 nc1-0 text)
-    (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0)
-    (nc0 nc0-0) (nc1 nc1-0) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 2) (0 2)) ((2 1) (3 0))
-    ((3 1) (0 0)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nc0 nc1 nb0-0 nb1-0 nc0-0 nc1-0)
-  (operation nonce-test (added-strand resp 2) na1 (0 0)
-    (enc na0 a c (enc na1 a b (pubk c)) (pubk b))
-    (enc nb1-0 b a (enc na1 a b (pubk c)) (enc na0 nb0-0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c))))
-    ((recv
-       (enc nb1-0 b a (enc na1 a b (pubk c))
-         (enc na0 nb0-0 b c (pubk a)) (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0-0 b c (pubk a))
-          (enc nb1-0 nc0-0 c a (pubk b)) (pubk a)))))
-  (label 16)
-  (parent 14)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton nsl3
-  (vars (nc0 nc1 nb0 nb1 na0 na1 text) (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((0 1) (2 2)) ((1 0) (2 0)) ((1 2) (0 2))
-    ((2 1) (0 0)) ((2 3) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nc0 nc1 nb0 nb1 na0 na1)
-  (operation nonce-test (displaced 2 3 mid 4) nc0 (0 2)
-    (enc na1-0 nc1 c b (enc na0-0 nb0 b c (pubk a))
-      (enc nb1 nc0 c a (pubk b)) (pubk a))
-    (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c)) (pubk b)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c)))))
-  (label 17)
-  (parent 15)
-  (unrealized (2 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nc0 nc1 nb0 nb1 nc0-0 nc1-0 text) (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (a a) (b b)
-    (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 2) (0 2)) ((2 1) (3 0))
-    ((3 1) (0 0)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nc0 nc1 nb0 nb1 nc0-0 nc1-0)
-  (operation nonce-test (contracted (nb0-0 nb0) (nb1-0 nb1)) na1 (0 0)
-    (enc na0 a c (enc na1 a b (pubk c)) (pubk b))
-    (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0-0 c a (pubk b)) (pubk a))
-    (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a)))))
-  (label 18)
-  (parent 16)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars
-    (na0 na1 nb0 nb1 nc0 nc1 nb0-0 nb1-0 nc0-0 nc1-0 nb0-1 nb1-1 text)
-    (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0)
-    (nc0 nc0-0) (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-1) (nb1 nb1-1) (a a)
-    (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 0) (4 0)) ((1 2) (0 2))
-    ((2 1) (3 0)) ((3 1) (0 0)) ((4 1) (0 0)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nc0 nc1 nb0-0 nb1-0 nc0-0 nc1-0 nb0-1 nb1-1)
-  (operation nonce-test (added-strand mid 2) na1 (0 0)
-    (enc na0 a c (enc na1 a b (pubk c)) (pubk b))
-    (enc na1 nc1-0 c b (enc na0 nb0-0 b c (pubk a))
-      (enc nb1-0 nc0-0 c a (pubk b)) (pubk a))
-    (enc nb1-0 b a (enc na1 a b (pubk c)) (enc na0 nb0-0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c))))
-    ((recv
-       (enc nb1-0 b a (enc na1 a b (pubk c))
-         (enc na0 nb0-0 b c (pubk a)) (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0-0 b c (pubk a))
-          (enc nb1-0 nc0-0 c a (pubk b)) (pubk a))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-1 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-1 b c (pubk a)) (pubk c)))))
-  (label 19)
-  (parent 16)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton nsl3
-  (vars (nc0 nc1 nb0 nb1 na0 na1 text) (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 2) (2 2)) ((2 1) (0 0))
-    ((2 3) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nc0 nc1 nb0 nb1 na0 na1)
-  (operation nonce-test (displaced 3 1 init 3) nc0 (2 2)
-    (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0 c a (pubk b)) (pubk a)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c)))))
-  (label 20)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (b b) (c c) (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1)
-        (nc0 nc0) (nc1 nc1))))
-  (origs (na0 (1 0)) (na1 (1 0)) (nb0 (2 1)) (nb1 (2 1)) (nc1 (0 1))
-    (nc0 (0 1))))
-
-(defskeleton nsl3
-  (vars (nc0 nc1 nb0 nb1 nc0-0 nc1-0 na0 na1 text) (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((0 1) (3 2)) ((1 0) (3 0)) ((1 2) (0 2))
-    ((2 1) (0 0)) ((3 1) (2 0)) ((3 3) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nc0 nc1 nb0 nb1 nc0-0 nc1-0 na0 na1)
-  (operation nonce-test (displaced 2 4 mid 4) nc0 (0 2)
-    (enc na1-0 nc1 c b (enc na0-0 nb0 b c (pubk a))
-      (enc nb1 nc0 c a (pubk b)) (pubk a))
-    (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c)) (pubk b)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c)))))
-  (label 21)
-  (parent 18)
-  (unrealized (3 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0 text)
-    (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (a a) (b b)
-    (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 0) (4 0)) ((1 2) (0 2))
-    ((2 1) (3 0)) ((3 1) (0 0)) ((4 1) (0 0)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0)
-  (operation nonce-test (contracted (nb0-1 nb0) (nb1-1 nb1)) na1 (0 0)
-    (enc na0 a c (enc na1 a b (pubk c)) (pubk b))
-    (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0-0 c a (pubk b)) (pubk a))
-    (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-      (pubk c))
-    (enc nb1-0 b a (enc na1 a b (pubk c)) (enc na0 nb0-0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c)))))
-  (label 22)
-  (parent 19)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (na0 na1 nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0 text)
-    (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0)
-    (nc0 nc0) (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0)
-    (nc0 nc0) (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (a a) (b b)
-    (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 0) (4 0)) ((1 2) (0 2))
-    ((2 1) (3 0)) ((3 1) (0 0)) ((4 1) (0 0)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig na0 na1 nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0)
-  (operation nonce-test (contracted (nb0-1 nb0-0) (nb1-1 nb1-0)) na1
-    (0 0) (enc na0 a c (enc na1 a b (pubk c)) (pubk b))
-    (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0-0 c a (pubk b)) (pubk a))
-    (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-      (pubk c))
-    (enc nb1-0 b a (enc na1 a b (pubk c)) (enc na0 nb0-0 b c (pubk a))
-      (pubk c)))
-  (traces
-    ((recv
-       (enc nb1-0 b a (enc na1 a b (pubk c))
-         (enc na0 nb0-0 b c (pubk a)) (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0-0 b c (pubk a))
-          (enc nb1-0 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0-0 b c (pubk a))
-          (enc nb1-0 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0-0 (enc nb1-0 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c)))))
-  (label 23)
-  (parent 19)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (nc0 nc1 nb0 nb1 nc0-0 nc1-0 na0 na1 text) (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (3 0)) ((1 2) (3 2)) ((2 1) (0 0))
-    ((3 1) (2 0)) ((3 3) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nc0 nc1 nb0 nb1 nc0-0 nc1-0 na0 na1)
-  (operation nonce-test (displaced 4 1 init 3) nc0 (3 2)
-    (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0 c a (pubk b)) (pubk a)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c)))))
-  (label 24)
-  (parent 21)
-  (seen 20)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton nsl3
-  (vars (nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0 na0 na1 text)
-    (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((0 1) (4 2)) ((1 0) (3 0)) ((1 0) (4 0))
-    ((1 2) (0 2)) ((2 1) (0 0)) ((3 1) (0 0)) ((4 1) (2 0))
-    ((4 3) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0 na0 na1)
-  (operation nonce-test (displaced 2 5 mid 4) nc0 (0 2)
-    (enc na1-0 nc1 c b (enc na0-0 nb0 b c (pubk a))
-      (enc nb1 nc0 c a (pubk b)) (pubk a))
-    (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c)) (pubk b)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c)))))
-  (label 25)
-  (parent 22)
-  (unrealized (4 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0 na0 na1 text)
-    (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0)
-    (nc0 nc0) (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0)
-    (nc0 nc0) (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (a a) (b b)
-    (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((0 1) (4 2)) ((1 0) (2 0)) ((1 0) (4 0))
-    ((1 2) (0 2)) ((2 1) (3 0)) ((3 1) (0 0)) ((4 1) (0 0))
-    ((4 3) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0 na0 na1)
-  (operation nonce-test (displaced 4 5 mid 4) nc0 (0 2)
-    (enc na1-0 nc1 c b (enc na0-0 nb0-0 b c (pubk a))
-      (enc nb1-0 nc0 c a (pubk b)) (pubk a))
-    (enc nb0-0 (enc nb1-0 nc0 c a (pubk b)) (enc nc1 (pubk c))
-      (pubk b)))
-  (traces
-    ((recv
-       (enc nb1-0 b a (enc na1 a b (pubk c))
-         (enc na0 nb0-0 b c (pubk a)) (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0-0 b c (pubk a))
-          (enc nb1-0 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0-0 b c (pubk a))
-          (enc nb1-0 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0-0 (enc nb1-0 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c)))
-      (recv
-        (enc nb0-0 (enc nb1-0 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c)))))
-  (label 26)
-  (parent 23)
-  (unrealized (4 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0 na0 na1 text)
-    (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (3 0)) ((1 0) (4 0)) ((1 2) (4 2))
-    ((2 1) (0 0)) ((3 1) (0 0)) ((4 1) (2 0)) ((4 3) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0 na0 na1)
-  (operation nonce-test (displaced 5 1 init 3) nc0 (4 2)
-    (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-      (enc nb1 nc0 c a (pubk b)) (pubk a)))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c)))))
-  (label 27)
-  (parent 25)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nsl3
-  (vars (nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0 na0 na1 text)
-    (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0)
-    (nc0 nc0) (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0)
-    (nc0 nc0) (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (a a) (b b)
-    (c c))
-  (defstrand resp 2 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0-0)
-    (nc1 nc1-0) (a a) (b b) (c c))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 0) (4 0)) ((1 2) (4 2))
-    ((2 1) (3 0)) ((3 1) (0 0)) ((4 1) (0 0)) ((4 3) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nc0 nc1 nb0 nb1 nc0-0 nc1-0 nb0-0 nb1-0 na0 na1)
-  (operation nonce-test (displaced 5 1 init 3) nc0 (4 2)
-    (enc na1 nc1 c b (enc na0 nb0-0 b c (pubk a))
-      (enc nb1-0 nc0 c a (pubk b)) (pubk a)))
-  (traces
-    ((recv
-       (enc nb1-0 b a (enc na1 a b (pubk c))
-         (enc na0 nb0-0 b c (pubk a)) (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0-0 b c (pubk a))
-          (enc nb1-0 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0-0 b c (pubk a))
-          (enc nb1-0 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0-0 (enc nb1-0 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c))))
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1-0 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0-0 c a (pubk b)) (pubk a))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c)))
-      (recv
-        (enc nb0-0 (enc nb1-0 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c)))))
-  (label 28)
-  (parent 26)
-  (seen 29)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton nsl3
-  (vars (nc0 nc1 nb0 nb1 nb0-0 nb1-0 na0 na1 text) (a b c name))
-  (defstrand resp 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand init 3 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (defstrand mid 2 (na0 na0) (na1 na1) (nb0 nb0-0) (nb1 nb1-0) (a a)
-    (b b) (c c))
-  (defstrand mid 4 (na0 na0) (na1 na1) (nb0 nb0) (nb1 nb1) (nc0 nc0)
-    (nc1 nc1) (a a) (b b) (c c))
-  (precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 0) (3 0)) ((1 2) (3 2))
-    ((2 1) (0 0)) ((3 1) (0 0)) ((3 3) (0 2)))
-  (non-orig (privk a) (privk b) (privk c))
-  (uniq-orig nc0 nc1 nb0 nb1 nb0-0 nb1-0 na0 na1)
-  (operation generalization deleted (2 0))
-  (traces
-    ((recv
-       (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-         (pubk c)))
-      (send
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (recv (enc nc0 (enc nc1 (pubk c)) (pubk c))))
-    ((send (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (recv
-        (enc na1 nc1 c b (enc na0 nb0 b c (pubk a))
-          (enc nb1 nc0 c a (pubk b)) (pubk a)))
-      (send
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1-0 b a (enc na1 a b (pubk c))
-          (enc na0 nb0-0 b c (pubk a)) (pubk c))))
-    ((recv (enc na0 a c (enc na1 a b (pubk c)) (pubk b)))
-      (send
-        (enc nb1 b a (enc na1 a b (pubk c)) (enc na0 nb0 b c (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb0 (enc nb1 nc0 c a (pubk b)) (enc nc1 (pubk c))
-          (pubk b))) (send (enc nc0 (enc nc1 (pubk c)) (pubk c)))))
-  (label 29)
-  (parent 27)
-  (seen 20)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
diff --git a/tst/nsl4.lisp b/tst/nsl4.lisp
deleted file mode 100644
--- a/tst/nsl4.lisp
+++ /dev/null
@@ -1,85 +0,0 @@
-(defprotocol nsl4 basic
-  (defrole init
-    (vars (a b c d name)
-      (na0 na1 na2 nb0 nb1 nb2 nc0 nc1 nc2 nd0 nd1 nd2 text))
-    (trace
-      (send
-        (enc na0 a c d (enc na1 a b d (pubk c)) (enc na2 a b c (pubk d))
-          (pubk b)))
-      (recv
-        (enc na2 nd0 d b c (enc na0 nb2 b c d (pubk a))
-          (enc na1 nc1 c b d (pubk a)) (enc nb0 nc2 c d a (pubk b))
-          (enc nb1 nd1 d a c (pubk b)) (enc nc0 nd2 d a b (pubk c))
-          (pubk a)))
-      (send
-        (enc nb2 (enc nb0 nc2 c d a (pubk b))
-          (enc nb1 nd1 d a c (pubk b)) (enc nc0 nd2 d a b (pubk c))
-          (enc nc1 (pubk c)) (enc nd0 (pubk d)) (pubk b))))
-    (uniq-orig na0 na1 na2))
-  (defrole resp1
-    (vars (a b c d name)
-      (na0 na1 na2 nb0 nb1 nb2 nc0 nc1 nc2 nd0 nd1 nd2 text))
-    (trace
-      (recv
-        (enc na0 a c d (enc na1 a b d (pubk c)) (enc na2 a b c (pubk d))
-          (pubk b)))
-      (send
-        (enc nb0 b d a (enc na1 a b d (pubk c)) (enc na2 a b c (pubk d))
-          (enc nb1 b c a (pubk d)) (enc na0 nb2 b c d (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb2 (enc nb0 nc2 c d a (pubk b))
-          (enc nb1 nd1 d a c (pubk b)) (enc nc0 nd2 d a b (pubk c))
-          (enc nc1 (pubk c)) (enc nd0 (pubk d)) (pubk b)))
-      (send
-        (enc nc2 (enc nc0 nd2 d a b (pubk c)) (enc nc1 (pubk c))
-          (enc nd0 (pubk d)) (enc nd1 (pubk d)) (pubk c))))
-    (uniq-orig nb0 nb1 nb2))
-  (defrole resp2
-    (vars (a b c d name)
-      (na0 na1 na2 nb0 nb1 nb2 nc0 nc1 nc2 nd0 nd1 nd2 text))
-    (trace
-      (recv
-        (enc nb0 b d a (enc na1 a b d (pubk c)) (enc na2 a b c (pubk d))
-          (enc nb1 b c a (pubk d)) (enc na0 nb2 b c d (pubk a))
-          (pubk c)))
-      (send
-        (enc nc0 c a b (enc na2 a b c (pubk d)) (enc nb1 b c a (pubk d))
-          (enc na0 nb2 b c d (pubk a)) (enc na1 nc1 c b d (pubk a))
-          (enc nb0 nc2 c d a (pubk b)) (pubk d)))
-      (recv
-        (enc nc2 (enc nc0 nd2 d a b (pubk c)) (enc nc1 (pubk c))
-          (enc nd0 (pubk d)) (enc nd1 (pubk d)) (pubk c)))
-      (send (enc nd2 (enc nd0 (pubk d)) (enc nd1 (pubk d)) (pubk d))))
-    (uniq-orig nc0 nc1 nc2))
-  (defrole resp3
-    (vars (a b c d name)
-      (na0 na1 na2 nb0 nb1 nb2 nc0 nc1 nc2 nd0 nd1 nd2 text))
-    (trace
-      (recv
-        (enc nc0 c a b (enc na2 a b c (pubk d)) (enc nb1 b c a (pubk d))
-          (enc na0 nb2 b c d (pubk a)) (enc na1 nc1 c b d (pubk a))
-          (enc nb0 nc2 c d a (pubk b)) (pubk d)))
-      (send
-        (enc na2 nd0 d b c (enc na0 nb2 b c d (pubk a))
-          (enc na1 nc1 c b d (pubk a)) (enc nb0 nc2 c d a (pubk b))
-          (enc nb1 nd1 d a c (pubk b)) (enc nc0 nd2 d a b (pubk c))
-          (pubk a)))
-      (recv (enc nd2 (enc nd0 (pubk d)) (enc nd1 (pubk d)) (pubk d))))
-    (uniq-orig nd0 nd1 nd2)))
-
-(defskeleton nsl4 (vars (a b c d name))
-  (defstrand init 3 (a a) (b b) (c c) (d d))
-  (non-orig (privk a) (privk b) (privk c) (privk d)))
-
-(defskeleton nsl4 (vars (a b c d name))
-  (defstrand resp1 4 (a a) (b b) (c c) (d d))
-  (non-orig (privk a) (privk b) (privk c) (privk d)))
-
-(defskeleton nsl4 (vars (a b c d name))
-  (defstrand resp2 4 (a a) (b b) (c c) (d d))
-  (non-orig (privk a) (privk b) (privk c) (privk d)))
-
-(defskeleton nsl4 (vars (a b c d name))
-  (defstrand resp3 3 (a a) (b b) (c c) (d d))
-  (non-orig (privk a) (privk b) (privk c) (privk d)))
diff --git a/tst/nsl4cm1.lisp b/tst/nsl4cm1.lisp
deleted file mode 100644
--- a/tst/nsl4cm1.lisp
+++ /dev/null
@@ -1,49 +0,0 @@
-(herald "Four Party Needham-Schroeder-Lowe Protocol")
-
-(defprotocol nsl4cm basic
-   (defrole init
-      (vars (a b c d name) (na nb nc nd text))
-      (trace
-         (send (enc a c d na (pubk b)))
-	 (recv (enc b c d na nb nc nd (pubk a)))
-	 (send (enc nb nc nd (pubk b)))))
-   (defrole resp1
-      (vars (a b c d name) (na nb nc nd text))
-      (trace
-         (recv (enc a c d na (pubk b)))
-	 (send (enc a b d na nb (pubk c)))
-	 (recv (enc nb nc nd (pubk b)))
-	 (send (enc nc nd (pubk c)))))
-   (defrole resp2
-      (vars (a b c d name) (na nb nc nd text))
-      (trace
-         (recv (enc a b d na nb (pubk c)))
-	 (send (enc a b c na nb nc (pubk d)))
-	 (recv (enc nc nd (pubk c)))
-	 (send (enc nd (pubk d)))))
-   (defrole resp3
-      (vars (a b c d name) (na nb nc nd text))
-      (trace
-         (recv (enc a b c na nb nc (pubk d)))
-	 (send (enc b c d na nb nc nd (pubk a)))
-	 (recv (enc nd (pubk d))))))
-
-(defskeleton nsl4cm (vars (a b c d name) (na text))
-  (defstrand init 3 (a a) (b b) (c c) (d d) (na na))
-   (non-orig (privk a) (privk b) (privk c) (privk d))
-   (uniq-orig na))
-
-(comment (defskeleton nsl4cm (vars (a b c d name) (nb text))
-   (defstrand resp1 4 (a a) (b b) (c c) (d d) (nb nb))
-   (non-orig (privk a) (privk b) (privk c) (privk d))
-   (uniq-orig nb))
-
-(defskeleton nsl4cm (vars (a b c d name) (nc text))
-   (defstrand resp2 4 (a a) (b b) (c c) (d d) (nc nc))
-   (non-orig (privk a) (privk b) (privk c) (privk d))
-   (uniq-orig nc))
-
-(defskeleton nsl4cm (vars (a b c d name) (nd text))
-   (defstrand resp3 3 (a a) (b b) (c c) (d d) (nd nd))
-   (non-orig (privk a) (privk b) (privk c) (privk d))
-   (uniq-orig nd)))
diff --git a/tst/nsl4resp2.lisp b/tst/nsl4resp2.lisp
deleted file mode 100644
--- a/tst/nsl4resp2.lisp
+++ /dev/null
@@ -1,73 +0,0 @@
-(defprotocol nsl4 basic
-  (defrole init
-    (vars (a b c d name)
-      (na0 na1 na2 nb0 nb1 nb2 nc0 nc1 nc2 nd0 nd1 nd2 text))
-    (trace
-      (send
-        (enc na0 a c d (enc na1 a b d (pubk c)) (enc na2 a b c (pubk d))
-          (pubk b)))
-      (recv
-        (enc na2 nd0 d b c (enc na0 nb2 b c d (pubk a))
-          (enc na1 nc1 c b d (pubk a)) (enc nb0 nc2 c d a (pubk b))
-          (enc nb1 nd1 d a c (pubk b)) (enc nc0 nd2 d a b (pubk c))
-          (pubk a)))
-      (send
-        (enc nb2 (enc nb0 nc2 c d a (pubk b))
-          (enc nb1 nd1 d a c (pubk b)) (enc nc0 nd2 d a b (pubk c))
-          (enc nc1 (pubk c)) (enc nd0 (pubk d)) (pubk b))))
-    (uniq-orig na0 na1 na2))
-  (defrole resp1
-    (vars (a b c d name)
-      (na0 na1 na2 nb0 nb1 nb2 nc0 nc1 nc2 nd0 nd1 nd2 text))
-    (trace
-      (recv
-        (enc na0 a c d (enc na1 a b d (pubk c)) (enc na2 a b c (pubk d))
-          (pubk b)))
-      (send
-        (enc nb0 b d a (enc na1 a b d (pubk c)) (enc na2 a b c (pubk d))
-          (enc nb1 b c a (pubk d)) (enc na0 nb2 b c d (pubk a))
-          (pubk c)))
-      (recv
-        (enc nb2 (enc nb0 nc2 c d a (pubk b))
-          (enc nb1 nd1 d a c (pubk b)) (enc nc0 nd2 d a b (pubk c))
-          (enc nc1 (pubk c)) (enc nd0 (pubk d)) (pubk b)))
-      (send
-        (enc nc2 (enc nc0 nd2 d a b (pubk c)) (enc nc1 (pubk c))
-          (enc nd0 (pubk d)) (enc nd1 (pubk d)) (pubk c))))
-    (uniq-orig nb0 nb1 nb2))
-  (defrole resp2
-    (vars (a b c d name)
-      (na0 na1 na2 nb0 nb1 nb2 nc0 nc1 nc2 nd0 nd1 nd2 text))
-    (trace
-      (recv
-        (enc nb0 b d a (enc na1 a b d (pubk c)) (enc na2 a b c (pubk d))
-          (enc nb1 b c a (pubk d)) (enc na0 nb2 b c d (pubk a))
-          (pubk c)))
-      (send
-        (enc nc0 c a b (enc na2 a b c (pubk d)) (enc nb1 b c a (pubk d))
-          (enc na0 nb2 b c d (pubk a)) (enc na1 nc1 c b d (pubk a))
-          (enc nb0 nc2 c d a (pubk b)) (pubk d)))
-      (recv
-        (enc nc2 (enc nc0 nd2 d a b (pubk c)) (enc nc1 (pubk c))
-          (enc nd0 (pubk d)) (enc nd1 (pubk d)) (pubk c)))
-      (send (enc nd2 (enc nd0 (pubk d)) (enc nd1 (pubk d)) (pubk d))))
-    (uniq-orig nc0 nc1 nc2))
-  (defrole resp3
-    (vars (a b c d name)
-      (na0 na1 na2 nb0 nb1 nb2 nc0 nc1 nc2 nd0 nd1 nd2 text))
-    (trace
-      (recv
-        (enc nc0 c a b (enc na2 a b c (pubk d)) (enc nb1 b c a (pubk d))
-          (enc na0 nb2 b c d (pubk a)) (enc na1 nc1 c b d (pubk a))
-          (enc nb0 nc2 c d a (pubk b)) (pubk d)))
-      (send
-        (enc na2 nd0 d b c (enc na0 nb2 b c d (pubk a))
-          (enc na1 nc1 c b d (pubk a)) (enc nb0 nc2 c d a (pubk b))
-          (enc nb1 nd1 d a c (pubk b)) (enc nc0 nd2 d a b (pubk c))
-          (pubk a)))
-      (recv (enc nd2 (enc nd0 (pubk d)) (enc nd1 (pubk d)) (pubk d))))
-    (uniq-orig nd0 nd1 nd2)))
-
-(defskeleton nsl4 (vars (a b c d name))
-  (defstrand resp2 4 (a a) (b b) (c c) (d d))
-  (non-orig (privk a) (privk b) (privk c) (privk d)))
diff --git a/tst/nsl5.lisp b/tst/nsl5.lisp
deleted file mode 100644
--- a/tst/nsl5.lisp
+++ /dev/null
@@ -1,149 +0,0 @@
-(herald nsl5 (bound 10))
-
-(defprotocol nsl5 basic
-  (defrole init
-    (vars (a b c d e name)
-      (na0 na1 na2 na3 nb0 nb1 nb2 nb3 nc0 nc1 nc2 nc3 nd0 nd1 nd2 nd3
-        ne0 ne1 ne2 ne3 text))
-    (trace
-      (send
-        (enc na0 a c d e (enc na1 a b d e (pubk c))
-          (enc na2 a b c e (pubk d)) (enc na3 a b c d (pubk e))
-          (pubk b)))
-      (recv
-        (enc na3 ne0 e b c d (enc na0 nb3 b c d e (pubk a))
-          (enc na1 nc2 c b d e (pubk a)) (enc na2 nd1 d e b c (pubk a))
-          (enc nb0 nc3 c d e a (pubk b)) (enc nb1 nd2 d c e a (pubk b))
-          (enc nb2 ne1 e a c d (pubk b)) (enc nc0 nd3 d e a b (pubk c))
-          (enc nc1 ne2 e a b d (pubk c)) (enc nd0 ne3 e a b c (pubk d))
-          (pubk a)))
-      (send
-        (enc nb3 (enc nb0 nc3 c d e a (pubk b))
-          (enc nb1 nd2 d c e a (pubk b)) (enc nb2 ne1 e a c d (pubk b))
-          (enc nc0 nd3 d e a b (pubk c)) (enc nc1 ne2 e a b d (pubk c))
-          (enc nc2 (pubk c)) (enc nd0 ne3 e a b c (pubk d))
-          (enc nd1 (pubk d)) (enc ne0 (pubk e)) (pubk b))))
-    (uniq-orig na0 na1 na2 na3))
-  (defrole resp1
-    (vars (a b c d e name)
-      (na0 na1 na2 na3 nb0 nb1 nb2 nb3 nc0 nc1 nc2 nc3 nd0 nd1 nd2 nd3
-        ne0 ne1 ne2 ne3 text))
-    (trace
-      (recv
-        (enc na0 a c d e (enc na1 a b d e (pubk c))
-          (enc na2 a b c e (pubk d)) (enc na3 a b c d (pubk e))
-          (pubk b)))
-      (send
-        (enc nb0 b d e a (enc na1 a b d e (pubk c))
-          (enc na2 a b c e (pubk d)) (enc nb1 b c e a (pubk d))
-          (enc na3 a b c d (pubk e)) (enc nb2 b c d a (pubk e))
-          (enc na0 nb3 b c d e (pubk a)) (pubk c)))
-      (recv
-        (enc nb3 (enc nb0 nc3 c d e a (pubk b))
-          (enc nb1 nd2 d c e a (pubk b)) (enc nb2 ne1 e a c d (pubk b))
-          (enc nc0 nd3 d e a b (pubk c)) (enc nc1 ne2 e a b d (pubk c))
-          (enc nc2 (pubk c)) (enc nd0 ne3 e a b c (pubk d))
-          (enc nd1 (pubk d)) (enc ne0 (pubk e)) (pubk b)))
-      (send
-        (enc nc3 (enc nc0 nd3 d e a b (pubk c))
-          (enc nc1 ne2 e a b d (pubk c)) (enc nc2 (pubk c))
-          (enc nd0 ne3 e a b c (pubk d)) (enc nd1 (pubk d))
-          (enc nd2 (pubk d)) (enc ne0 (pubk e)) (enc ne1 (pubk e))
-          (pubk c))))
-    (uniq-orig nb0 nb1 nb2 nb3))
-  (defrole resp2
-    (vars (a b c d e name)
-      (na0 na1 na2 na3 nb0 nb1 nb2 nb3 nc0 nc1 nc2 nc3 nd0 nd1 nd2 nd3
-        ne0 ne1 ne2 ne3 text))
-    (trace
-      (recv
-        (enc nb0 b d e a (enc na1 a b d e (pubk c))
-          (enc na2 a b c e (pubk d)) (enc nb1 b c e a (pubk d))
-          (enc na3 a b c d (pubk e)) (enc nb2 b c d a (pubk e))
-          (enc na0 nb3 b c d e (pubk a)) (pubk c)))
-      (send
-        (enc nc0 c e a b (enc na2 a b c e (pubk d))
-          (enc nb1 b c e a (pubk d)) (enc na3 a b c d (pubk e))
-          (enc nb2 b c d a (pubk e)) (enc nc1 c d a b (pubk e))
-          (enc na0 nb3 b c d e (pubk a)) (enc na1 nc2 c b d e (pubk a))
-          (enc nb0 nc3 c d e a (pubk b)) (pubk d)))
-      (recv
-        (enc nc3 (enc nc0 nd3 d e a b (pubk c))
-          (enc nc1 ne2 e a b d (pubk c)) (enc nc2 (pubk c))
-          (enc nd0 ne3 e a b c (pubk d)) (enc nd1 (pubk d))
-          (enc nd2 (pubk d)) (enc ne0 (pubk e)) (enc ne1 (pubk e))
-          (pubk c)))
-      (send
-        (enc nd3 (enc nd0 ne3 e a b c (pubk d)) (enc nd1 (pubk d))
-          (enc nd2 (pubk d)) (enc ne0 (pubk e)) (enc ne1 (pubk e))
-          (enc ne2 (pubk e)) (pubk d))))
-    (uniq-orig nc0 nc1 nc2 nc3))
-  (defrole resp3
-    (vars (a b c d e name)
-      (na0 na1 na2 na3 nb0 nb1 nb2 nb3 nc0 nc1 nc2 nc3 nd0 nd1 nd2 nd3
-        ne0 ne1 ne2 ne3 text))
-    (trace
-      (recv
-        (enc nc0 c e a b (enc na2 a b c e (pubk d))
-          (enc nb1 b c e a (pubk d)) (enc na3 a b c d (pubk e))
-          (enc nb2 b c d a (pubk e)) (enc nc1 c d a b (pubk e))
-          (enc na0 nb3 b c d e (pubk a)) (enc na1 nc2 c b d e (pubk a))
-          (enc nb0 nc3 c d e a (pubk b)) (pubk d)))
-      (send
-        (enc nd0 d a b c (enc na3 a b c d (pubk e))
-          (enc nb2 b c d a (pubk e)) (enc nc1 c d a b (pubk e))
-          (enc na0 nb3 b c d e (pubk a)) (enc na1 nc2 c b d e (pubk a))
-          (enc na2 nd1 d e b c (pubk a)) (enc nb0 nc3 c d e a (pubk b))
-          (enc nb1 nd2 d c e a (pubk b)) (enc nc0 nd3 d e a b (pubk c))
-          (pubk e)))
-      (recv
-        (enc nd3 (enc nd0 ne3 e a b c (pubk d)) (enc nd1 (pubk d))
-          (enc nd2 (pubk d)) (enc ne0 (pubk e)) (enc ne1 (pubk e))
-          (enc ne2 (pubk e)) (pubk d)))
-      (send
-        (enc ne3 (enc ne0 (pubk e)) (enc ne1 (pubk e))
-          (enc ne2 (pubk e)) (pubk e))))
-    (uniq-orig nd0 nd1 nd2 nd3))
-  (defrole resp4
-    (vars (a b c d e name)
-      (na0 na1 na2 na3 nb0 nb1 nb2 nb3 nc0 nc1 nc2 nc3 nd0 nd1 nd2 nd3
-        ne0 ne1 ne2 ne3 text))
-    (trace
-      (recv
-        (enc nd0 d a b c (enc na3 a b c d (pubk e))
-          (enc nb2 b c d a (pubk e)) (enc nc1 c d a b (pubk e))
-          (enc na0 nb3 b c d e (pubk a)) (enc na1 nc2 c b d e (pubk a))
-          (enc na2 nd1 d e b c (pubk a)) (enc nb0 nc3 c d e a (pubk b))
-          (enc nb1 nd2 d c e a (pubk b)) (enc nc0 nd3 d e a b (pubk c))
-          (pubk e)))
-      (send
-        (enc na3 ne0 e b c d (enc na0 nb3 b c d e (pubk a))
-          (enc na1 nc2 c b d e (pubk a)) (enc na2 nd1 d e b c (pubk a))
-          (enc nb0 nc3 c d e a (pubk b)) (enc nb1 nd2 d c e a (pubk b))
-          (enc nb2 ne1 e a c d (pubk b)) (enc nc0 nd3 d e a b (pubk c))
-          (enc nc1 ne2 e a b d (pubk c)) (enc nd0 ne3 e a b c (pubk d))
-          (pubk a)))
-      (recv
-        (enc ne3 (enc ne0 (pubk e)) (enc ne1 (pubk e))
-          (enc ne2 (pubk e)) (pubk e))))
-    (uniq-orig ne0 ne1 ne2 ne3)))
-
-(defskeleton nsl5 (vars (a b c d e name))
-  (defstrand init 3 (a a) (b b) (c c) (d d) (e e))
-  (non-orig (privk a) (privk b) (privk c) (privk d) (privk e)))
-
-(defskeleton nsl5 (vars (a b c d e name))
-  (defstrand resp1 4 (a a) (b b) (c c) (d d) (e e))
-  (non-orig (privk a) (privk b) (privk c) (privk d) (privk e)))
-
-(defskeleton nsl5 (vars (a b c d e name))
-  (defstrand resp2 4 (a a) (b b) (c c) (d d) (e e))
-  (non-orig (privk a) (privk b) (privk c) (privk d) (privk e)))
-
-(defskeleton nsl5 (vars (a b c d e name))
-  (defstrand resp3 4 (a a) (b b) (c c) (d d) (e e))
-  (non-orig (privk a) (privk b) (privk c) (privk d) (privk e)))
-
-(defskeleton nsl5 (vars (a b c d e name))
-  (defstrand resp4 3 (a a) (b b) (c c) (d d) (e e))
-  (non-orig (privk a) (privk b) (privk c) (privk d) (privk e)))
diff --git a/tst/nsl5i.lisp b/tst/nsl5i.lisp
deleted file mode 100644
--- a/tst/nsl5i.lisp
+++ /dev/null
@@ -1,64 +0,0 @@
-(defprotocol nsl5i basic
-  (defrole init
-    (vars (a name) (b name) (c name) (d name) (e name) (na text) (nb text) (nc text) (nd text) (ne text))
-    (trace
-      (send (enc (cat a b c d e (enc (enc (enc na (pubk e)) (pubk d)) (pubk c))) (pubk b)))
-      (recv (enc (cat a b c d e na (enc nb (pubk a)) (enc (enc nc (pubk b)) (pubk a)) (enc (enc (enc nd (pubk c)) (pubk b)) (pubk a)) (enc (enc (enc ne (pubk d)) (pubk c)) (pubk b))) (pubk a)))
-      (send (enc (cat nb (enc nc (pubk b)) (enc (enc nd (pubk c)) (pubk b)) (enc (enc (enc ne (pubk d)) (pubk c)) (pubk b))) (pubk b))))
-      (uniq-orig na))
-  (defrole resp1
-    (vars (a name) (b name) (c name) (d name) (e name) (na text) (nb text) (nc text) (nd text) (ne text))
-    (trace
-      (recv (enc (cat a b c d e (enc (enc (enc na (pubk e)) (pubk d)) (pubk c))) (pubk b)))
-      (send (enc (cat a b c d e (enc (enc (enc na (pubk e)) (pubk d)) (pubk c)) (enc (enc (enc nb (pubk a)) (pubk e)) (pubk d))) (pubk c)))
-      (recv (enc (cat nb (enc nc (pubk b)) (enc (enc nd (pubk c)) (pubk b)) (enc (enc (enc ne (pubk d)) (pubk c)) (pubk b))) (pubk b)))
-      (send (enc (cat nc (enc nd (pubk c)) (enc (enc ne (pubk d)) (pubk c))) (pubk c))))
-      (uniq-orig nb))
-  (defrole resp2
-    (vars (a name) (b name) (c name) (d name) (e name) (na text) (nb text) (nc text) (nd text) (ne text))
-    (trace
-      (recv (enc (cat a b c d e (enc (enc (enc na (pubk e)) (pubk d)) (pubk c)) (enc (enc (enc nb (pubk a)) (pubk e)) (pubk d))) (pubk c)))
-      (send (enc (cat a b c d e (enc (enc na (pubk e)) (pubk d)) (enc (enc (enc nb (pubk a)) (pubk e)) (pubk d)) (enc (enc (enc nc (pubk b)) (pubk a)) (pubk e))) (pubk d)))
-      (recv (enc (cat nc (enc nd (pubk c)) (enc (enc ne (pubk d)) (pubk c))) (pubk c)))
-      (send (enc (cat nd (enc ne (pubk d))) (pubk d))))
-      (uniq-orig nc))
-  (defrole resp3
-    (vars (a name) (b name) (c name) (d name) (e name) (na text) (nb text) (nc text) (nd text) (ne text))
-    (trace
-      (recv (enc (cat a b c d e (enc (enc na (pubk e)) (pubk d)) (enc (enc (enc nb (pubk a)) (pubk e)) (pubk d)) (enc (enc (enc nc (pubk b)) (pubk a)) (pubk e))) (pubk d)))
-      (send (enc (cat a b c d e (enc na (pubk e)) (enc (enc nb (pubk a)) (pubk e)) (enc (enc (enc nc (pubk b)) (pubk a)) (pubk e)) (enc (enc (enc nd (pubk c)) (pubk b)) (pubk a))) (pubk e)))
-      (recv (enc (cat nd (enc ne (pubk d))) (pubk d)))
-      (send (enc ne (pubk e))))
-      (uniq-orig nd))
-  (defrole resp4
-    (vars (a name) (b name) (c name) (d name) (e name) (na text) (nb text) (nc text) (nd text) (ne text))
-    (trace
-      (recv (enc (cat a b c d e (enc na (pubk e)) (enc (enc nb (pubk a)) (pubk e)) (enc (enc (enc nc (pubk b)) (pubk a)) (pubk e)) (enc (enc (enc nd (pubk c)) (pubk b)) (pubk a))) (pubk e)))
-      (send (enc (cat a b c d e na (enc nb (pubk a)) (enc (enc nc (pubk b)) (pubk a)) (enc (enc (enc nd (pubk c)) (pubk b)) (pubk a)) (enc (enc (enc ne (pubk d)) (pubk c)) (pubk b))) (pubk a)))
-      (recv (enc ne (pubk e))))
-      (uniq-orig ne)))
-
-(defskeleton nsl5i
-  (vars (a name) (b name) (c name) (d name) (e name) (na text) (nb text) (nc text) (nd text) (ne text))
-  (defstrand init 3 (a a) (b b) (c c) (d d) (e e))
-  (non-orig (privk a) (privk b) (privk c) (privk d) (privk e)))
-
-(defskeleton nsl5i
-  (vars (a name) (b name) (c name) (d name) (e name) (na text) (nb text) (nc text) (nd text) (ne text))
-  (defstrand resp1 4 (a a) (b b) (c c) (d d) (e e))
-  (non-orig (privk a) (privk b) (privk c) (privk d) (privk e)))
-
-(defskeleton nsl5i
-  (vars (a name) (b name) (c name) (d name) (e name) (na text) (nb text) (nc text) (nd text) (ne text))
-  (defstrand resp2 4 (a a) (b b) (c c) (d d) (e e))
-  (non-orig (privk a) (privk b) (privk c) (privk d) (privk e)))
-
-(defskeleton nsl5i
-  (vars (a name) (b name) (c name) (d name) (e name) (na text) (nb text) (nc text) (nd text) (ne text))
-  (defstrand resp3 4 (a a) (b b) (c c) (d d) (e e))
-  (non-orig (privk a) (privk b) (privk c) (privk d) (privk e)))
-
-(defskeleton nsl5i
-  (vars (a name) (b name) (c name) (d name) (e name) (na text) (nb text) (nc text) (nd text) (ne text))
-  (defstrand resp4 3 (a a) (b b) (c c) (d d) (e e))
-  (non-orig (privk a) (privk b) (privk c) (privk d) (privk e)))
diff --git a/tst/nslsk.scm b/tst/nslsk.scm
deleted file mode 100644
--- a/tst/nslsk.scm
+++ /dev/null
@@ -1,51 +0,0 @@
-(herald "Needham-Schroeder-Lowe Protocol with symmetric encryption")
-
-(defprotocol nslsk basic
-  (defrole init (vars (a b name) (n text) (k skey) (t text))
-    (trace
-     (send (enc n a (pubk b)))
-     (recv (enc n k b (pubk a)))
-     (send (enc t k))))
-  (defrole resp (vars (b a name) (n text) (k skey) (t text))
-    (trace
-     (recv (enc n a (pubk b)))
-     (send (enc n k b (pubk a)))
-     (recv (enc t k)))))
-
-(defskeleton nslsk
-  (vars (a name) (k skey))
-  (defstrand resp 3 (a a) (k k))
-  (non-orig (privk a))
-  (uniq-orig k))
-
-(defskeleton nslsk
-  (vars (b name) (n text))
-  (defstrand init 3 (b b) (n n))
-  (non-orig (privk b))
-  (uniq-orig n))
-
-;; Use a tag as a term.
-
-(defprotocol nslsk-tag-term basic
-  (defrole init (vars (a b name) (n text) (k skey))
-    (trace
-     (send (enc n a (pubk b)))
-     (recv (enc n k b (pubk a)))
-     (send (enc "t" k))))
-  (defrole resp (vars (b a name) (n text) (k skey))
-    (trace
-     (recv (enc n a (pubk b)))
-     (send (enc n k b (pubk a)))
-     (recv (enc "t" k)))))
-
-(defskeleton nslsk-tag-term
-  (vars (a name) (k skey))
-  (defstrand resp 3 (a a) (k k))
-  (non-orig (privk a))
-  (uniq-orig k))
-
-(defskeleton nslsk-tag-term
-  (vars (b name) (n text))
-  (defstrand init 3 (b b) (n n))
-  (non-orig (privk b))
-  (uniq-orig n))
diff --git a/tst/nslsk.tst b/tst/nslsk.tst
deleted file mode 100644
--- a/tst/nslsk.tst
+++ /dev/null
@@ -1,254 +0,0 @@
-(herald "Needham-Schroeder-Lowe Protocol with symmetric encryption")
-
-(comment "CPSA 2.5.4")
-(comment "All input read from nslsk.scm")
-
-(defprotocol nslsk basic
-  (defrole init
-    (vars (a b name) (n text) (k skey) (t text))
-    (trace (send (enc n a (pubk b))) (recv (enc n k b (pubk a)))
-      (send (enc t k))))
-  (defrole resp
-    (vars (b a name) (n text) (k skey) (t text))
-    (trace (recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc t k)))))
-
-(defskeleton nslsk
-  (vars (n t text) (a b name) (k skey))
-  (defstrand resp 3 (n n) (t t) (b b) (a a) (k k))
-  (non-orig (privk a))
-  (uniq-orig k)
-  (traces
-    ((recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc t k))))
-  (label 0)
-  (unrealized (0 2))
-  (origs (k (0 1)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton nslsk
-  (vars (n t n-0 text) (a b a-0 b-0 name) (k skey))
-  (defstrand resp 3 (n n) (t t) (b b) (a a) (k k))
-  (defstrand init 3 (n n-0) (t t) (a a-0) (b b-0) (k k))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 3) (enc t k) (0 2))
-  (traces
-    ((recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc t k)))
-    ((send (enc n-0 a-0 (pubk b-0))) (recv (enc n-0 k b-0 (pubk a-0)))
-      (send (enc t k))))
-  (label 1)
-  (parent 0)
-  (unrealized (1 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nslsk
-  (vars (n t text) (a b name) (k skey))
-  (defstrand resp 3 (n n) (t t) (b b) (a a) (k k))
-  (deflistener k)
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig k)
-  (operation encryption-test (added-listener k) (enc t k) (0 2))
-  (traces
-    ((recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc t k))) ((recv k) (send k)))
-  (label 2)
-  (parent 0)
-  (unrealized (1 0))
-  (comment "empty cohort"))
-
-(defskeleton nslsk
-  (vars (n t text) (a b name) (k skey))
-  (defstrand resp 3 (n n) (t t) (b b) (a a) (k k))
-  (defstrand init 3 (n n) (t t) (a a) (b b) (k k))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (n-0 n)) k (1 1)
-    (enc n k b (pubk a)))
-  (traces
-    ((recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc t k)))
-    ((send (enc n a (pubk b))) (recv (enc n k b (pubk a)))
-      (send (enc t k))))
-  (label 3)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (k k) (b b) (n n) (t t))))
-  (origs (k (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol nslsk basic
-  (defrole init
-    (vars (a b name) (n text) (k skey) (t text))
-    (trace (send (enc n a (pubk b))) (recv (enc n k b (pubk a)))
-      (send (enc t k))))
-  (defrole resp
-    (vars (b a name) (n text) (k skey) (t text))
-    (trace (recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc t k)))))
-
-(defskeleton nslsk
-  (vars (n t text) (b a name) (k skey))
-  (defstrand init 3 (n n) (t t) (a a) (b b) (k k))
-  (non-orig (privk b))
-  (uniq-orig n)
-  (traces
-    ((send (enc n a (pubk b))) (recv (enc n k b (pubk a)))
-      (send (enc t k))))
-  (label 4)
-  (unrealized (0 1))
-  (origs (n (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nslsk
-  (vars (n t text) (b a name) (k k-0 skey))
-  (defstrand init 3 (n n) (t t) (a a) (b b) (k k))
-  (defstrand resp 2 (n n) (b b) (a a) (k k-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig n)
-  (operation nonce-test (added-strand resp 2) n (0 1)
-    (enc n a (pubk b)))
-  (traces
-    ((send (enc n a (pubk b))) (recv (enc n k b (pubk a)))
-      (send (enc t k)))
-    ((recv (enc n a (pubk b))) (send (enc n k-0 b (pubk a)))))
-  (label 5)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (n n) (a a) (k k) (t t))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol nslsk-tag-term basic
-  (defrole init
-    (vars (a b name) (n text) (k skey))
-    (trace (send (enc n a (pubk b))) (recv (enc n k b (pubk a)))
-      (send (enc "t" k))))
-  (defrole resp
-    (vars (b a name) (n text) (k skey))
-    (trace (recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc "t" k)))))
-
-(defskeleton nslsk-tag-term
-  (vars (n text) (a b name) (k skey))
-  (defstrand resp 3 (n n) (b b) (a a) (k k))
-  (non-orig (privk a))
-  (uniq-orig k)
-  (traces
-    ((recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc "t" k))))
-  (label 6)
-  (unrealized (0 2))
-  (origs (k (0 1)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton nslsk-tag-term
-  (vars (n n-0 text) (a b a-0 b-0 name) (k skey))
-  (defstrand resp 3 (n n) (b b) (a a) (k k))
-  (defstrand init 3 (n n-0) (a a-0) (b b-0) (k k))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 3) (enc "t" k) (0 2))
-  (traces
-    ((recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc "t" k)))
-    ((send (enc n-0 a-0 (pubk b-0))) (recv (enc n-0 k b-0 (pubk a-0)))
-      (send (enc "t" k))))
-  (label 7)
-  (parent 6)
-  (unrealized (1 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nslsk-tag-term
-  (vars (n text) (a b name) (k skey))
-  (defstrand resp 3 (n n) (b b) (a a) (k k))
-  (deflistener k)
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig k)
-  (operation encryption-test (added-listener k) (enc "t" k) (0 2))
-  (traces
-    ((recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc "t" k))) ((recv k) (send k)))
-  (label 8)
-  (parent 6)
-  (unrealized (1 0))
-  (comment "empty cohort"))
-
-(defskeleton nslsk-tag-term
-  (vars (n text) (a b name) (k skey))
-  (defstrand resp 3 (n n) (b b) (a a) (k k))
-  (defstrand init 3 (n n) (a a) (b b) (k k))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (n-0 n)) k (1 1)
-    (enc n k b (pubk a)))
-  (traces
-    ((recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc "t" k)))
-    ((send (enc n a (pubk b))) (recv (enc n k b (pubk a)))
-      (send (enc "t" k))))
-  (label 9)
-  (parent 7)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (k k) (b b) (n n))))
-  (origs (k (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol nslsk-tag-term basic
-  (defrole init
-    (vars (a b name) (n text) (k skey))
-    (trace (send (enc n a (pubk b))) (recv (enc n k b (pubk a)))
-      (send (enc "t" k))))
-  (defrole resp
-    (vars (b a name) (n text) (k skey))
-    (trace (recv (enc n a (pubk b))) (send (enc n k b (pubk a)))
-      (recv (enc "t" k)))))
-
-(defskeleton nslsk-tag-term
-  (vars (n text) (b a name) (k skey))
-  (defstrand init 3 (n n) (a a) (b b) (k k))
-  (non-orig (privk b))
-  (uniq-orig n)
-  (traces
-    ((send (enc n a (pubk b))) (recv (enc n k b (pubk a)))
-      (send (enc "t" k))))
-  (label 10)
-  (unrealized (0 1))
-  (origs (n (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton nslsk-tag-term
-  (vars (n text) (b a name) (k k-0 skey))
-  (defstrand init 3 (n n) (a a) (b b) (k k))
-  (defstrand resp 2 (n n) (b b) (a a) (k k-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig n)
-  (operation nonce-test (added-strand resp 2) n (0 1)
-    (enc n a (pubk b)))
-  (traces
-    ((send (enc n a (pubk b))) (recv (enc n k b (pubk a)))
-      (send (enc "t" k)))
-    ((recv (enc n a (pubk b))) (send (enc n k-0 b (pubk a)))))
-  (label 11)
-  (parent 10)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (n n) (a a) (k k))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/or.scm b/tst/or.scm
--- a/tst/or.scm
+++ b/tst/or.scm
@@ -1,27 +1,27 @@
-(herald "Otway-Rees Protocol"
-	(comment "Standard version using variables of sort mesg"))
-
-(defprotocol or basic
-  (defrole init (vars (a b s name) (na text) (k skey) (m text))
-    (trace
-     (send (cat m a b (enc na m a b (ltk a s))))
-     (recv (cat m (enc na k (ltk a s))))))
-  (defrole resp
-    (vars (a b s name) (nb text) (k skey) (m text) (x y mesg))
-    (trace
-     (recv (cat m a b x))
-     (send (cat m a b x (enc nb m a b (ltk b s))))
-     (recv (cat m y (enc nb k (ltk b s))))
-     (send y)))
-  (defrole serv (vars (a b s name) (na nb text) (k skey) (m text))
-    (trace
-     (recv (cat m a b (enc na m a b (ltk a s))
-		(enc nb m a b (ltk b s))))
-     (send (cat m (enc na k (ltk a s)) (enc nb k (ltk b s)))))
-    (uniq-orig k)))
-
-(defskeleton or
-  (vars (nb text) (s a b name))
-  (defstrand resp 4 (a a) (b b) (s s) (nb nb))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig nb))
+(herald "Otway-Rees Protocol"
+	(comment "Standard version using variables of sort mesg"))
+
+(defprotocol or basic
+  (defrole init (vars (a b s name) (na text) (k skey) (m text))
+    (trace
+     (send (cat m a b (enc na m a b (ltk a s))))
+     (recv (cat m (enc na k (ltk a s))))))
+  (defrole resp
+    (vars (a b s name) (nb text) (k skey) (m text) (x y mesg))
+    (trace
+     (recv (cat m a b x))
+     (send (cat m a b x (enc nb m a b (ltk b s))))
+     (recv (cat m y (enc nb k (ltk b s))))
+     (send y)))
+  (defrole serv (vars (a b s name) (na nb text) (k skey) (m text))
+    (trace
+     (recv (cat m a b (enc na m a b (ltk a s))
+		(enc nb m a b (ltk b s))))
+     (send (cat m (enc na k (ltk a s)) (enc nb k (ltk b s)))))
+    (uniq-orig k)))
+
+(defskeleton or
+  (vars (nb text) (s a b name))
+  (defstrand resp 4 (a a) (b b) (s s) (nb nb))
+  (non-orig (ltk a s) (ltk b s))
+  (uniq-orig nb))
diff --git a/tst/or.tst b/tst/or.tst
--- a/tst/or.tst
+++ b/tst/or.tst
@@ -1,7 +1,7 @@
 (herald "Otway-Rees Protocol"
   (comment "Standard version using variables of sort mesg"))
 
-(comment "CPSA 2.5.4")
+(comment "CPSA 3.2.2")
 (comment "All input read from or.scm")
 
 (defprotocol or basic
diff --git a/tst/owang.scm b/tst/owang.scm
new file mode 100644
--- /dev/null
+++ b/tst/owang.scm
@@ -0,0 +1,408 @@
+;; CPSA input file to represent
+;; Wang's Fair Exchange Protocol
+
+;; Wang's encrypted format for the
+;; message payload.  Observe that m,
+;; k get their values from the
+;; like-named messages in the context
+;; where the macro is expanded.
+
+(defmacro (em)
+  (enc m k))
+
+;; The session label L as a fn of
+;; the values that *should be* the
+;; hashes of the encrypted message EM
+;; and the session key K.
+
+(defmacro (l-prime y x)
+  (cat a b t y x))
+
+;; The recipient can check that a
+;; session label has an l-prime where
+;; y is the hash of another parameter.
+;; Hence recipient roles use l-star.
+
+(defmacro (l-star e1 x)
+  (l-prime (hash e1) x))
+
+;; The Evidence of Origin is checked
+;; to be this fn of other parameters
+;; available to the recipient.
+
+(defmacro (eoo-star x e1 e2)
+  (enc (cat "eootag"
+	    (hash (l-star e1 x)) e2)
+       (privk "sign" a)))
+
+;; The Evidence of Receipt is computed
+;; as this fn of other parameters
+;; available to the recipient.
+
+(defmacro (eor-star x e1 e2)
+  (enc (cat "eortag"
+	    (hash (l-star e1 x)) e2)
+       (privk "sign" b)))
+
+;; The Recovery Request as computed by
+;; the recipient.
+
+(defmacro (rr-star x e1 e2)
+  (cat (l-star e1 x) e2
+       (eoo-star x e1 e2)
+       (eor-star x e1 e2)
+       (enc (cat "rcrq" (l-star e1 x) e2)
+            (privk "sign" b))))
+
+;; The Abort Token is checked
+;; to be this fn of other parameters
+;; available to the recipient.
+
+(defmacro (at-star e1 x)
+  (enc (enc "abrq" (l-star e1 x)
+            (privk "sign" a))
+       (privk "sign" t)))
+
+;; How the initiator computes the
+;; encrypted key package:
+
+(defmacro (ek l)
+  (enc (cat "keytag" (hash l) k r)
+       (pubk "encr" t)))
+
+;; The Initiator's computed
+;; version of L.
+
+(defmacro (l)
+  (l-prime (hash (enc m k)) (hash k)))
+
+;; The TTP can check that the session
+;; label L is this fn of other
+;; parameters available to the TTP.
+
+(defmacro (l-prime-prime y)
+  (cat a b t y (hash k)))
+
+;; The TTP can check that the EOO
+;; is this fn of other parameters
+;; available to the TTP.
+
+(defmacro (eoo-prime-prime y)
+  (enc (cat "eootag"
+            (hash (l-prime-prime y))
+	    (ek (l-prime-prime y)))
+       (privk "sign" a)))
+
+;; The TTP can check that the EOR
+;; is this fn of other parameters
+;; available to the TTP.
+
+(defmacro (eor-prime-prime y)
+  (enc (cat "eortag"
+	    (hash (l-prime-prime y))
+	    (ek (l-prime-prime y)))
+       (privk "sign" b)))
+
+;; The TTP can check that the RR
+;; is this fn of other parameters
+;; available to the TTP.
+
+(defmacro (rr-prime-prime y)
+  (cat (l-prime-prime y)
+       (ek (l-prime-prime y))
+       (eoo-prime-prime y)
+       (eor-prime-prime y)
+       (enc "rcrq" (l-prime-prime y)
+	    (ek (l-prime-prime y))
+            (privk "sign" b))))
+
+;; The TTP can check that the Confirmation
+;; Request is this fn of other parameters
+;; available to the TTP.
+
+(defmacro (cf-prime-prime y)
+  (cat (l-prime-prime y) (ek (l-prime-prime y))
+       (eoo-prime-prime y) (eor-prime-prime y)
+       (enc "cfrq" (l-prime-prime y)
+	    (ek (l-prime-prime y))
+            (privk "sign" b))))
+
+;; Defn of Wang's Fair Exchange Protocol.
+;; Closely follows the presentation in the
+;; figures in Section 3.  In the TTP roles,
+;; we have put a dummy send or receive in place
+;; of the state synchronization event to keep
+;; the indices matching the spec.
+
+(defprotocol wang basic
+
+  ;; Successful initiator run with no TTP involvement
+
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+     (send (cat (l) (enc m k) (ek (l))
+                (eoo-star (hash k) (enc m k) (ek (l)))))
+     (recv (eor-star (hash k) (enc m k) (ek (l))))
+     (send (cat k r))))
+
+  ;; Aborted initiator run
+
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+     (send (cat (l) (enc m k) (ek (l))
+                (eoo-star (hash k) (enc m k) (ek (l)))))
+     (send (enc "abrq" (l) (privk "sign" a)))
+     (recv (enc "abcf"
+                (enc "abrq" (l) (privk "sign" a))
+                (privk "sign" t)))))
+
+  ;; Initiator run with abort request and forced recovery
+
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+     (send (cat (l) (enc m k) (ek (l))
+                (eoo-star (hash k) (enc m k) (ek (l)))))
+     (send (enc "abrq" (l) (privk "sign" a)))
+     (recv (eor-star (hash k) (enc m k) (ek (l))))))
+
+  ;; Aborted initiator run, but with EOR received
+
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+     (send (cat (l) (enc m k) (ek (l))
+                (eoo-star (hash k) (enc m k) (ek (l)))))
+     (recv (eor-star (hash k) (enc m k) (ek (l))))
+     (send (enc "abrq" (l) (privk "sign" a)))
+     (recv (enc "abcf"
+                (enc "abrq" (l) (privk "sign" a))
+                (privk "sign" t)))))
+
+  ;; Initiator run with abort requested after EOR received,
+  ;; but recovery forced
+
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+     (send (cat (l) (enc m k) (ek (l))
+                (eoo-star (hash k) (enc m k) (ek (l)))))
+     (recv (eor-star (hash k) (enc m k) (ek (l))))
+     (send (enc "abrq" (l) (privk "sign" a)))
+     (recv (eor-star (hash k) (enc m k) (ek (l))))))
+
+  ;; Successful responder run with no TTP involvement
+
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+     (recv (cat (l) (enc m k) (ek (l))
+                (eoo-star (hash k) (enc m k) (ek (l)))))
+     (send (eor-star (hash k) (enc m k) (ek (l))))
+     (recv (cat k r))))
+
+  ;;Responder run with recovery via TTP
+
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+     (recv (cat (l) (enc m k) (ek (l))
+                (eoo-star (hash k) (enc m k) (ek (l)))))
+     (send (cat (l) (ek (l)) (eoo-star (hash k) (enc m k) (ek (l)))
+                (eor-star (hash k) (enc m k) (ek (l)))))
+     (send (cat (l) (ek (l)) (eoo-star (hash k) (enc m k) (ek (l)))
+                (eor-star (hash k) (enc m k) (ek (l)))
+                (enc "rcrq" (l) (ek (l)) (privk "sign" b))))
+     (recv (cat k r))))
+
+  ;; Responder run with recovery request and forced abort
+
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+     (recv (cat (l-star e1 x) e1 e2 (eoo-star x e1 e2)))
+     (send (cat (l-star e1 x) e2 (eoo-star x e1 e2) (eor-star x e1 e2)))
+     (send (cat (l-star e1 x) e2 (eoo-star x e1 e2) (eor-star x e1 e2)
+                (enc "rcrq" (l-star e1 x) e2 (privk "sign" b))))
+     (recv (enc "abcf"
+                (enc "abrq" (l-star e1 x) (privk "sign" a))
+                (privk "sign" t)))))
+
+  ;; TTP handles an abort
+
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace
+     (recv (enc "abrq" (l-prime y x) (privk "sign" a)))
+     (send (cat "sync-abrq"
+                (enc "abrq" (l-prime y x) (privk "sign" a))))
+     (send (enc "abcf"
+                (enc "abrq" (l-prime y x) (privk "sign" a))
+                (privk "sign" t)))))
+
+  ;; TTP forces recovery in response to an abort request
+
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace
+     (recv (enc "abrq" (l-prime y x) (privk "sign" a)))
+     (recv (cat "sync-abrq"
+                (enc "eortag" (hash (l-prime y x)) e
+                     (privk "sign" b))))
+     (send (enc "eortag" (hash (l-prime y x)) e
+                (privk "sign" b)))))
+
+  ;; TTP handles a recovery
+
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+     (recv (rr-prime-prime y))
+     (send (cat "sync-rc-req"
+                (rr-prime-prime y)))
+     (send (cat k r))))
+
+  ;; TTP forces abort in response to a recovery request
+
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+     (recv (rr-prime-prime y))
+     (recv (cat "sync-rc-req"
+		(enc "abrq" (l-prime-prime y) (privk "sign" a))))
+     (send (enc "abcf"
+                (enc "abrq" (l-prime-prime y) (privk "sign" a))
+                (privk "sign" t)))))
+
+  ;; TTP handles a confirm request
+
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+     (recv (cf-prime-prime y))
+     (send (cat "sync-cf-req"
+                (cf-prime-prime y)))
+     (send (enc (cf-prime-prime y) (privk "sign" t)))))
+
+  ;; TTP replies with abort token given confirm request
+
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+     (recv (cf-prime-prime y))
+     (recv (cat "sync-cf-req"
+                (enc "abrq"(l-prime-prime y) (privk "sign" a))))
+     (send (enc "abcf"
+                (enc "abrq"(l-prime-prime y) (privk "sign" a))
+                (privk "sign" t))))))
+
+;; End of Wang's protocol defn.
+
+;; Two experiments to prove Lemma 4.1
+
+(defskeleton wang
+  (vars (a b t name) (m data) (r text) (k skey))
+  (defstrand init1 1 (b b) (t t) (m m) (r r) (k k))
+  (deflistener m)
+  (non-orig
+   (privk "encr" t))
+  (uniq-orig m k)
+  (comment "Experiment 1 to prove Lemma 4.1."))
+
+(defskeleton wang
+  (vars (a b t name) (m data) (r text) (k skey))
+  (defstrand init1 1 (b b) (t t) (m m) (r r) (k k))
+  (deflistener k)
+  (non-orig
+   (privk "encr" t))
+  (uniq-orig m k)
+  (comment "Experiment 2 to prove Lemma 4.1."))
+
+;; We now have three experiments
+;; to prove Lemma 4.2, clause 1.
+
+(defskeleton wang
+  (vars (a b t name) (m data) (r text) (k skey))
+  (defstrand init1 3 (b b) (t t) (m m) (r r) (k k))
+  (non-orig
+   (privk "sign" b))
+  (comment "First of three experiments to prove Lemma 4.2, clause 1."))
+
+(defskeleton wang
+  (vars (a b t name) (m data) (r text) (k skey))
+  (defstrand init3 3 (b b) (t t) (m m) (r r) (k k))
+  (non-orig
+   (privk "sign" b))
+  (comment "Second of three experiments to prove Lemma 4.2, clause 1."))
+
+(defskeleton wang
+  (vars (a b t name) (m data) (r text) (k skey))
+  (defstrand init5 4 (b b) (t t) (m m) (r r) (k k))
+  (non-orig
+   (privk "sign" b))
+  (comment "Third of three experiments to prove Lemma 4.2, clause 1."))
+
+;; Two experiments to prove 4.2, Clause 2.
+
+(defskeleton wang
+  (vars (a b t name) (m data) (r text) (k skey))
+  (defstrand resp1 3 (a a) (t t) (m m) (r r) (k k))
+  (non-orig
+   (privk "sign" a))
+  (comment
+   "First of two experiments to prove Lemma 4.2, clause 2."))
+
+(defskeleton wang
+  (vars (a b t name) (m data) (r text) (k skey))
+  (defstrand resp2 4 (a a) (t t) (m m) (r r) (k k))
+  (non-orig
+   (privk "sign" a))
+  (comment
+   "Second of two experiments to prove Lemma 4.2, clause 2."))
+
+;; Experiment to prove Lemma 4.2, clause 3.
+
+(defskeleton wang
+  (vars (a b t name) (e1 e2 x mesg))
+  (defstrand resp3 4 (a a) (t t))
+  (non-orig
+   (privk "sign" a))
+  (comment
+   "Experiments to prove Lemma 4.2, clause 3."))
+
+;; One experiment to prove Lemma 4.3, Clause 1.
+
+(defskeleton wang
+  (vars (a b t name) (y x mesg))
+  (deflistener
+    (enc "abcf" (enc "abrq" (l-prime y x) (privk "sign" a))
+	 (privk "sign" t)))
+  (non-orig
+   (privk "sign" t))
+  (comment
+   "Experiments to prove Lemma 4.3, clause 1."))
+
+;; Three experiments to prove Lemma 4.3, Clause 2.
+
+(defskeleton wang
+  (vars (y x mesg) (a b t name))
+  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
+  (non-orig (privk "sign" a)  (privk "encr" t))
+  (comment
+   "Experiment 1 to prove Lemma 4.3, clause 2."))
+
+(defskeleton wang
+  (vars (a b t name) (r text) (k skey) (y mesg))
+  (defstrand ttp-rc2 3 (a a) (b b) (t t))
+  (non-orig (privk "sign" a)  (privk "encr" t))
+  (comment
+   "Experiment 2 to prove Lemma 4.3, clause 2."))
+
+(defskeleton wang
+  (vars (a b t name) (r text) (k skey) (y mesg))
+  (defstrand ttp-cf2 3 (a a) (b b) (t t))
+  (non-orig (privk "sign" a)  (privk "encr" t))
+  (comment
+   "Experiment 3 to prove Lemma 4.3, clause 2."))
diff --git a/tst/owang.tst b/tst/owang.tst
new file mode 100644
--- /dev/null
+++ b/tst/owang.tst
@@ -0,0 +1,5360 @@
+(comment "CPSA 3.2.2")
+(comment "All input read from owang.scm")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (deflistener m)
+  (non-orig (privk "encr" t))
+  (uniq-orig m k)
+  (comment "Experiment 1 to prove Lemma 4.1.")
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))) ((recv m) (send m)))
+  (label 0)
+  (unrealized (1 0))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (deflistener m)
+  (precedes ((0 0) (1 0)))
+  (non-orig (privk "encr" t))
+  (uniq-orig m k)
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))) ((recv m) (send m)))
+  (label 1)
+  (parent 0)
+  (unrealized (1 0))
+  (origs (m (0 0)) (k (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (deflistener m)
+  (deflistener k)
+  (precedes ((0 0) (2 0)) ((2 1) (1 0)))
+  (non-orig (privk "encr" t))
+  (uniq-orig m k)
+  (operation nonce-test (added-listener k) m (1 0) (enc m k))
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))) ((recv m) (send m))
+    ((recv k) (send k)))
+  (label 2)
+  (parent 1)
+  (unrealized (2 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (deflistener m)
+  (deflistener k)
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 1) (0 0)) ((2 2) (1 0)))
+  (non-orig (privk "encr" t))
+  (uniq-orig m k)
+  (operation nonce-test (displaced 0 3 init1 3) k (2 0)
+    (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+      (pubk "encr" t)))
+  (traces ((recv m) (send m)) ((recv k) (send k))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (label 3)
+  (parent 2)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (deflistener m)
+  (deflistener k)
+  (defstrand ttp-rc1 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (precedes ((0 0) (3 0)) ((2 1) (1 0)) ((3 2) (2 0)))
+  (non-orig (privk "encr" t))
+  (uniq-orig m k)
+  (operation nonce-test (added-strand ttp-rc1 3) k (2 0)
+    (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+      (pubk "encr" t)))
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))) ((recv m) (send m))
+    ((recv k) (send k))
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
+  (label 4)
+  (parent 2)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (deflistener m)
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk "encr" t))
+  (uniq-orig m k)
+  (operation generalization deleted (1 0))
+  (traces ((recv m) (send m))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (label 5)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((1 0) ((b b) (t t) (m m) (r r) (k k) (a a))))
+  (origs (m (1 0)) (k (1 0))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (deflistener m)
+  (defstrand ttp-rc1 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (precedes ((0 0) (2 0)) ((2 2) (1 0)))
+  (non-orig (privk "encr" t))
+  (uniq-orig m k)
+  (operation generalization deleted (2 0))
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))) ((recv m) (send m))
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
+  (label 6)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (maps ((0 1) ((b b) (t t) (m m) (r r) (k k) (a a))))
+  (origs (m (0 0)) (k (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (deflistener k)
+  (non-orig (privk "encr" t))
+  (uniq-orig m k)
+  (comment "Experiment 2 to prove Lemma 4.1.")
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))) ((recv k) (send k)))
+  (label 7)
+  (unrealized (1 0))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (deflistener k)
+  (precedes ((0 0) (1 0)))
+  (non-orig (privk "encr" t))
+  (uniq-orig m k)
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))) ((recv k) (send k)))
+  (label 8)
+  (parent 7)
+  (unrealized (1 0))
+  (origs (m (0 0)) (k (0 0)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (deflistener k)
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk "encr" t))
+  (uniq-orig m k)
+  (operation nonce-test (displaced 0 2 init1 3) k (1 0)
+    (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+      (pubk "encr" t)))
+  (traces ((recv k) (send k))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (label 9)
+  (parent 8)
+  (unrealized)
+  (shape)
+  (maps ((1 0) ((b b) (t t) (m m) (r r) (k k) (a a))))
+  (origs (m (1 0)) (k (1 0))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (deflistener k)
+  (defstrand ttp-rc1 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (precedes ((0 0) (2 0)) ((2 2) (1 0)))
+  (non-orig (privk "encr" t))
+  (uniq-orig m k)
+  (operation nonce-test (added-strand ttp-rc1 3) k (1 0)
+    (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+      (pubk "encr" t)))
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))) ((recv k) (send k))
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
+  (label 10)
+  (parent 8)
+  (unrealized)
+  (shape)
+  (maps ((0 1) ((b b) (t t) (m m) (r r) (k k) (a a))))
+  (origs (m (0 0)) (k (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (non-orig (privk "sign" b))
+  (comment "First of three experiments to prove Lemma 4.2, clause 1.")
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (label 11)
+  (unrealized (0 1))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 1) (0 1)))
+  (non-orig (privk "sign" b))
+  (operation encryption-test (added-strand resp1 2)
+    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t)) (privk "sign" b)) (0 1))
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r)))
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (label 12)
+  (parent 11)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand resp3 2 (e1 (enc m k))
+    (e2
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
+  (precedes ((1 1) (0 1)))
+  (non-orig (privk "sign" b))
+  (operation encryption-test (added-strand resp3 2)
+    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t)) (privk "sign" b)) (0 1))
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r)))
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))))
+  (label 13)
+  (parent 11)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (non-orig (privk "sign" b))
+  (comment "Second of three experiments to prove Lemma 4.2, clause 1.")
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (label 14)
+  (unrealized (0 2))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 1) (0 2)))
+  (non-orig (privk "sign" b))
+  (operation encryption-test (added-strand resp1 2)
+    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t)) (privk "sign" b)) (0 2))
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))))
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (label 15)
+  (parent 14)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand resp3 2 (e1 (enc m k))
+    (e2
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
+  (precedes ((1 1) (0 2)))
+  (non-orig (privk "sign" b))
+  (operation encryption-test (added-strand resp3 2)
+    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t)) (privk "sign" b)) (0 2))
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))))
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))))
+  (label 16)
+  (parent 14)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
+  (non-orig (privk "sign" b))
+  (comment "Third of three experiments to prove Lemma 4.2, clause 1.")
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (label 17)
+  (unrealized (0 1) (0 3))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 1) (0 1)))
+  (non-orig (privk "sign" b))
+  (operation encryption-test (added-strand resp1 2)
+    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t)) (privk "sign" b)) (0 1))
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))))
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (label 18)
+  (parent 17)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a name) (k skey))
+  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand resp3 2 (e1 (enc m k))
+    (e2
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
+  (precedes ((1 1) (0 1)))
+  (non-orig (privk "sign" b))
+  (operation encryption-test (added-strand resp3 2)
+    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t)) (privk "sign" b)) (0 1))
+  (traces
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))))
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))))
+  (label 19)
+  (parent 17)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b name) (k skey))
+  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (non-orig (privk "sign" a))
+  (comment "First of two experiments to prove Lemma 4.2, clause 2.")
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (label 20)
+  (unrealized (0 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b name) (k skey))
+  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)))
+  (non-orig (privk "sign" a))
+  (operation encryption-test (added-strand init5 1)
+    (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t)) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r)))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))))
+  (label 21)
+  (parent 20)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (t t) (m m) (r r) (k k) (b b))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b name) (k skey))
+  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (k k))
+  (non-orig (privk "sign" a))
+  (comment "Second of two experiments to prove Lemma 4.2, clause 2.")
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (label 22)
+  (unrealized (0 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b name) (k skey))
+  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)))
+  (non-orig (privk "sign" a))
+  (operation encryption-test (added-strand init5 1)
+    (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t)) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r)))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))))
+  (label 23)
+  (parent 22)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (t t) (m m) (r r) (k k) (b b))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (e1 e2 x mesg) (a t b name))
+  (defstrand resp3 4 (e1 e1) (e2 e2) (x x) (a a) (b b) (t t))
+  (non-orig (privk "sign" a))
+  (comment "Experiments to prove Lemma 4.2, clause 3.")
+  (traces
+    ((recv
+       (cat (cat a b t (hash e1) x) e1 e2
+         (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (label 24)
+  (unrealized (0 0) (0 3))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b name) (k skey))
+  (defstrand resp3 4 (e1 (enc m k))
+    (e2
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)))
+  (non-orig (privk "sign" a))
+  (operation encryption-test (added-strand init5 1)
+    (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t)) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))))
+  (label 25)
+  (parent 24)
+  (unrealized (0 3))
+  (comment "4 in cohort - 4 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b name) (k skey))
+  (defstrand resp3 4 (e1 (enc m k))
+    (e2
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
+  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((1 1) (0 3)))
+  (non-orig (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init3 2)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 3))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 26)
+  (parent 25)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (t t) (b b) (e1 (enc m k))
+        (e2
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))) (x (hash k)))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a t b name) (k skey))
+  (defstrand resp3 4 (e1 (enc m k))
+    (e2
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((2 1) (0 3)))
+  (non-orig (privk "sign" a))
+  (operation encryption-test (added-strand init3 2)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 3))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 27)
+  (parent 25)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (t t) (b b) (e1 (enc m k))
+        (e2
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))) (x (hash k)))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b name) (k skey))
+  (defstrand resp3 4 (e1 (enc m k))
+    (e2
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
+  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((1 2) (0 3)))
+  (non-orig (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init5 3)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 3))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 28)
+  (parent 25)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (t t) (b b) (e1 (enc m k))
+        (e2
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))) (x (hash k)))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a t b name) (k skey))
+  (defstrand resp3 4 (e1 (enc m k))
+    (e2
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((2 2) (0 3)))
+  (non-orig (privk "sign" a))
+  (operation encryption-test (added-strand init5 3)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 3))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 29)
+  (parent 25)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (t t) (b b) (e1 (enc m k))
+        (e2
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))) (x (hash k)))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (y x mesg) (a b t name))
+  (deflistener
+    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+      (privk "sign" t)))
+  (non-orig (privk "sign" t))
+  (comment "Experiments to prove Lemma 4.3, clause 1.")
+  (traces
+    ((recv
+       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+         (privk "sign" t)))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (label 30)
+  (unrealized (0 0))
+  (origs)
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton wang
+  (vars (y x mesg) (a b t name))
+  (deflistener
+    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+      (privk "sign" t)))
+  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk "sign" t))
+  (operation encryption-test (added-strand ttp-ab1 3)
+    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+      (privk "sign" t)) (0 0))
+  (traces
+    ((recv
+       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+         (privk "sign" t)))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t))))
+    ((recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (label 31)
+  (parent 30)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (y y) (x x))))
+  (origs))
+
+(defskeleton wang
+  (vars (y mesg) (r text) (a b t name) (k skey))
+  (deflistener
+    (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+      (privk "sign" t)))
+  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (k k))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk "sign" t))
+  (operation encryption-test (added-strand ttp-rc2 3)
+    (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+      (privk "sign" t)) (0 0))
+  (traces
+    ((recv
+       (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+         (privk "sign" t)))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((recv
+       (cat (cat a b t y (hash k))
+         (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+         (enc "eootag" (hash a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" a))
+         (enc "eortag" (hash a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" b))
+         (enc "rcrq" (cat a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (label 32)
+  (parent 30)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (y y) (x (hash k)))))
+  (origs))
+
+(defskeleton wang
+  (vars (y mesg) (r text) (a b t name) (k skey))
+  (deflistener
+    (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+      (privk "sign" t)))
+  (defstrand ttp-cf2 3 (y y) (r r) (a a) (b b) (t t) (k k))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk "sign" t))
+  (operation encryption-test (added-strand ttp-cf2 3)
+    (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+      (privk "sign" t)) (0 0))
+  (traces
+    ((recv
+       (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+         (privk "sign" t)))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((recv
+       (cat (cat a b t y (hash k))
+         (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+         (enc "eootag" (hash a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" a))
+         (enc "eortag" (hash a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" b))
+         (enc "cfrq" (cat a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (label 33)
+  (parent 30)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (y y) (x (hash k)))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (y x mesg) (a b t name))
+  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (comment "Experiment 1 to prove Lemma 4.3, clause 2.")
+  (traces
+    ((recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (label 34)
+  (unrealized (0 0))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t name) (k skey))
+  (defstrand ttp-ab1 3 (y (hash (enc m k))) (x (hash k)) (a a) (b b)
+    (t t))
+  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 1) (0 0)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init3 2)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (send
+        (cat "sync-abrq"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 35)
+  (parent 34)
+  (unrealized)
+  (shape)
+  (maps ((0) ((y (hash (enc m k))) (x (hash k)) (a a) (b b) (t t))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t name) (k skey))
+  (defstrand ttp-ab1 3 (y (hash (enc m k))) (x (hash k)) (a a) (b b)
+    (t t))
+  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init5 3)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (send
+        (cat "sync-abrq"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 36)
+  (parent 34)
+  (unrealized)
+  (shape)
+  (maps ((0) ((y (hash (enc m k))) (x (hash k)) (a a) (b b) (t t))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (y mesg) (r text) (a b t name) (k skey))
+  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (k k))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (comment "Experiment 2 to prove Lemma 4.3, clause 2.")
+  (traces
+    ((recv
+       (cat (cat a b t y (hash k))
+         (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+         (enc "eootag" (hash a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" a))
+         (enc "eortag" (hash a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" b))
+         (enc "rcrq" (cat a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (label 37)
+  (unrealized (0 0) (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t name) (k skey))
+  (defstrand ttp-rc2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init5 1)
+    (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t)) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))))
+  (label 38)
+  (parent 37)
+  (unrealized (0 1))
+  (comment "4 in cohort - 4 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t name) (k skey))
+  (defstrand ttp-rc2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init3 2)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 39)
+  (parent 38)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a b t name) (k skey))
+  (defstrand ttp-rc2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((2 1) (0 1)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init3 2)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 40)
+  (parent 38)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t name) (k skey))
+  (defstrand ttp-rc2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((1 2) (0 1)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init5 3)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 41)
+  (parent 38)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a b t name) (k skey))
+  (defstrand ttp-rc2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((2 2) (0 1)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init5 3)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 42)
+  (parent 38)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
+  (defrole init2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init3
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole init4
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole init5
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))))
+  (defrole resp1
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
+  (defrole resp2
+    (vars (a b t name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t))
+          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
+            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
+  (defrole resp3
+    (vars (a b t name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (hash e1) x) e1 e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (hash e1) x) e2
+          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
+          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
+      (recv
+        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
+      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
+  (defrole ttp-rc1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)))) (send (cat k r))))
+  (defrole ttp-rc2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "rcrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-cf1
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (send
+        (enc (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b)) (privk "sign" t)))))
+  (defrole ttp-cf2
+    (vars (a b t name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (hash k))
+          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+          (enc "eootag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" a))
+          (enc "eortag" (hash a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))
+          (enc "cfrq" (cat a b t y (hash k))
+            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+            (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t))))))
+
+(defskeleton wang
+  (vars (y mesg) (r text) (a b t name) (k skey))
+  (defstrand ttp-cf2 3 (y y) (r r) (a a) (b b) (t t) (k k))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (comment "Experiment 3 to prove Lemma 4.3, clause 2.")
+  (traces
+    ((recv
+       (cat (cat a b t y (hash k))
+         (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+         (enc "eootag" (hash a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" a))
+         (enc "eortag" (hash a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" b))
+         (enc "cfrq" (cat a b t y (hash k))
+           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
+           (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (hash k) (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
+          (privk "sign" t)))))
+  (label 43)
+  (unrealized (0 0) (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t name) (k skey))
+  (defstrand ttp-cf2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init5 1)
+    (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+        (pubk "encr" t)) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))))
+  (label 44)
+  (parent 43)
+  (unrealized (0 1))
+  (comment "4 in cohort - 4 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t name) (k skey))
+  (defstrand ttp-cf2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init3 2)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 45)
+  (parent 44)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a b t name) (k skey))
+  (defstrand ttp-cf2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((2 1) (0 1)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init3 2)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+             (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 46)
+  (parent 44)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t name) (k skey))
+  (defstrand ttp-cf2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((1 2) (0 1)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init5 3)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 47)
+  (parent 44)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a b t name) (k skey))
+  (defstrand ttp-cf2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
+    (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
+  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
+  (precedes ((1 0) (0 0)) ((2 2) (0 1)))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init5 3)
+    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (hash (enc m k)) (hash k))
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq" (cat a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t (hash (enc m k)) (hash k)
+            (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
+          (privk "sign" t))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
+             (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
+         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+           (pubk "encr" t))
+         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
+           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+             (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
+          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
+            (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
+  (label 48)
+  (parent 44)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
+  (origs))
+
+(comment "Nothing left to do")
diff --git a/tst/owat.scm b/tst/owat.scm
new file mode 100644
--- /dev/null
+++ b/tst/owat.scm
@@ -0,0 +1,30 @@
+(herald "One-way Authentication Test with bltk keys"
+	(algebra diffie-hellman)
+	(bound 12))
+
+(defprotocol owa diffie-hellman
+  (defrole init
+    (vars (a b name) (n text))
+    (trace
+     (send a)
+     (recv n)
+     (send (enc n (bltk a b)))))
+  (defrole resp
+    (vars (a b name) (n text))
+    (trace
+     (recv a)
+     (send n)
+     (recv (enc n (bltk a b))))))
+
+(defskeleton owa
+  (vars (a b name) (n text))
+  (defstrand init 3 (a a) (b b) (n n))
+  (non-orig (bltk a b)))
+
+(defskeleton owa
+  (vars (a b name) (n text))
+  (defstrand resp 3 (a a) (b b) (n n))
+  (non-orig (bltk a b))
+  (uniq-orig n))
+
+
diff --git a/tst/owat.tst b/tst/owat.tst
new file mode 100644
--- /dev/null
+++ b/tst/owat.tst
@@ -0,0 +1,83 @@
+(herald "One-way Authentication Test with bltk keys"
+  (algebra diffie-hellman) (bound 12))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from owat.scm")
+
+(defprotocol owa diffie-hellman
+  (defrole init
+    (vars (a b name) (n text))
+    (trace (send a) (recv n) (send (enc n (bltk a b)))))
+  (defrole resp
+    (vars (a b name) (n text))
+    (trace (recv a) (send n) (recv (enc n (bltk a b))))))
+
+(defskeleton owa
+  (vars (n text) (a b name))
+  (defstrand init 3 (n n) (a a) (b b))
+  (non-orig (bltk a b))
+  (traces ((send a) (recv n) (send (enc n (bltk a b)))))
+  (label 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (n n))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol owa diffie-hellman
+  (defrole init
+    (vars (a b name) (n text))
+    (trace (send a) (recv n) (send (enc n (bltk a b)))))
+  (defrole resp
+    (vars (a b name) (n text))
+    (trace (recv a) (send n) (recv (enc n (bltk a b))))))
+
+(defskeleton owa
+  (vars (n text) (a b name))
+  (defstrand resp 3 (n n) (a a) (b b))
+  (non-orig (bltk a b))
+  (uniq-orig n)
+  (traces ((recv a) (send n) (recv (enc n (bltk a b)))))
+  (label 1)
+  (unrealized (0 2))
+  (origs (n (0 1)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton owa
+  (vars (n text) (a b name))
+  (defstrand resp 3 (n n) (a a) (b b))
+  (defstrand init 3 (n n) (a b) (b a))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (bltk a b))
+  (uniq-orig n)
+  (operation encryption-test (added-strand init 3) (enc n (bltk a b))
+    (0 2))
+  (traces ((recv a) (send n) (recv (enc n (bltk a b))))
+    ((send b) (recv n) (send (enc n (bltk a b)))))
+  (label 2)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (n n))))
+  (origs (n (0 1))))
+
+(defskeleton owa
+  (vars (n text) (a b name))
+  (defstrand resp 3 (n n) (a a) (b b))
+  (defstrand init 3 (n n) (a a) (b b))
+  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
+  (non-orig (bltk a b))
+  (uniq-orig n)
+  (operation encryption-test (added-strand init 3) (enc n (bltk a b))
+    (0 2))
+  (traces ((recv a) (send n) (recv (enc n (bltk a b))))
+    ((send a) (recv n) (send (enc n (bltk a b)))))
+  (label 3)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (n n))))
+  (origs (n (0 1))))
+
+(comment "Nothing left to do")
diff --git a/tst/pca.scm b/tst/pca.scm
deleted file mode 100644
--- a/tst/pca.scm
+++ /dev/null
@@ -1,36 +0,0 @@
-(herald "Privacy Certificate Authority" (bound 15)
-  (comment "Generation of an Attestation Identity Certificate"))
-
-;;; PCA generation of AIC, simplified
-
-;;; ki = identity key
-;;; a = identity label
-;;; t = TPM type/platform
-;;; ke = endorsement key
-;;; kp = PCA key
-;;; km = manufacturer key
-;;; (enc (cat ki a t) (invk kp)) is the signed AIC
-
-(defprotocol pca basic
-  (defrole tpm (vars (ke ki km kp akey) (t a text))
-    (trace
-     (send (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-     (recv (enc (enc ki a t (invk kp)) ke))
-     (send (enc ki a t (invk kp))))
-    (non-orig (invk ke) (invk ki) (invk km) (invk kp))
-    (uniq-orig ki))
-  (defrole pca (vars (ke ki km kp akey) (t a text))
-    (trace
-     (recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-     (send (enc (enc ki a t (invk kp)) ke)))
-    (non-orig (invk ke) (invk ki) (invk km) (invk kp)))
-  (defrole appr (vars (ki kp akey) (t a text))
-    (trace
-     (recv (enc ki a t (invk kp))))
-    (non-orig (invk ki) (invk kp))))
-
-;;; normal run
-
-(defskeleton pca (vars (ki kp akey))
-  (defstrand appr 1 (ki ki) (kp kp))
-  (non-orig (invk ki) (invk kp)))
diff --git a/tst/pca.tst b/tst/pca.tst
deleted file mode 100644
--- a/tst/pca.tst
+++ /dev/null
@@ -1,660 +0,0 @@
-(herald "Privacy Certificate Authority" (bound 15)
-  (comment "Generation of an Attestation Identity Certificate"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from pca.scm")
-(comment "Strand count bounded at 15")
-
-(defprotocol pca basic
-  (defrole tpm
-    (vars (ke ki km kp akey) (t a text))
-    (trace (send (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    (non-orig (invk ke) (invk ki) (invk km) (invk kp))
-    (uniq-orig ki))
-  (defrole pca
-    (vars (ke ki km kp akey) (t a text))
-    (trace (recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    (non-orig (invk ke) (invk ki) (invk km) (invk kp)))
-  (defrole appr
-    (vars (ki kp akey) (t a text))
-    (trace (recv (enc ki a t (invk kp))))
-    (non-orig (invk ki) (invk kp))))
-
-(defskeleton pca
-  (vars (t a text) (ki kp akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (non-orig (invk ki) (invk kp))
-  (traces ((recv (enc ki a t (invk kp)))))
-  (label 0)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton pca
-  (vars (t a text) (ki kp ke km akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (precedes ((1 1) (0 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km))
-  (operation encryption-test (added-strand pca 2) (enc ki a t (invk kp))
-    (0 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 0) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton pca
-  (vars (t a t-0 text) (ki kp ke km ke-0 km-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t-0) (a a) (ke ke-0) (ki ki) (km km-0))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ke-0)
-    (invk km-0))
-  (uniq-orig ki)
-  (operation encryption-test (added-strand tpm 1) (enc ki a (invk ki))
-    (1 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t-0 ke-0 (invk km-0))))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 0) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton pca
-  (vars (a t text) (ki kp ke km akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t) (a a) (ke ke) (ki ki) (km km))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km))
-  (uniq-orig ki)
-  (operation encryption-test (displaced 3 2 tpm 1)
-    (enc t-0 ke-0 (invk km-0)) (1 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km))))))
-  (label 3)
-  (parent 2)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton pca
-  (vars (t a t-0 a-0 text) (ki kp ke km ke-0 km-0 ki-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t-0) (a a) (ke ke-0) (ki ki) (km km-0))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((3 0) (1 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ke-0)
-    (invk km-0) (invk ki-0))
-  (uniq-orig ki ki-0)
-  (operation encryption-test (added-strand tpm 1) (enc t ke (invk km))
-    (1 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t-0 ke-0 (invk km-0)))))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km))))))
-  (label 4)
-  (parent 2)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton pca
-  (vars (a t text) (ki kp ke km akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((2 2) (0 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km))
-  (uniq-orig ki)
-  (operation encryption-test (displaced 2 3 tpm 3)
-    (enc ki a t (invk kp)) (0 0) (enc (enc ki a t (invk kp)) ke))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp)))))
-  (label 5)
-  (parent 3)
-  (unrealized (2 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton pca
-  (vars (t a a-0 text) (ki kp ke km ki-0 km-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((3 0) (1 0)) ((3 2) (0 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ki-0)
-    (invk km-0))
-  (uniq-orig ki ki-0)
-  (operation encryption-test (displaced 2 4 tpm 3)
-    (enc ki a t (invk kp)) (0 0) (enc (enc ki a t (invk kp)) ke))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km)))))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp)))))
-  (label 6)
-  (parent 4)
-  (unrealized (3 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton pca
-  (vars (t a t-0 a-0 text) (ki kp ke km ke-0 km-0 ki-0 ke-1 km-1 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t-0) (a a) (ke ke-0) (ki ki) (km km-0))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (defstrand pca 2 (t t) (a a) (ke ke-1) (ki ki) (km km-1) (kp kp))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((2 0) (4 0)) ((3 0) (1 0))
-    ((4 1) (0 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ke-0)
-    (invk km-0) (invk ki-0) (invk ke-1) (invk km-1))
-  (uniq-orig ki ki-0)
-  (operation encryption-test (added-strand pca 2) (enc ki a t (invk kp))
-    (0 0) (enc (enc ki a t (invk kp)) ke))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t-0 ke-0 (invk km-0)))))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km)))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke-1 (invk km-1))))
-      (send (enc (enc ki a t (invk kp)) ke-1))))
-  (label 7)
-  (parent 4)
-  (seen 4)
-  (unrealized (0 0) (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton pca
-  (vars (a t text) (ki kp ke km akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (precedes ((1 1) (2 1)) ((2 0) (1 0)) ((2 2) (0 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km))
-  (uniq-orig ki)
-  (operation encryption-test (displaced 3 1 pca 2)
-    (enc ki a t (invk kp)) (2 1))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp)))))
-  (label 8)
-  (parent 5)
-  (unrealized)
-  (shape)
-  (maps ((0) ((ki ki) (kp kp) (t t) (a a))))
-  (origs (ki (2 0))))
-
-(defskeleton pca
-  (vars (a t text) (ki kp ke km ke-0 km-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke-0) (ki ki) (km km-0) (kp kp))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((2 0) (3 0)) ((2 2) (0 0))
-    ((3 1) (2 1)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ke-0)
-    (invk km-0))
-  (uniq-orig ki)
-  (operation encryption-test (added-strand pca 2) (enc ki a t (invk kp))
-    (2 1))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke-0 (invk km-0))))
-      (send (enc (enc ki a t (invk kp)) ke-0))))
-  (label 9)
-  (parent 5)
-  (unrealized (2 1) (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton pca
-  (vars (t a a-0 text) (ki kp ke km ki-0 km-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (precedes ((1 1) (3 1)) ((2 0) (1 0)) ((3 0) (1 0)) ((3 2) (0 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ki-0)
-    (invk km-0))
-  (uniq-orig ki ki-0)
-  (operation encryption-test (displaced 4 1 pca 2)
-    (enc ki a t (invk kp)) (3 1))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km)))))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp)))))
-  (label 10)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps ((0) ((ki ki) (kp kp) (t t) (a a))))
-  (origs (ki (3 0)) (ki-0 (2 0))))
-
-(defskeleton pca
-  (vars (t a a-0 text) (ki kp ke km ki-0 km-0 ke-0 km-1 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke-0) (ki ki) (km km-1) (kp kp))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((3 0) (1 0)) ((3 0) (4 0))
-    ((3 2) (0 0)) ((4 1) (3 1)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ki-0)
-    (invk km-0) (invk ke-0) (invk km-1))
-  (uniq-orig ki ki-0)
-  (operation encryption-test (added-strand pca 2) (enc ki a t (invk kp))
-    (3 1))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km)))))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke-0 (invk km-1))))
-      (send (enc (enc ki a t (invk kp)) ke-0))))
-  (label 11)
-  (parent 6)
-  (unrealized (3 1) (4 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton pca
-  (vars (a t text) (ki kp ke km akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((2 0) (3 0)) ((2 2) (0 0))
-    ((3 1) (2 1)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km))
-  (uniq-orig ki)
-  (operation encryption-test (displaced 4 2 tpm 1)
-    (enc t ke-0 (invk km-0)) (3 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke))))
-  (label 12)
-  (parent 9)
-  (seen 8)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton pca
-  (vars (a t a-0 text) (ki kp ke km ke-0 km-0 ki-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke-0) (ki ki) (km km-0) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke-0) (ki ki-0) (km km-0))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((2 0) (3 0)) ((2 2) (0 0))
-    ((3 1) (2 1)) ((4 0) (3 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ke-0)
-    (invk km-0) (invk ki-0))
-  (uniq-orig ki ki-0)
-  (operation encryption-test (added-strand tpm 1)
-    (enc t ke-0 (invk km-0)) (3 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke-0 (invk km-0))))
-      (send (enc (enc ki a t (invk kp)) ke-0)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke-0 (invk km-0))))))
-  (label 13)
-  (parent 9)
-  (unrealized (2 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton pca
-  (vars (t a a-0 text) (ki kp ke km ki-0 km-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((2 0) (4 0)) ((3 0) (1 0))
-    ((3 0) (4 0)) ((3 2) (0 0)) ((4 1) (3 1)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ki-0)
-    (invk km-0))
-  (uniq-orig ki ki-0)
-  (operation encryption-test (displaced 5 2 tpm 1)
-    (enc t ke-0 (invk km-1)) (4 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km)))))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke))))
-  (label 14)
-  (parent 11)
-  (seen 10)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton pca
-  (vars (t a a-0 text) (ki kp ke km ki-0 km-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((3 0) (1 0)) ((3 0) (4 0))
-    ((3 2) (0 0)) ((4 1) (3 1)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ki-0)
-    (invk km-0))
-  (uniq-orig ki ki-0)
-  (operation encryption-test (displaced 5 3 tpm 1)
-    (enc t ke-0 (invk km-1)) (4 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km)))))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (send (enc (enc ki a t (invk kp)) ke))))
-  (label 15)
-  (parent 11)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton pca
-  (vars (t a a-0 a-1 text) (ki kp ke km ki-0 km-0 ke-0 km-1 ki-1 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke-0) (ki ki) (km km-1) (kp kp))
-  (defstrand tpm 1 (t t) (a a-1) (ke ke-0) (ki ki-1) (km km-1))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((3 0) (1 0)) ((3 0) (4 0))
-    ((3 2) (0 0)) ((4 1) (3 1)) ((5 0) (4 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ki-0)
-    (invk km-0) (invk ke-0) (invk km-1) (invk ki-1))
-  (uniq-orig ki ki-0 ki-1)
-  (operation encryption-test (added-strand tpm 1)
-    (enc t ke-0 (invk km-1)) (4 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km)))))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke-0 (invk km-1))))
-      (send (enc (enc ki a t (invk kp)) ke-0)))
-    ((send (cat (enc ki-1 a-1 (invk ki-1)) (enc t ke-0 (invk km-1))))))
-  (label 16)
-  (parent 11)
-  (unrealized (3 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton pca
-  (vars (a t a-0 text) (ki kp km ke km-0 ki-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km-0))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((2 0) (3 0)) ((2 2) (0 0))
-    ((3 1) (2 1)) ((4 0) (3 0)))
-  (non-orig (invk ki) (invk kp) (invk km) (invk ke) (invk km-0)
-    (invk ki-0))
-  (uniq-orig ki ki-0)
-  (operation encryption-test (contracted (ke-0 ke))
-    (enc ki a t (invk kp)) (2 1) (enc (enc ki a t (invk kp)) ke))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km-0))))))
-  (label 17)
-  (parent 13)
-  (seen 10)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton pca
-  (vars (a t a-0 text) (ki kp ke km ke-0 km-0 ki-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke-0) (ki ki) (km km-0) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke-0) (ki ki-0) (km km-0))
-  (precedes ((1 1) (2 1)) ((2 0) (1 0)) ((2 0) (3 0)) ((2 2) (0 0))
-    ((3 1) (2 1)) ((4 0) (3 0)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ke-0)
-    (invk km-0) (invk ki-0))
-  (uniq-orig ki ki-0)
-  (operation encryption-test (displaced 5 1 pca 2)
-    (enc ki a t (invk kp)) (2 1) (enc (enc ki a t (invk kp)) ke-0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke-0 (invk km-0))))
-      (send (enc (enc ki a t (invk kp)) ke-0)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke-0 (invk km-0))))))
-  (label 18)
-  (parent 13)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton pca
-  (vars (a t a-0 text) (ki kp ke km ke-0 km-0 ki-0 ke-1 km-1 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke-0) (ki ki) (km km-0) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke-0) (ki ki-0) (km km-0))
-  (defstrand pca 2 (t t) (a a) (ke ke-1) (ki ki) (km km-1) (kp kp))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((2 0) (3 0)) ((2 0) (5 0))
-    ((2 2) (0 0)) ((3 1) (2 1)) ((4 0) (3 0)) ((5 1) (2 1)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ke-0)
-    (invk km-0) (invk ki-0) (invk ke-1) (invk km-1))
-  (uniq-orig ki ki-0)
-  (operation encryption-test (added-strand pca 2) (enc ki a t (invk kp))
-    (2 1) (enc (enc ki a t (invk kp)) ke-0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke-0 (invk km-0))))
-      (send (enc (enc ki a t (invk kp)) ke-0)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke-0 (invk km-0)))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke-1 (invk km-1))))
-      (send (enc (enc ki a t (invk kp)) ke-1))))
-  (label 19)
-  (parent 13)
-  (seen 13)
-  (unrealized (2 1) (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton pca
-  (vars (t a a-0 text) (ki kp ke km ki-0 km-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (precedes ((1 0) (0 0)) ((2 0) (3 0)) ((2 2) (0 0)) ((3 1) (2 1)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ki-0)
-    (invk km-0))
-  (uniq-orig ki ki-0)
-  (operation generalization deleted (1 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km)))))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (send (enc (enc ki a t (invk kp)) ke))))
-  (label 20)
-  (parent 15)
-  (seen 8)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton pca
-  (vars (t a a-0 a-1 text) (ki kp km ki-0 km-0 ke km-1 ki-1 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km-1) (kp kp))
-  (defstrand tpm 1 (t t) (a a-1) (ke ke) (ki ki-1) (km km-1))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((3 0) (1 0)) ((3 0) (4 0))
-    ((3 2) (0 0)) ((4 1) (3 1)) ((5 0) (4 0)))
-  (non-orig (invk ki) (invk kp) (invk km) (invk ki-0) (invk km-0)
-    (invk ke) (invk km-1) (invk ki-1))
-  (uniq-orig ki ki-0 ki-1)
-  (operation encryption-test (contracted (ke-0 ke))
-    (enc ki a t (invk kp)) (3 1) (enc (enc ki a t (invk kp)) ke))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km)))))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km-1))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki-1 a-1 (invk ki-1)) (enc t ke (invk km-1))))))
-  (label 21)
-  (parent 16)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton pca
-  (vars (t a a-0 a-1 text)
-    (ki kp ke km ki-0 km-0 ke-0 km-1 ki-1 ke-1 km-2 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke-0) (ki ki) (km km-1) (kp kp))
-  (defstrand tpm 1 (t t) (a a-1) (ke ke-0) (ki ki-1) (km km-1))
-  (defstrand pca 2 (t t) (a a) (ke ke-1) (ki ki) (km km-2) (kp kp))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)) ((3 0) (1 0)) ((3 0) (4 0))
-    ((3 0) (6 0)) ((3 2) (0 0)) ((4 1) (3 1)) ((5 0) (4 0))
-    ((6 1) (3 1)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ki-0)
-    (invk km-0) (invk ke-0) (invk km-1) (invk ki-1) (invk ke-1)
-    (invk km-2))
-  (uniq-orig ki ki-0 ki-1)
-  (operation encryption-test (added-strand pca 2) (enc ki a t (invk kp))
-    (3 1) (enc (enc ki a t (invk kp)) ke-0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km)))))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke-0 (invk km-1))))
-      (send (enc (enc ki a t (invk kp)) ke-0)))
-    ((send (cat (enc ki-1 a-1 (invk ki-1)) (enc t ke-0 (invk km-1)))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke-1 (invk km-2))))
-      (send (enc (enc ki a t (invk kp)) ke-1))))
-  (label 22)
-  (parent 16)
-  (seen 16)
-  (unrealized (3 1) (6 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton pca
-  (vars (a t a-0 text) (ki kp ke km ke-0 km-0 ki-0 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke-0) (ki ki-0) (km km-0))
-  (precedes ((1 1) (2 1)) ((2 0) (1 0)) ((2 2) (0 0)) ((3 0) (2 1)))
-  (non-orig (invk ki) (invk kp) (invk ke) (invk km) (invk ke-0)
-    (invk km-0) (invk ki-0))
-  (uniq-orig ki ki-0)
-  (operation generalization deleted (3 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke-0 (invk km-0))))))
-  (label 23)
-  (parent 18)
-  (seen 8)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton pca
-  (vars (t a a-0 a-1 text) (ki kp km ki-0 km-0 ke km-1 ki-1 akey))
-  (defstrand appr 1 (t t) (a a) (ki ki) (kp kp))
-  (defstrand tpm 1 (t t) (a a-0) (ke ke) (ki ki-0) (km km))
-  (defstrand tpm 3 (t t) (a a) (ke ke) (ki ki) (km km-0) (kp kp))
-  (defstrand pca 2 (t t) (a a) (ke ke) (ki ki) (km km-1) (kp kp))
-  (defstrand tpm 1 (t t) (a a-1) (ke ke) (ki ki-1) (km km-1))
-  (precedes ((1 0) (0 0)) ((2 0) (3 0)) ((2 2) (0 0)) ((3 1) (2 1))
-    ((4 0) (3 0)))
-  (non-orig (invk ki) (invk kp) (invk km) (invk ki-0) (invk km-0)
-    (invk ke) (invk km-1) (invk ki-1))
-  (uniq-orig ki ki-0 ki-1)
-  (operation generalization deleted (1 0))
-  (traces ((recv (enc ki a t (invk kp))))
-    ((send (cat (enc ki-0 a-0 (invk ki-0)) (enc t ke (invk km)))))
-    ((send (cat (enc ki a (invk ki)) (enc t ke (invk km-0))))
-      (recv (enc (enc ki a t (invk kp)) ke))
-      (send (enc ki a t (invk kp))))
-    ((recv (cat (enc ki a (invk ki)) (enc t ke (invk km-1))))
-      (send (enc (enc ki a t (invk kp)) ke)))
-    ((send (cat (enc ki-1 a-1 (invk ki-1)) (enc t ke (invk km-1))))))
-  (label 24)
-  (parent 21)
-  (seen 10)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
diff --git a/tst/pen-non-orig-test.scm b/tst/pen-non-orig-test.scm
deleted file mode 100644
--- a/tst/pen-non-orig-test.scm
+++ /dev/null
@@ -1,29 +0,0 @@
-;; This is to test the pen-non-orig declaration.
-;; The password, pwd, should not be known to the
-;; penetrator at the outset.  Thus, even over an
-;; unencrypted channel, the server should infer
-;; a good client.  However, the password is
-;; learned in the process, hence the skeleton
-;; with a listener will also be realized.
-
-(herald "pen-non-orig test")
-
-(defprotocol pennonorigtest basic
-  (defrole client
-    (vars (userid name) (pwd text))
-    (trace
-     (send (cat userid pwd))))
-  (defrole server
-    (vars (userid name) (pwd text))
-    (trace
-     (recv (cat userid pwd)))
-    (pen-non-orig pwd)))
-
-(defskeleton pennonorigtest
-  (vars (pwd text))
-  (defstrand server 1 (pwd pwd)))
-
-(defskeleton pennonorigtest
-  (vars (pwd text))
-  (defstrand server 1 (pwd pwd))
-  (deflistener pwd))
diff --git a/tst/pen-non-orig-test.tst b/tst/pen-non-orig-test.tst
deleted file mode 100644
--- a/tst/pen-non-orig-test.tst
+++ /dev/null
@@ -1,112 +0,0 @@
-(herald "pen-non-orig test")
-
-(comment "CPSA 2.5.4")
-(comment "All input read from pen-non-orig-test.scm")
-
-(defprotocol pennonorigtest basic
-  (defrole client
-    (vars (userid name) (pwd text))
-    (trace (send (cat userid pwd))))
-  (defrole server
-    (vars (userid name) (pwd text))
-    (trace (recv (cat userid pwd)))
-    (pen-non-orig pwd)))
-
-(defskeleton pennonorigtest
-  (vars (pwd text) (userid name))
-  (defstrand server 1 (pwd pwd) (userid userid))
-  (pen-non-orig pwd)
-  (traces ((recv (cat userid pwd))))
-  (label 0)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton pennonorigtest
-  (vars (pwd text) (userid userid-0 name))
-  (defstrand server 1 (pwd pwd) (userid userid))
-  (defstrand client 1 (pwd pwd) (userid userid-0))
-  (precedes ((1 0) (0 0)))
-  (pen-non-orig pwd)
-  (operation nonce-test (added-strand client 1) pwd (0 0))
-  (traces ((recv (cat userid pwd))) ((send (cat userid-0 pwd))))
-  (label 1)
-  (parent 0)
-  (unrealized)
-  (shape)
-  (maps ((0) ((pwd pwd) (userid userid))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol pennonorigtest basic
-  (defrole client
-    (vars (userid name) (pwd text))
-    (trace (send (cat userid pwd))))
-  (defrole server
-    (vars (userid name) (pwd text))
-    (trace (recv (cat userid pwd)))
-    (pen-non-orig pwd)))
-
-(defskeleton pennonorigtest
-  (vars (pwd text) (userid name))
-  (defstrand server 1 (pwd pwd) (userid userid))
-  (deflistener pwd)
-  (pen-non-orig pwd)
-  (traces ((recv (cat userid pwd))) ((recv pwd) (send pwd)))
-  (label 2)
-  (unrealized (0 0) (1 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton pennonorigtest
-  (vars (pwd text) (userid userid-0 name))
-  (defstrand server 1 (pwd pwd) (userid userid))
-  (deflistener pwd)
-  (defstrand client 1 (pwd pwd) (userid userid-0))
-  (precedes ((2 0) (1 0)))
-  (pen-non-orig pwd)
-  (operation nonce-test (added-strand client 1) pwd (1 0))
-  (traces ((recv (cat userid pwd))) ((recv pwd) (send pwd))
-    ((send (cat userid-0 pwd))))
-  (label 3)
-  (parent 2)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton pennonorigtest
-  (vars (pwd text) (userid userid-0 name))
-  (defstrand server 1 (pwd pwd) (userid userid))
-  (deflistener pwd)
-  (defstrand client 1 (pwd pwd) (userid userid-0))
-  (precedes ((2 0) (0 0)) ((2 0) (1 0)))
-  (pen-non-orig pwd)
-  (operation nonce-test (displaced 3 2 client 1) pwd (0 0))
-  (traces ((recv (cat userid pwd))) ((recv pwd) (send pwd))
-    ((send (cat userid-0 pwd))))
-  (label 4)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((pwd pwd) (userid userid))))
-  (origs))
-
-(defskeleton pennonorigtest
-  (vars (pwd text) (userid userid-0 userid-1 name))
-  (defstrand server 1 (pwd pwd) (userid userid))
-  (deflistener pwd)
-  (defstrand client 1 (pwd pwd) (userid userid-0))
-  (defstrand client 1 (pwd pwd) (userid userid-1))
-  (precedes ((2 0) (1 0)) ((3 0) (0 0)))
-  (pen-non-orig pwd)
-  (operation nonce-test (added-strand client 1) pwd (0 0))
-  (traces ((recv (cat userid pwd))) ((recv pwd) (send pwd))
-    ((send (cat userid-0 pwd))) ((send (cat userid-1 pwd))))
-  (label 5)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((pwd pwd) (userid userid))))
-  (origs))
-
-(comment "Nothing left to do")
diff --git a/tst/pkinit.scm b/tst/pkinit.scm
--- a/tst/pkinit.scm
+++ b/tst/pkinit.scm
@@ -1,6 +1,52 @@
-(herald "Kerberos PK init")
+(herald "Kerberos PKINIT")
 
-(defprotocol pkinit basic
+;;; This file includes three versions of the Kerberos PKINIT
+;;; protocol. The first version is the flawed version that Cervesato
+;;; et al. analyzed in "Breaking and Fixing Public-Key Kerberos." The
+;;; other two versions are the two fixes that are explored in the same
+;;; paper.
+
+;;; We also express the goal that the authors identify as a property
+;;; not met by the original flawed version, but which both fixes do
+;;; achieve. Running CPSA with this input demonstrates that the flawed
+;;; version does not satisfy the goal, but both fixed versions do.
+
+;;; How to use this file:
+;;;
+;;; CPSA looks at the goal and creates an initial point of view that
+;;; corresponds to the information contained in the antecedent of the
+;;; implication of the goal. It then outputs a characterization
+;;; (consisting of shapes) of all executions containing at least the
+;;; structure contained in the point of view. It then evaluates the
+;;; goal against each of those shapes. The guarantee CPSA provides is
+;;; that a goal is achieved iff each of the shapes satisfies the goal.
+
+;;; We can look at the output in pkinit.xhtml to determine what CPSA
+;;; discovered. Notice that the shape associated with the first
+;;; analysis (of the flawed version) contains an annotation that says
+;;; (satisfies (no (c c) (as as) (k k) (z (0 1)))). This means that
+;;; the goal is not satisfied. The pairs of terms represent a variable
+;;; assignment for the logical variables of the goal into elements of
+;;; the shape. This is the variable assignment of the antecendant
+;;; which has no extension for which the conclusion is also
+;;; satisfied. The shapes for the other analyses contain the
+;;; annotation (satisfies yes) indicating that the goal is satisfied
+;;; in the shape (and hence in any realized skeleton). 
+
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;                       ;;
+;; Protocol Descriptions ;;
+;;                       ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+;; This is the flawed version of the Kerberos public key initial
+;; round. 
+(defprotocol pkinit-flawed basic
   (defrole client
     (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
     (trace (send (cat (enc tc n2 (privk c)) c t n1))
@@ -16,7 +62,150 @@
           (enc ak n1 tk t k))))
     (uniq-orig k ak)))
 
-(defskeleton pkinit
-  (vars (c as name))
-  (defstrand client 2 (c c) (as as))
-  (non-orig (privk c) (privk as)))
+
+;; This is the fix the authors proposed to the standards group. It
+;; adds the value c in a new field inside the server's signature.
+(defprotocol pkinit-fix1 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig n1 n2))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig k ak)))
+
+;; This is the fix that the standards group proposed and adopted. It
+;; replaces n2 in the server's with a hash of the entire first
+;; message.
+(defprotocol pkinit-fix2 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k (hash (cat (enc tc n2 (privk c)) c t n1))
+                       (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig n1 n2))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k (hash (cat (enc tc n2 (privk c)) c t n1))
+                       (privk as)) (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig k ak)))
+
+
+;;;;;;;;;;;;;;;;;;;;;
+;;                 ;; 
+;; Goal Statements ;;
+;;                 ;;
+;;;;;;;;;;;;;;;;;;;;;
+
+;; This is the goal that the authors discovered was not met by the
+;; original, flawed version, but which was met by both fixes.
+(defgoal pkinit-flawed
+  (forall ((c as name) (k skey) (z node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (non (privk as))
+                (non (privk c)))
+           (exists ((z-0 node))
+                   (and (p "auth" 1 z-0)
+                        (p "auth" "as" z-0 as)
+                        (p "auth" "k" z-0 k)
+                        (p "auth" "c" z-0 c))))))
+
+;; Since we reference the protocol in the expression of the goal, we
+;; must repeat it once for every protocol against which we would like
+;; to evaluate the goal.
+(defgoal pkinit-fix1
+  (forall ((c as name) (k skey) (z node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (non (privk as))
+                (non (privk c)))
+           (exists ((z-0 node))
+                   (and (p "auth" 1 z-0)
+                        (p "auth" "as" z-0 as)
+                        (p "auth" "k" z-0 k)
+                        (p "auth" "c" z-0 c))))))
+
+;; Repeated once more.
+(defgoal pkinit-fix2
+  (forall ((c as name) (k skey) (z node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (non (privk as))
+                (non (privk c)))
+           (exists ((z-0 node))
+                   (and (p "auth" 1 z-0)
+                        (p "auth" "as" z-0 as)
+                        (p "auth" "k" z-0 k)
+                        (p "auth" "c" z-0 c))))))
+
+
+;;;;;;;;
+
+(defgoal pkinit-flawed
+  (forall ((c c-0 as name) (k skey) (z z-0 node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (p "auth" 1 z-0)
+                (p "auth" "k" z-0 k)
+                (p "auth" "c" z-0 c-0)
+                (non (privk as))
+                (non (privk c)))
+           ;(exists ((z-1 node))
+           ;        (p "client" 1 z-1))
+           (= c c-0)
+           )))
+
+(defgoal pkinit-fix1
+  (forall ((c c-0 as name) (k skey) (z z-0 node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (p "auth" 1 z-0)
+                (p "auth" "k" z-0 k)
+                (p "auth" "c" z-0 c-0)
+                (non (privk as))
+                (non (privk c)))
+           (exists ((z-1 node))
+                   (p "client" 1 z-1))
+           ;(= c c-0)
+           )))
+
+(defgoal pkinit-fix2
+  (forall ((c c-0 as name) (k skey) (z z-0 node))
+          (implies
+           (and (p "client" 1 z)
+                (p "client" "c" z c)
+                (p "client" "as" z as)
+                (p "client" "k" z k)
+                (p "auth" 1 z-0)
+                (p "auth" "k" z-0 k)
+                (p "auth" "c" z-0 c-0)
+                (non (privk as))
+                (non (privk c)))
+           (exists ((z-1 node))
+                   (p "client" 1 z-1)))))
diff --git a/tst/pkinit.tst b/tst/pkinit.tst
--- a/tst/pkinit.tst
+++ b/tst/pkinit.tst
@@ -1,9 +1,9 @@
-(herald "Kerberos PK init")
+(herald "Kerberos PKINIT")
 
-(comment "CPSA 2.5.4")
+(comment "CPSA 3.2.2")
 (comment "All input read from pkinit.scm")
 
-(defprotocol pkinit basic
+(defprotocol pkinit-flawed basic
   (defrole client
     (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
     (trace (send (cat (enc tc n2 (privk c)) c t n1))
@@ -19,12 +19,21 @@
           (enc ak n1 tk t k))))
     (uniq-orig k ak)))
 
-(defskeleton pkinit
+(defskeleton pkinit-flawed
   (vars (n2 n1 text) (tc tk tgt data) (c as t name) (k ak skey))
   (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
     (t t) (as as) (k k) (ak ak))
   (non-orig (privk c) (privk as))
   (uniq-orig n2 n1)
+  (goals
+    (forall ((c as name) (k skey) (z node))
+      (implies
+        (and (p "client" 1 z) (p "client" "c" z c)
+          (p "client" "as" z as) (p "client" "k" z k) (non (privk as))
+          (non (privk c)))
+        (exists ((z-0 node))
+          (and (p "auth" 1 z-0) (p "auth" "as" z-0 as)
+            (p "auth" "k" z-0 k) (p "auth" "c" z-0 c))))))
   (traces
     ((send (cat (enc tc n2 (privk c)) c t n1))
       (recv
@@ -32,10 +41,10 @@
           (enc ak n1 tk t k)))))
   (label 0)
   (unrealized (0 1))
-  (origs (n2 (0 0)) (n1 (0 0)))
+  (origs (n1 (0 0)) (n2 (0 0)))
   (comment "1 in cohort - 1 not yet seen"))
 
-(defskeleton pkinit
+(defskeleton pkinit-flawed
   (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
     (c as t c-0 t-0 name) (k ak ak-0 skey))
   (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
@@ -60,10 +69,888 @@
   (parent 0)
   (unrealized)
   (shape)
+  (satisfies (no (c c) (as as) (k k) (z (0 1))))
   (maps
     ((0)
-      ((c c) (as as) (t t) (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt)
-        (k k) (ak ak))))
-  (origs (k (1 1)) (ak-0 (1 1)) (n2 (0 0)) (n1 (0 0))))
+      ((c c) (as as) (k k) (t t) (n2 n2) (n1 n1) (tc tc) (tk tk)
+        (tgt tgt) (ak ak))))
+  (origs (k (1 1)) (ak-0 (1 1)) (n1 (0 0)) (n2 (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol pkinit-fix1 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig n2 n1))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig k ak)))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 text) (tc tk tgt data) (c as t name) (k ak skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1)
+  (goals
+    (forall ((c as name) (k skey) (z node))
+      (implies
+        (and (p "client" 1 z) (p "client" "c" z c)
+          (p "client" "as" z as) (p "client" "k" z k) (non (privk as))
+          (non (privk c)))
+        (exists ((z-0 node))
+          (and (p "auth" 1 z-0) (p "auth" "as" z-0 as)
+            (p "auth" "k" z-0 k) (p "auth" "c" z-0 c))))))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k)))))
+  (label 2)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c as t t-0 name) (k ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak-0)
+  (operation encryption-test (added-strand auth 2)
+    (enc k n2 c (privk as)) (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((recv (cat (enc tc-0 n2 (privk c)) c t-0 n1-0))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 3)
+  (parent 2)
+  (unrealized (0 1) (1 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tk-0 tgt-0 data) (c as t t-0 name)
+    (k ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1-0) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak-0)
+  (operation encryption-test (displaced 2 0 client 1)
+    (enc tc-0 n2 (privk c)) (1 0))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t-0 n1-0))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 4)
+  (parent 3)
+  (unrealized (0 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 text) (tc tgt tk tgt-0 data) (c as t name) (k ak skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 1 auth 2)
+    (enc ak-0 n1-0 tk-0 t-0 k) (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak n1 tk t k)))))
+  (label 5)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps
+    ((0)
+      ((c c) (as as) (k k) (t t) (n2 n2) (n1 n1) (tc tc) (tk tk)
+        (tgt tgt) (ak ak))))
+  (origs (k (1 1)) (ak (1 1)) (n1 (0 0)) (n2 (0 0))))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tk-0 tgt-0 data) (c as t t-0 name)
+    (k ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1-0) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (deflistener k)
+  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak-0)
+  (operation encryption-test (added-listener k) (enc ak n1 tk t k)
+    (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t-0 n1-0))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))) ((recv k) (send k)))
+  (label 6)
+  (parent 4)
+  (unrealized (2 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tk-0 tgt-0 data) (c as t t-0 name)
+    (ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k ak-0) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1-0) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k ak-0) (ak ak-0))
+  (deflistener ak-0)
+  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 ak-0)
+  (operation nonce-test (displaced 3 1 auth 2) k (2 0)
+    (enc (enc k n2 c (privk as)) (pubk c)))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc ak-0 n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t ak-0))))
+    ((recv (cat (enc tc n2 (privk c)) c t-0 n1-0))
+      (send
+        (cat (enc (enc ak-0 n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 ak-0)))) ((recv ak-0) (send ak-0)))
+  (label 7)
+  (parent 6)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol pkinit-fix2 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig n2 n1))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig k ak)))
+
+(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt data) (c as t name) (k ak skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1)
+  (goals
+    (forall ((c as name) (k skey) (z node))
+      (implies
+        (and (p "client" 1 z) (p "client" "c" z c)
+          (p "client" "as" z as) (p "client" "k" z k) (non (privk as))
+          (non (privk c)))
+        (exists ((z-0 node))
+          (and (p "auth" 1 z-0) (p "auth" "as" z-0 as)
+            (p "auth" "k" z-0 k) (p "auth" "c" z-0 c))))))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k)))))
+  (label 8)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c as t name)
+    (k ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak-0))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak-0)
+  (operation encryption-test (added-strand auth 2)
+    (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as)) (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k)))))
+  (label 9)
+  (parent 8)
+  (unrealized (0 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tgt tk tgt-0 data) (c as t name) (k ak skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 1 auth 2)
+    (enc ak-0 n1 tk-0 t k) (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak n1 tk t k)))))
+  (label 10)
+  (parent 9)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps
+    ((0)
+      ((c c) (as as) (k k) (t t) (n2 n2) (n1 n1) (tc tc) (tk tk)
+        (tgt tgt) (ak ak))))
+  (origs (k (1 1)) (ak (1 1)) (n1 (0 0)) (n2 (0 0))))
+
+(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c as t name)
+    (k ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak-0))
+  (deflistener k)
+  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak-0)
+  (operation encryption-test (added-listener k) (enc ak n1 tk t k)
+    (0 1))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k))))
+    ((recv k) (send k)))
+  (label 11)
+  (parent 9)
+  (unrealized (2 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c as t name)
+    (ak ak-0 skey))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k ak-0) (ak ak))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0) (c c)
+    (t t) (as as) (k ak-0) (ak ak-0))
+  (deflistener ak-0)
+  (precedes ((0 0) (1 0)) ((1 1) (2 0)) ((2 1) (0 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 ak-0)
+  (operation nonce-test (displaced 3 1 auth 2) k (2 0)
+    (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+      (pubk c)))
+  (traces
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc ak-0 (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t ak-0))))
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc ak-0 (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t ak-0))))
+    ((recv ak-0) (send ak-0)))
+  (label 12)
+  (parent 11)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol pkinit-flawed basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig n2 n1))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig k ak)))
+
+(defskeleton pkinit-flawed
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (goals
+    (forall ((c c-0 as name) (k skey) (z z-0 node))
+      (implies
+        (and (p "client" 1 z) (p "client" "c" z c)
+          (p "client" "as" z as) (p "client" "k" z k) (p "auth" 1 z-0)
+          (p "auth" "k" z-0 k) (p "auth" "c" z-0 c-0) (non (privk as))
+          (non (privk c))) (= c c-0))))
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat (enc (enc k n2 (privk as-0)) (pubk c-0)) c-0 tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2-0 (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 13)
+  (unrealized (1 1))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton pkinit-flawed
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat (enc (enc k n2 (privk as-0)) (pubk c-0)) c-0 tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2-0 (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 14)
+  (parent 13)
+  (unrealized (1 1))
+  (origs (n1-0 (1 0)) (n2-0 (1 0)) (k (0 1)) (ak (0 1)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton pkinit-flawed
+  (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 t as t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1-0 k ak)
+  (operation encryption-test (displaced 2 0 auth 2)
+    (enc k n2-0 (privk as-0)) (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat (enc (enc k n2 (privk as)) (pubk c-0)) c-0 tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2 (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 15)
+  (parent 14)
+  (unrealized)
+  (shape)
+  (satisfies (no (c c) (c-0 c-0) (as as) (k k) (z (1 1)) (z-0 (0 1))))
+  (maps
+    ((0 1)
+      ((c c) (c-0 c-0) (as as) (k k) (t t) (as-0 as) (n2 n2) (n1 n1)
+        (tc tc) (tk tk) (tgt tgt) (ak ak) (t-0 t-0) (n2-0 n2)
+        (n1-0 n1-0) (tc-0 tc-0) (tk-0 tk-0) (tgt-0 tgt-0) (ak-0 ak-0))))
+  (origs (k (0 1)) (ak (0 1)) (n1-0 (1 0)) (n2 (1 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol pkinit-fix1 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig n2 n1))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    (uniq-orig k ak)))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (goals
+    (forall ((c c-0 as name) (k skey) (z z-0 node))
+      (implies
+        (and (p "client" 1 z) (p "client" "c" z c)
+          (p "client" "as" z as) (p "client" "k" z k) (p "auth" 1 z-0)
+          (p "auth" "k" z-0 k) (p "auth" "c" z-0 c-0) (non (privk as))
+          (non (privk c))) (exists ((z-1 node)) (p "client" 1 z-1)))))
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat (enc (enc k n2 c-0 (privk as-0)) (pubk c-0)) c-0 tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2-0 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 16)
+  (unrealized (1 1))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat (enc (enc k n2 c-0 (privk as-0)) (pubk c-0)) c-0 tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2-0 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 17)
+  (parent 16)
+  (unrealized (1 1))
+  (origs (n1-0 (1 0)) (n2-0 (1 0)) (k (0 1)) (ak (0 1)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c t as t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1-0 k ak)
+  (operation encryption-test (displaced 2 0 auth 2)
+    (enc k n2-0 c-0 (privk as-0)) (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 18)
+  (parent 17)
+  (unrealized (0 0) (1 1))
+  (origs (k (0 1)) (ak (0 1)) (n1-0 (1 0)) (n2 (1 0)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 text) (tc tk tgt tc-0 tgt-0 data) (c t as name)
+    (k ak skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc-0) (tk tk) (tgt tgt-0)
+    (c c) (t t) (as as) (k k) (ak ak))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 0 auth 2)
+    (enc ak-0 n1-0 tk-0 t-0 k) (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak n1 tk t k)))))
+  (label 19)
+  (parent 18)
+  (unrealized (0 0))
+  (origs (k (0 1)) (ak (0 1)) (n1 (1 0)) (n2 (1 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c t as t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (deflistener k)
+  (precedes ((0 1) (2 0)) ((1 0) (0 0)) ((2 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1-0 k ak)
+  (operation encryption-test (added-listener k)
+    (enc ak-0 n1-0 tk-0 t-0 k) (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))) ((recv k) (send k)))
+  (label 20)
+  (parent 18)
+  (unrealized (0 0) (2 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 text) (tk tgt tc tgt-0 data) (c t as name) (k ak skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 1 client 1)
+    (enc tc-0 n2 (privk c)) (0 0))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t k))))
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat (enc (enc k n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak n1 tk t k)))))
+  (label 21)
+  (parent 19)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps
+    ((0 1)
+      ((c c) (c-0 c) (as as) (k k) (t t) (as-0 as) (n2 n2) (n1 n1)
+        (tc tc) (tk tk) (tgt tgt) (ak ak) (t-0 t) (n2-0 n2) (n1-0 n1)
+        (tc-0 tc) (tk-0 tk) (tgt-0 tgt-0) (ak-0 ak))))
+  (origs (n1 (1 0)) (n2 (1 0)) (k (0 1)) (ak (0 1))))
+
+(defskeleton pkinit-fix1
+  (vars (n2 n1 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c t as t-0 name) (ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k ak) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1-0) (tc tc-0) (tk tk-0) (tgt tgt-0)
+    (c c) (t t-0) (as as) (k ak) (ak ak-0))
+  (deflistener ak)
+  (precedes ((0 1) (2 0)) ((1 0) (0 0)) ((2 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1-0 ak)
+  (operation nonce-test (displaced 3 0 auth 2) k (2 0)
+    (enc (enc k n2 c (privk as)) (pubk c)))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat (enc (enc ak n2 c (privk as)) (pubk c)) c tgt
+          (enc ak n1 tk t ak))))
+    ((send (cat (enc tc-0 n2 (privk c)) c t-0 n1-0))
+      (recv
+        (cat (enc (enc ak n2 c (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 ak)))) ((recv ak) (send ak)))
+  (label 22)
+  (parent 20)
+  (unrealized (0 0) (2 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol pkinit-fix2 basic
+  (defrole client
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig n2 n1))
+  (defrole auth
+    (vars (c t as name) (n2 n1 text) (tc tk tgt data) (k ak skey))
+    (trace (recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    (uniq-orig k ak)))
+
+(defskeleton pkinit-fix2
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (goals
+    (forall ((c c-0 as name) (k skey) (z z-0 node))
+      (implies
+        (and (p "client" 1 z) (p "client" "c" z c)
+          (p "client" "as" z as) (p "client" "k" z k) (p "auth" 1 z-0)
+          (p "auth" "k" z-0 k) (p "auth" "c" z-0 c-0) (non (privk as))
+          (non (privk c))) (exists ((z-1 node)) (p "client" 1 z-1)))))
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat
+          (enc
+            (enc k (hash (enc tc n2 (privk c-0)) c-0 t n1) (privk as-0))
+            (pubk c-0)) c-0 tgt (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat
+          (enc
+            (enc k (hash (enc tc-0 n2-0 (privk c)) c t-0 n1-0)
+              (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 23)
+  (unrealized (1 1))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton pkinit-fix2
+  (vars (n2 n1 n2-0 n1-0 text) (tc tk tgt tc-0 tk-0 tgt-0 data)
+    (c c-0 as t as-0 t-0 name) (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c-0)
+    (t t) (as as-0) (k k) (ak ak))
+  (defstrand client 2 (n2 n2-0) (n1 n1-0) (tc tc-0) (tk tk-0)
+    (tgt tgt-0) (c c) (t t-0) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2-0 n1-0 k ak)
+  (traces
+    ((recv (cat (enc tc n2 (privk c-0)) c-0 t n1))
+      (send
+        (cat
+          (enc
+            (enc k (hash (enc tc n2 (privk c-0)) c-0 t n1) (privk as-0))
+            (pubk c-0)) c-0 tgt (enc ak n1 tk t k))))
+    ((send (cat (enc tc-0 n2-0 (privk c)) c t-0 n1-0))
+      (recv
+        (cat
+          (enc
+            (enc k (hash (enc tc-0 n2-0 (privk c)) c t-0 n1-0)
+              (privk as)) (pubk c)) c tgt-0
+          (enc ak-0 n1-0 tk-0 t-0 k)))))
+  (label 24)
+  (parent 23)
+  (unrealized (1 1))
+  (origs (n1-0 (1 0)) (n2-0 (1 0)) (k (0 1)) (ak (0 1)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c t as name)
+    (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t) (as as) (k k) (ak ak-0))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 0 auth 2)
+    (enc k (hash (enc tc-0 n2-0 (privk c-0)) c-0 t-0 n1-0) (privk as-0))
+    (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k)))))
+  (label 25)
+  (parent 24)
+  (unrealized (1 1))
+  (origs (k (0 1)) (ak (0 1)) (n1 (1 0)) (n2 (1 0)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tgt-0 data) (c t as name) (k ak skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt-0) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (displaced 2 0 auth 2)
+    (enc ak-0 n1 tk-0 t k) (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak n1 tk t k)))))
+  (label 26)
+  (parent 25)
+  (unrealized)
+  (shape)
+  (satisfies yes)
+  (maps
+    ((0 1)
+      ((c c) (c-0 c) (as as) (k k) (t t) (as-0 as) (n2 n2) (n1 n1)
+        (tc tc) (tk tk) (tgt tgt) (ak ak) (t-0 t) (n2-0 n2) (n1-0 n1)
+        (tc-0 tc) (tk-0 tk) (tgt-0 tgt-0) (ak-0 ak))))
+  (origs (k (0 1)) (ak (0 1)) (n1 (1 0)) (n2 (1 0))))
+
+(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c t as name)
+    (k ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k k) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t) (as as) (k k) (ak ak-0))
+  (deflistener k)
+  (precedes ((0 1) (2 0)) ((1 0) (0 0)) ((2 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 k ak)
+  (operation encryption-test (added-listener k) (enc ak-0 n1 tk-0 t k)
+    (1 1))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t k))))
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t k))))
+    ((recv k) (send k)))
+  (label 27)
+  (parent 25)
+  (unrealized (2 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton pkinit-fix2
+  (vars (n2 n1 text) (tc tk tgt tk-0 tgt-0 data) (c t as name)
+    (ak ak-0 skey))
+  (defstrand auth 2 (n2 n2) (n1 n1) (tc tc) (tk tk) (tgt tgt) (c c)
+    (t t) (as as) (k ak) (ak ak))
+  (defstrand client 2 (n2 n2) (n1 n1) (tc tc) (tk tk-0) (tgt tgt-0)
+    (c c) (t t) (as as) (k ak) (ak ak-0))
+  (deflistener ak)
+  (precedes ((0 1) (2 0)) ((1 0) (0 0)) ((2 1) (1 1)))
+  (non-orig (privk c) (privk as))
+  (uniq-orig n2 n1 ak)
+  (operation nonce-test (displaced 3 0 auth 2) k (2 0)
+    (enc (enc k (hash (enc tc n2 (privk c)) c t n1) (privk as))
+      (pubk c)))
+  (traces
+    ((recv (cat (enc tc n2 (privk c)) c t n1))
+      (send
+        (cat
+          (enc (enc ak (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt (enc ak n1 tk t ak))))
+    ((send (cat (enc tc n2 (privk c)) c t n1))
+      (recv
+        (cat
+          (enc (enc ak (hash (enc tc n2 (privk c)) c t n1) (privk as))
+            (pubk c)) c tgt-0 (enc ak-0 n1 tk-0 t ak))))
+    ((recv ak) (send ak)))
+  (label 28)
+  (parent 27)
+  (unrealized (2 0))
+  (comment "empty cohort"))
 
 (comment "Nothing left to do")
diff --git a/tst/plaindh.scm b/tst/plaindh.scm
new file mode 100644
--- /dev/null
+++ b/tst/plaindh.scm
@@ -0,0 +1,26 @@
+(herald "Plain diffie-hellman protocol with challenge-response" (algebra diffie-hellman)
+; (limit 1)
+)
+
+(defprotocol plaindh diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (n text))
+    (trace (send (exp (gen) x)) 
+           (recv h) 
+           (send (enc n (exp h x)))
+           (recv n))
+    (uniq-orig n)
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (n text))
+    (trace (recv h) 
+           (send (exp (gen) y)) 
+           (recv (enc n (exp h y)))
+           (send n))
+    (uniq-gen y))
+  (comment "Diffie-hellman key exchange followed by an encryption"))
+
+
+(defskeleton plaindh
+  (vars )
+  (defstrand init 4))
diff --git a/tst/plaindh.tst b/tst/plaindh.tst
new file mode 100644
--- /dev/null
+++ b/tst/plaindh.tst
@@ -0,0 +1,127 @@
+(herald "Plain diffie-hellman protocol with challenge-response"
+  (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from plaindh.scm")
+
+(defprotocol plaindh diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (n text))
+    (trace (send (exp (gen) x)) (recv h) (send (enc n (exp h x)))
+      (recv n))
+    (uniq-orig n)
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (n text))
+    (trace (recv h) (send (exp (gen) y)) (recv (enc n (exp h y)))
+      (send n))
+    (uniq-gen y)
+    (ind-zero-in (y h)))
+  (comment "Diffie-hellman key exchange followed by an encryption"))
+
+(defskeleton plaindh
+  (vars (n text) (h base) (x expn))
+  (defstrand init 4 (n n) (h h) (x x))
+  (uniq-gen x)
+  (uniq-orig n)
+  (traces
+    ((send (exp (gen) x)) (recv h) (send (enc n (exp h x))) (recv n)))
+  (label 0)
+  (unrealized (0 3))
+  (origs (n (0 2)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton plaindh
+  (vars (n text) (h base) (x y expn))
+  (defstrand init 4 (n n) (h (exp h y)) (x x))
+  (defstrand resp 4 (n n) (h (exp h x)) (y y))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)) ((1 3) (0 3)))
+  (ind-zero-in (y (exp h x)))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test (added-strand resp 4) n (0 3)
+    (enc n (exp h (mul x y))))
+  (traces
+    ((send (exp (gen) x)) (recv (exp h y))
+      (send (enc n (exp h (mul x y)))) (recv n))
+    ((recv (exp h x)) (send (exp (gen) y))
+      (recv (enc n (exp h (mul x y)))) (send n)))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1) (1 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton plaindh
+  (vars (n text) (h base) (x expn))
+  (defstrand init 4 (n n) (h h) (x x))
+  (deflistener (exp h x))
+  (precedes ((0 0) (1 0)) ((1 1) (0 3)))
+  (uniq-gen x)
+  (uniq-orig n)
+  (operation nonce-test (added-listener (exp h x)) n (0 3)
+    (enc n (exp h x)))
+  (traces
+    ((send (exp (gen) x)) (recv h) (send (enc n (exp h x))) (recv n))
+    ((recv (exp h x)) (send (exp h x))))
+  (label 2)
+  (parent 0)
+  (unrealized (1 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton plaindh
+  (vars (n text) (x y expn) (x-0 expr))
+  (defstrand init 4 (n n) (h (exp (gen) (mul y x-0))) (x x))
+  (defstrand resp 4 (n n) (h (exp (gen) (mul x x-0))) (y y))
+  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)) ((1 3) (0 3)))
+  (ind-zero-in (y (exp (gen) (mul x x-0))))
+  (uniq-gen x y)
+  (uniq-orig n)
+  (operation nonce-test (algebra-contracted (h (exp (gen) x-0)))
+    (exp (gen) (mul x x-0)) (1 0) (exp (gen) x))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) (mul y x-0)))
+      (send (enc n (exp (gen) (mul x y x-0)))) (recv n))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) y))
+      (recv (enc n (exp (gen) (mul x y x-0)))) (send n)))
+  (label 3)
+  (parent 1)
+  (unrealized)
+  (shape)
+  (maps ((0) ((x x) (h (exp (gen) (mul y x-0))) (n n))))
+  (origs (n (0 2))))
+
+(defskeleton plaindh
+  (vars (n text) (x expn) (x-0 expr))
+  (defstrand init 4 (n n) (h (exp (gen) x-0)) (x x))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (1 0)) ((1 1) (0 3)))
+  (uniq-gen x)
+  (uniq-orig n)
+  (operation nonce-test (algebra-contracted (h (exp (gen) x-0)))
+    (exp (gen) (mul x x-0)) (1 0) (exp (gen) x))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) x-0))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0)))))
+  (label 4)
+  (parent 2)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton plaindh
+  (vars (n text) (x expn) (x-0 expr))
+  (defstrand init 4 (n n) (h (exp (gen) x-0)) (x x))
+  (uniq-gen x)
+  (uniq-orig n)
+  (operation generalization deleted (1 0))
+  (traces
+    ((send (exp (gen) x)) (recv (exp (gen) x-0))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n)))
+  (label 5)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (maps ((0) ((x x) (h (exp (gen) x-0)) (n n))))
+  (origs (n (0 2))))
+
+(comment "Nothing left to do")
diff --git a/tst/preprocess.scm b/tst/preprocess.scm
deleted file mode 100644
--- a/tst/preprocess.scm
+++ /dev/null
@@ -1,27 +0,0 @@
-(herald "Pre-processing test example: modified NS with two responders")
-
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 n3 text))
-    (trace
-     (send (enc n1 a (pubk b)))
-     (recv (enc n1 n2 n3 (pubk a)))
-     (send (enc n2 n3 (pubk b))))
-	(uniq-orig n1))
-  (defrole resp
-    (vars (a b name) (n1 n2 n3 text))
-    (trace
-     (recv (enc n1 a (pubk b)))
-     (send (enc n1 n2 n3 (pubk a)))
-     (recv (enc n2 n3 (pubk b))))
-	(uniq-orig n2 n3))
-  (comment "modified Needham-Schroeder with role origination assumptions"))
-
-;;; The initiator and two entangled responders POV
-(defskeleton ns
-  (vars (a b name) (n1 n2 n3 n2p n3p text))
-  (defstrand init 3 (a a) (b b) (n1 n1) (n2 n2) (n3 n3))
-  (defstrand resp 3 (a a) (b b) (n1 n1) (n2 n2) (n3 n3p))
-  (defstrand resp 3 (a a) (b b) (n1 n1) (n2 n2p) (n3 n3))
-  (non-orig (privk b) (privk a))
-)
diff --git a/tst/preprocess.tst b/tst/preprocess.tst
deleted file mode 100644
--- a/tst/preprocess.tst
+++ /dev/null
@@ -1,100 +0,0 @@
-(herald "Pre-processing test example: modified NS with two responders")
-
-(comment "CPSA 2.5.4")
-(comment "All input read from preprocess.scm")
-
-(defprotocol ns basic
-  (defrole init
-    (vars (a b name) (n1 n2 n3 text))
-    (trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 n3 (pubk a)))
-      (send (enc n2 n3 (pubk b))))
-    (uniq-orig n1))
-  (defrole resp
-    (vars (a b name) (n1 n2 n3 text))
-    (trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 n3 (pubk a)))
-      (recv (enc n2 n3 (pubk b))))
-    (uniq-orig n2 n3))
-  (comment
-    "modified Needham-Schroeder with role origination assumptions"))
-
-(defskeleton ns
-  (vars (n1 n2 n3 n2p n3p text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (n3 n3) (a a) (b b))
-  (defstrand resp 3 (n1 n1) (n2 n2) (n3 n3p) (a a) (b b))
-  (defstrand resp 3 (n1 n1) (n2 n2p) (n3 n3) (a a) (b b))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1 n2 n3 n2p n3p)
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 n3 (pubk a)))
-      (send (enc n2 n3 (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 n3p (pubk a)))
-      (recv (enc n2 n3p (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2p n3 (pubk a)))
-      (recv (enc n2p n3 (pubk b)))))
-  (label 0)
-  (unrealized (0 1) (1 0) (1 2) (2 0) (2 2))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton ns
-  (vars (n1 n2 n3 n2p n3p text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (n3 n3) (a a) (b b))
-  (defstrand resp 3 (n1 n1) (n2 n2) (n3 n3p) (a a) (b b))
-  (defstrand resp 3 (n1 n1) (n2 n2p) (n3 n3) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1 n2 n3 n2p n3p)
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 n3 (pubk a)))
-      (send (enc n2 n3 (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 n3p (pubk a)))
-      (recv (enc n2 n3p (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2p n3 (pubk a)))
-      (recv (enc n2p n3 (pubk b)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1) (1 2) (2 2))
-  (origs (n3 (2 1)) (n2p (2 1)) (n3p (1 1)) (n2 (1 1)) (n1 (0 0)))
-  (comment "empty cohort"))
-
-(defskeleton ns
-  (vars (n1 n2 n3p text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (n3 n3p) (a a) (b b))
-  (defstrand resp 3 (n1 n1) (n2 n2) (n3 n3p) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1 n2 n3p)
-  (operation collapsed 2 1)
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 n3p (pubk a)))
-      (send (enc n2 n3p (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 n3p (pubk a)))
-      (recv (enc n2 n3p (pubk b)))))
-  (label 2)
-  (parent 1)
-  (unrealized (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton ns
-  (vars (n1 n2 n3p text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (n3 n3p) (a a) (b b))
-  (defstrand resp 3 (n1 n1) (n2 n2) (n3 n3p) (a a) (b b))
-  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)))
-  (non-orig (privk a) (privk b))
-  (uniq-orig n1 n2 n3p)
-  (operation nonce-test (displaced 2 0 init 3) n2 (1 2)
-    (enc n1 n2 n3p (pubk a)))
-  (traces
-    ((send (enc n1 a (pubk b))) (recv (enc n1 n2 n3p (pubk a)))
-      (send (enc n2 n3p (pubk b))))
-    ((recv (enc n1 a (pubk b))) (send (enc n1 n2 n3p (pubk a)))
-      (recv (enc n2 n3p (pubk b)))))
-  (label 3)
-  (parent 2)
-  (unrealized)
-  (shape)
-  (maps
-    ((0 1 1) ((a a) (b b) (n1 n1) (n2 n2) (n3 n3p) (n2p n2) (n3p n3p))))
-  (origs (n1 (0 0)) (n3p (1 1)) (n2 (1 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/print.scm b/tst/print.scm
deleted file mode 100644
--- a/tst/print.scm
+++ /dev/null
@@ -1,13 +0,0 @@
-(herald "Print Test"
-  (comment "See if read forms look like printed ones"))
-
-(defprotocol print-test basic
-  (defrole role
-    (vars (a b akey) (f g skey) (x y data))
-    (trace (recv (cat a b f g x y)))
-    (comment "Check the order in which variables are printed")))
-
-(defskeleton print-test
-  (vars (a b akey) (f g skey) (x y data))
-  (defstrand role 1 (a a) (b b) (f f) (g g) (x x) (y y))
-  (comment "Check the order in which variables are printed"))
diff --git a/tst/print.tst b/tst/print.tst
deleted file mode 100644
--- a/tst/print.tst
+++ /dev/null
@@ -1,24 +0,0 @@
-(herald "Print Test"
-  (comment "See if read forms look like printed ones"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from print.scm")
-
-(defprotocol print-test basic
-  (defrole role
-    (vars (a b akey) (f g skey) (x y data))
-    (trace (recv (cat a b f g x y)))
-    (comment "Check the order in which variables are printed")))
-
-(defskeleton print-test
-  (vars (x y data) (f g skey) (a b akey))
-  (defstrand role 1 (x x) (y y) (f f) (g g) (a a) (b b))
-  (comment "Check the order in which variables are printed")
-  (traces ((recv (cat a b f g x y))))
-  (label 0)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (f f) (g g) (x x) (y y))))
-  (origs))
-
-(comment "Nothing left to do")
diff --git a/tst/priority_test.scm b/tst/priority_test.scm
new file mode 100644
--- /dev/null
+++ b/tst/priority_test.scm
@@ -0,0 +1,28 @@
+(herald "Receive priority test protocol"
+  )
+
+(defprotocol priority_test basic
+  (defrole init
+     (vars (n1 n2 n3 n4 text) (k skey))
+     (trace
+       (send (enc n1 n1 k))
+       (recv (enc n1 n2 k))
+       (recv (enc n1 n3 k))
+       (recv (enc n1 n4 k)))
+     (priority (2 0) (3 10))
+     (non-orig k)
+     (uniq-orig n1)
+  )
+)
+
+
+; Node 4 should realize first, then node 2, then node 3.
+(defskeleton priority_test
+   (vars (n1 text))
+   (defstrand init 4 (n1 n1)))
+
+; Node 3 should realize first, then node 2, then node 4.
+(defskeleton priority_test
+   (vars (n1 text))
+   (defstrand init 4 (n1 n1))
+   (priority ((0 2) 10) ((0 3) 0)))
diff --git a/tst/priority_test.tst b/tst/priority_test.tst
new file mode 100644
--- /dev/null
+++ b/tst/priority_test.tst
@@ -0,0 +1,116 @@
+(herald "Receive priority test protocol")
+
+(comment "CPSA 3.2.2")
+(comment "All input read from priority_test.scm")
+
+(defprotocol priority_test basic
+  (defrole init
+    (vars (n1 n2 n3 n4 text) (k skey))
+    (trace (send (enc n1 n1 k)) (recv (enc n1 n2 k))
+      (recv (enc n1 n3 k)) (recv (enc n1 n4 k)))
+    (non-orig k)
+    (uniq-orig n1)
+    (priority (2 0) (3 10))))
+
+(defskeleton priority_test
+  (vars (n1 n2 n3 n4 text) (k skey))
+  (defstrand init 4 (n1 n1) (n2 n2) (n3 n3) (n4 n4) (k k))
+  (priority ((0 2) 0) ((0 3) 10))
+  (non-orig k)
+  (uniq-orig n1)
+  (traces
+    ((send (enc n1 n1 k)) (recv (enc n1 n2 k)) (recv (enc n1 n3 k))
+      (recv (enc n1 n4 k))))
+  (label 0)
+  (unrealized (0 1) (0 2) (0 3))
+  (origs (n1 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton priority_test
+  (vars (n2 n3 n4 text) (k skey))
+  (defstrand init 4 (n1 n4) (n2 n2) (n3 n3) (n4 n4) (k k))
+  (priority ((0 2) 0) ((0 3) 10))
+  (non-orig k)
+  (uniq-orig n4)
+  (operation encryption-test (displaced 1 0 init 1) (enc n4 n4 k) (0 3))
+  (traces
+    ((send (enc n4 n4 k)) (recv (enc n4 n2 k)) (recv (enc n4 n3 k))
+      (recv (enc n4 n4 k))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1) (0 2))
+  (origs (n4 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton priority_test
+  (vars (n2 n3 text) (k skey))
+  (defstrand init 4 (n1 n2) (n2 n2) (n3 n3) (n4 n2) (k k))
+  (priority ((0 2) 0) ((0 3) 10))
+  (non-orig k)
+  (uniq-orig n2)
+  (operation encryption-test (displaced 1 0 init 1) (enc n2 n2 k) (0 1))
+  (traces
+    ((send (enc n2 n2 k)) (recv (enc n2 n2 k)) (recv (enc n2 n3 k))
+      (recv (enc n2 n2 k))))
+  (label 2)
+  (parent 1)
+  (unrealized (0 2))
+  (origs (n2 (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol priority_test basic
+  (defrole init
+    (vars (n1 n2 n3 n4 text) (k skey))
+    (trace (send (enc n1 n1 k)) (recv (enc n1 n2 k))
+      (recv (enc n1 n3 k)) (recv (enc n1 n4 k)))
+    (non-orig k)
+    (uniq-orig n1)
+    (priority (2 0) (3 10))))
+
+(defskeleton priority_test
+  (vars (n1 n2 n3 n4 text) (k skey))
+  (defstrand init 4 (n1 n1) (n2 n2) (n3 n3) (n4 n4) (k k))
+  (priority ((0 2) 10) ((0 3) 0))
+  (non-orig k)
+  (uniq-orig n1)
+  (traces
+    ((send (enc n1 n1 k)) (recv (enc n1 n2 k)) (recv (enc n1 n3 k))
+      (recv (enc n1 n4 k))))
+  (label 3)
+  (unrealized (0 1) (0 2) (0 3))
+  (origs (n1 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton priority_test
+  (vars (n2 n3 n4 text) (k skey))
+  (defstrand init 4 (n1 n3) (n2 n2) (n3 n3) (n4 n4) (k k))
+  (priority ((0 2) 10) ((0 3) 0))
+  (non-orig k)
+  (uniq-orig n3)
+  (operation encryption-test (displaced 1 0 init 1) (enc n3 n3 k) (0 2))
+  (traces
+    ((send (enc n3 n3 k)) (recv (enc n3 n2 k)) (recv (enc n3 n3 k))
+      (recv (enc n3 n4 k))))
+  (label 4)
+  (parent 3)
+  (unrealized (0 1) (0 3))
+  (origs (n3 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton priority_test
+  (vars (n2 n4 text) (k skey))
+  (defstrand init 4 (n1 n2) (n2 n2) (n3 n2) (n4 n4) (k k))
+  (priority ((0 2) 10) ((0 3) 0))
+  (non-orig k)
+  (uniq-orig n2)
+  (operation encryption-test (displaced 1 0 init 1) (enc n2 n2 k) (0 1))
+  (traces
+    ((send (enc n2 n2 k)) (recv (enc n2 n2 k)) (recv (enc n2 n2 k))
+      (recv (enc n2 n4 k))))
+  (label 5)
+  (parent 4)
+  (unrealized (0 3))
+  (origs (n2 (0 0))))
+
+(comment "Nothing left to do")
diff --git a/tst/pruning1.scm b/tst/pruning1.scm
deleted file mode 100644
--- a/tst/pruning1.scm
+++ /dev/null
@@ -1,42 +0,0 @@
-; pruning1
-;   Demonstrates a flaw in CPSA due to overly aggressive pruning.
-; Specifically, the shape requires two instances of trans, one
-; with k = pubk b and the other with k = privk b.  CPSA would
-; form one of these instances and then refuse to augment with another
-; because the new one would prune.  This pruning was overly aggressive
-; because leaving k unbound gives the new strand greater freedom.
-;   This flaw was discovered previously in targetterms6, but
-; this example illustrates that the flaw does not depend on variables
-; of sort mesg; here it is done with a variable of sort akey.
-
-(defprotocol prune basic
-  (defrole init (vars (a b name) (n text))
-    (trace
-	(send (enc n (pubk a)))
-      (recv (enc n (pubk b) (pubk a)))
-      (recv (enc n (privk b) (pubk a)))
-	)
-    (uniq-orig n)
-    (non-orig (privk a))
-  )
-  (defrole trans (vars (a name) (n text) (k akey))
-     (trace
-        (recv (enc n (pubk a)))
-	(recv k )
-        (send (enc n k (pubk a)))
-     )
-  )
-  (comment "Shows a failure with generalization"
-	   "Run this with a step count of 4"))
-
-(defskeleton prune
-  (vars (a name) (n text) (k akey))
-  (defstrand init 3))
-
-(defskeleton prune
-  (vars (n text) (a b name))
-  (defstrand init 3 (n n) (a a) (b b))
-  (defstrand trans 3 (n n) (a a) (k (pubk b)))
-  (defstrand trans 3 (n n) (a a) (k (privk b)))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (0 1)) ((2 2) (0 2)))
-)
diff --git a/tst/pruning1.tst b/tst/pruning1.tst
deleted file mode 100644
--- a/tst/pruning1.tst
+++ /dev/null
@@ -1,148 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from pruning1.scm")
-
-(defprotocol prune basic
-  (defrole init
-    (vars (a b name) (n text))
-    (trace (send (enc n (pubk a))) (recv (enc n (pubk b) (pubk a)))
-      (recv (enc n (privk b) (pubk a))))
-    (non-orig (privk a))
-    (uniq-orig n))
-  (defrole trans
-    (vars (a name) (n text) (k akey))
-    (trace (recv (enc n (pubk a))) (recv k) (send (enc n k (pubk a)))))
-  (comment "Shows a failure with generalization"
-    "Run this with a step count of 4"))
-
-(defskeleton prune
-  (vars (n text) (a b name))
-  (defstrand init 3 (n n) (a a) (b b))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (traces
-    ((send (enc n (pubk a))) (recv (enc n (pubk b) (pubk a)))
-      (recv (enc n (privk b) (pubk a)))))
-  (label 0)
-  (unrealized (0 1) (0 2))
-  (origs (n (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton prune
-  (vars (n text) (a b name) (k akey))
-  (defstrand init 3 (n n) (a a) (b b))
-  (defstrand trans 3 (n n) (a a) (k k))
-  (precedes ((0 0) (1 0)) ((1 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans 3) n (0 1) (enc n (pubk a)))
-  (traces
-    ((send (enc n (pubk a))) (recv (enc n (pubk b) (pubk a)))
-      (recv (enc n (privk b) (pubk a))))
-    ((recv (enc n (pubk a))) (recv k) (send (enc n k (pubk a)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton prune
-  (vars (n text) (a b name))
-  (defstrand init 3 (n n) (a a) (b b))
-  (defstrand trans 3 (n n) (a a) (k (pubk b)))
-  (precedes ((0 0) (1 0)) ((1 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (contracted (k (pubk b))) n (0 1)
-    (enc n (pubk a)) (enc n (pubk b) (pubk a)))
-  (traces
-    ((send (enc n (pubk a))) (recv (enc n (pubk b) (pubk a)))
-      (recv (enc n (privk b) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (pubk b))
-      (send (enc n (pubk b) (pubk a)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton prune
-  (vars (n text) (a b name) (k akey))
-  (defstrand init 3 (n n) (a a) (b b))
-  (defstrand trans 3 (n n) (a a) (k (pubk b)))
-  (defstrand trans 3 (n n) (a a) (k k))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (0 1)) ((2 2) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans 3) n (0 2) (enc n (pubk a))
-    (enc n (pubk b) (pubk a)))
-  (traces
-    ((send (enc n (pubk a))) (recv (enc n (pubk b) (pubk a)))
-      (recv (enc n (privk b) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (pubk b))
-      (send (enc n (pubk b) (pubk a))))
-    ((recv (enc n (pubk a))) (recv k) (send (enc n k (pubk a)))))
-  (label 3)
-  (parent 2)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton prune
-  (vars (n text) (a b name))
-  (defstrand init 3 (n n) (a a) (b b))
-  (defstrand trans 3 (n n) (a a) (k (pubk b)))
-  (defstrand trans 3 (n n) (a a) (k (privk b)))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (0 1)) ((2 2) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (contracted (k (privk b))) n (0 2)
-    (enc n (pubk a)) (enc n (privk b) (pubk a))
-    (enc n (pubk b) (pubk a)))
-  (traces
-    ((send (enc n (pubk a))) (recv (enc n (pubk b) (pubk a)))
-      (recv (enc n (privk b) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (pubk b))
-      (send (enc n (pubk b) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (privk b))
-      (send (enc n (privk b) (pubk a)))))
-  (label 4)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n n))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol prune basic
-  (defrole init
-    (vars (a b name) (n text))
-    (trace (send (enc n (pubk a))) (recv (enc n (pubk b) (pubk a)))
-      (recv (enc n (privk b) (pubk a))))
-    (non-orig (privk a))
-    (uniq-orig n))
-  (defrole trans
-    (vars (a name) (n text) (k akey))
-    (trace (recv (enc n (pubk a))) (recv k) (send (enc n k (pubk a)))))
-  (comment "Shows a failure with generalization"
-    "Run this with a step count of 4"))
-
-(defskeleton prune
-  (vars (n text) (a b name))
-  (defstrand init 3 (n n) (a a) (b b))
-  (defstrand trans 3 (n n) (a a) (k (pubk b)))
-  (defstrand trans 3 (n n) (a a) (k (privk b)))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (0 1)) ((2 2) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (traces
-    ((send (enc n (pubk a))) (recv (enc n (pubk b) (pubk a)))
-      (recv (enc n (privk b) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (pubk b))
-      (send (enc n (pubk b) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (privk b))
-      (send (enc n (privk b) (pubk a)))))
-  (label 5)
-  (unrealized)
-  (shape)
-  (maps ((0 1 2) ((n n) (a a) (b b))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/sigenc.scm b/tst/sigenc.scm
deleted file mode 100644
--- a/tst/sigenc.scm
+++ /dev/null
@@ -1,44 +0,0 @@
-(herald "Signed Encrypted Message Example"
-   (comment "Shows examples of key usage of asymmetric keys"))
-
-(defprotocol mult-keys-sig-enc basic
-   (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace
-     (send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-     (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-     (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace
-     (recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-     (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-     (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))))
-
-;;; The initiator point-of-view
-(defskeleton mult-keys-sig-enc
-   (vars (a b name) (n1 text))
-   (defstrand init 3 (a a) (b b) (n1 n1))
-   (non-orig (privk "enc" a) (privk "sig" a) (privk "enc" b))
-   (uniq-orig n1))
-
-;;; The responder point-of-view trusting only a's signature key
-(defskeleton mult-keys-sig-enc
-  (vars (a b name) (n2 text))
-  (defstrand resp 3 (a a) (b b) (n2 n2))
-  (non-orig (privk "sig" a))
-  (uniq-orig n2))
-
-;;; The responder point-of-view trusting only a's encryption key
-(defskeleton mult-keys-sig-enc
-  (vars (a b name) (n2 text))
-  (defstrand resp 3 (a a) (b b) (n2 n2))
-  (non-orig (privk "enc" a))
-  (uniq-orig n2))
-
-;;; The responder point-of-view trusting both of a's keys
-(defskeleton mult-keys-sig-enc
-  (vars (a b name) (n2 text))
-  (defstrand resp 3 (a a) (b b) (n2 n2))
-  (non-orig (privk "sig" a) (privk "enc" a))
-  (uniq-orig n2))
diff --git a/tst/sigenc.tst b/tst/sigenc.tst
deleted file mode 100644
--- a/tst/sigenc.tst
+++ /dev/null
@@ -1,441 +0,0 @@
-(herald "Signed Encrypted Message Example"
-  (comment "Shows examples of key usage of asymmetric keys"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from sigenc.scm")
-
-(defprotocol mult-keys-sig-enc basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (non-orig (privk "enc" a) (privk "enc" b) (privk "sig" a))
-  (uniq-orig n1)
-  (traces
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (n1 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n1 n2 n2-0 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk "enc" a) (privk "enc" b) (privk "sig" a))
-  (uniq-orig n1)
-  (operation nonce-test (added-strand resp 2) n1 (0 1)
-    (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-  (traces
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2-0 (privk "sig" b)) (pubk "enc" a)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n1 n2 text) (a b name))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk "enc" a) (privk "enc" b) (privk "sig" a))
-  (uniq-orig n1)
-  (operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
-    (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a))
-    (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-  (traces
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))))
-  (label 2)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n1 n1) (n2 n2))))
-  (origs (n1 (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol mult-keys-sig-enc basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (non-orig (privk "sig" a))
-  (uniq-orig n2)
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (label 3)
-  (unrealized (0 0) (0 2))
-  (origs (n2 (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 text) (a b b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b-0))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 1)
-    (enc n1 a (privk "sig" a)) (0 0))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b-0)))))
-  (label 4)
-  (parent 3)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 text) (a b b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
-  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
-  (non-orig (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (displaced 1 2 init 3)
-    (enc n2 (privk "sig" a)) (0 2))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b-0)))
-      (recv (enc (enc n1 n2 (privk "sig" b-0)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b-0)))))
-  (label 5)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 n1-0 text) (a b b-0 b-1 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b-0))
-  (defstrand init 3 (n1 n1-0) (n2 n2) (a a) (b b-1))
-  (precedes ((0 1) (2 1)) ((1 0) (0 0)) ((2 2) (0 2)))
-  (non-orig (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 3)
-    (enc n2 (privk "sig" a)) (0 2))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b-0))))
-    ((send (enc (enc n1-0 a (privk "sig" a)) (pubk "enc" b-1)))
-      (recv (enc (enc n1-0 n2 (privk "sig" b-1)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b-1)))))
-  (label 6)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol mult-keys-sig-enc basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (non-orig (privk "enc" a))
-  (uniq-orig n2)
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (label 7)
-  (unrealized (0 2))
-  (origs (n2 (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 2) (0 2)))
-  (non-orig (privk "enc" a))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand init 3) n2 (0 2)
-    (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (label 8)
-  (parent 7)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol mult-keys-sig-enc basic
-  (defrole init
-    (vars (a b name) (n1 n2 text))
-    (trace (send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (defrole resp
-    (vars (b a name) (n2 n1 text))
-    (trace (recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (label 9)
-  (unrealized (0 0) (0 2))
-  (origs (n2 (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 text) (a b b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b-0))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 1)
-    (enc n1 a (privk "sig" a)) (0 0))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b-0)))))
-  (label 10)
-  (parent 9)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 text) (a b b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
-  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (displaced 1 2 init 3)
-    (enc n2 (privk "sig" a)) (0 2))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b-0)))
-      (recv (enc (enc n1 n2 (privk "sig" b-0)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b-0)))))
-  (label 11)
-  (parent 10)
-  (unrealized (1 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 n1-0 text) (a b b-0 b-1 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b-0))
-  (defstrand init 3 (n1 n1-0) (n2 n2) (a a) (b b-1))
-  (precedes ((0 1) (2 1)) ((1 0) (0 0)) ((2 2) (0 2)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation encryption-test (added-strand init 3)
-    (enc n2 (privk "sig" a)) (0 2))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b-0))))
-    ((send (enc (enc n1-0 a (privk "sig" a)) (pubk "enc" b-1)))
-      (recv (enc (enc n1-0 n2 (privk "sig" b-1)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b-1)))))
-  (label 12)
-  (parent 10)
-  (unrealized (2 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 text) (a b name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation nonce-test (contracted (b-0 b)) n2 (1 1)
-    (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (label 13)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 text) (a b b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((1 0) (0 0)) ((1 2) (0 2)) ((2 2) (1 1)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand init 3) n2 (1 1)
-    (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b-0)))
-      (recv (enc (enc n1 n2 (privk "sig" b-0)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b-0))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (label 14)
-  (parent 11)
-  (seen 15)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 text) (a b b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b-0))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((1 0) (0 0)) ((2 2) (0 2)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation nonce-test (contracted (b-1 b) (n1-0 n1)) n2 (2 1)
-    (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b-0))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (label 15)
-  (parent 12)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (n2 n2) (n1 n1))))
-  (origs (n2 (0 1))))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 n1-0 text) (a b b-0 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 3 (n1 n1-0) (n2 n2) (a a) (b b-0))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (2 1)) ((1 2) (0 2)) ((2 0) (0 0)) ((2 2) (1 1)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation nonce-test (displaced 1 3 init 3) n2 (2 1)
-    (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1-0 a (privk "sig" a)) (pubk "enc" b-0)))
-      (recv (enc (enc n1-0 n2 (privk "sig" b-0)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b-0))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (label 16)
-  (parent 12)
-  (seen 13)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton mult-keys-sig-enc
-  (vars (n2 n1 n1-0 text) (a b b-0 b-1 name))
-  (defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
-  (defstrand init 1 (n1 n1) (a a) (b b-0))
-  (defstrand init 3 (n1 n1-0) (n2 n2) (a a) (b b-1))
-  (defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
-  (precedes ((0 1) (3 1)) ((1 0) (0 0)) ((2 2) (0 2)) ((3 2) (2 1)))
-  (non-orig (privk "enc" a) (privk "sig" a))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand init 3) n2 (2 1)
-    (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-  (traces
-    ((recv (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (send (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (recv (enc (enc n2 (privk "sig" a)) (pubk "enc" b))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b-0))))
-    ((send (enc (enc n1-0 a (privk "sig" a)) (pubk "enc" b-1)))
-      (recv (enc (enc n1-0 n2 (privk "sig" b-1)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b-1))))
-    ((send (enc (enc n1 a (privk "sig" a)) (pubk "enc" b)))
-      (recv (enc (enc n1 n2 (privk "sig" b)) (pubk "enc" a)))
-      (send (enc (enc n2 (privk "sig" a)) (pubk "enc" b)))))
-  (label 17)
-  (parent 12)
-  (seen 15)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
diff --git a/tst/sorted_epmo_acctnum.scm b/tst/sorted_epmo_acctnum.scm
deleted file mode 100644
--- a/tst/sorted_epmo_acctnum.scm
+++ /dev/null
@@ -1,90 +0,0 @@
-(herald "Electronic Purchase with Money Order Protocol Variant"
-  (bound 12)
-  (comment "This version includes account numbers in exchanges"
-	   "This version uses sorts to avoid confusion"
-	   "between a nonce and other data"))
-
-(defprotocol sorted_epmo_acctnum basic
-  (defrole bank
-    (vars (b c m name) (acctnum price text) (hash name) (nc nm nb data))
-    (trace
-     (recv (enc c nc nm acctnum price (pubk b)))
-     (send (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-		(enc nc nb (pubk c))))
-     (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    (non-orig (privk hash))
-    (annotations b
-      (1
-        (forall ((pm name))
-          (implies
-            (and (authtransfer c acctnum b price pm nm)
-              (reqtransfer pm b price pm nm))
-            (dotransfer acctnum b price pm nm))))
-      (2
-        (and (says c (authtransfer c acctnum b price m nm))
-          (says m (reqtransfer m b price m nm))))))
-  (defrole customer
-    (vars (b c m hash name) (acctnum goods price text) (nc nm nb data))
-    (trace
-     (send (enc c nc goods (pubk m)))
-     (recv (enc nc nm m price (pubk c)))
-     (send (enc c nc nm acctnum price (pubk b)))
-     (recv (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-		(enc nc nb (pubk c))))
-     (send (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-		nb)))
-    (non-orig (privk b) (privk hash))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (implies
-            (exists ((acctnum2 text))
-              (dotransfer acctnum2 b price m nm)) (doship m goods c))))
-      (3
-        (says b
-          (forall ((pm name))
-            (implies
-              (and (authtransfer c acctnum b price m nm)
-                (reqtransfer pm b price pm nm))
-              (dotransfer acctnum b price pm nm)))))
-      (4 (authtransfer c acctnum b price m nm))))
-  (defrole merchant (vars (b c m hash name) (goods price text) (nc nm nb data))
-    (trace
-     (recv (enc c nc goods (pubk m)))
-     (send (enc nc nm m price (pubk c)))
-     (recv (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-		nb))
-     (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    (non-orig (privk hash))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (implies
-          (exists ((acctnum2 text)) (dotransfer acctnum2 b price m nm))
-          (doship m goods c)))
-      (2
-        (and
-          (says b
-            (forall ((pm name))
-              (exists ((acctnum2 text))
-                (implies
-                  (and (authtransfer c acctnum2 b price m nm)
-                    (reqtransfer pm b price pm nm))
-                  (dotransfer acctnum2 b price pm nm)))))
-          (says c
-            (exists ((acctnum2 text))
-              (authtransfer c acctnum2 b price m nm)))))
-      (3 (and (reqtransfer m b price m nm) (doship m goods c))))))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (b m c name) (nm nc nb data) (hash name))
-  (defstrand merchant 4 (b b) (m m) (c c) (nm nm) (nc nc) (nb nb) (hash hash))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nc nb))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (b m c name) (nm nb nc data) (hash name) (price acctnum text))
-  (defstrand bank 3 (b b) (m m) (c c) (nm nm) (nb nb) (nc nc) (hash hash))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nc nb))
diff --git a/tst/sorted_epmo_acctnum.tst b/tst/sorted_epmo_acctnum.tst
deleted file mode 100644
--- a/tst/sorted_epmo_acctnum.tst
+++ /dev/null
@@ -1,26043 +0,0 @@
-(herald "Electronic Purchase with Money Order Protocol Variant"
-  (bound 12)
-  (comment "This version includes account numbers in exchanges"
-    "This version uses sorts to avoid confusion"
-    "between a nonce and other data"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from sorted_epmo_acctnum.scm")
-(comment "Strand count bounded at 12")
-
-(defprotocol sorted_epmo_acctnum basic
-  (defrole bank
-    (vars (b c m name) (acctnum price text) (hash name) (nc nm nb data))
-    (trace (recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    (non-orig (privk hash))
-    (annotations b
-      (1
-        (forall ((pm name))
-          (implies
-            (and (authtransfer c acctnum b price pm nm)
-              (reqtransfer pm b price pm nm))
-            (dotransfer acctnum b price pm nm))))
-      (2
-        (and (says c (authtransfer c acctnum b price m nm))
-          (says m (reqtransfer m b price m nm))))))
-  (defrole customer
-    (vars (b c m hash name) (acctnum goods price text) (nc nm nb data))
-    (trace (send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    (non-orig (privk b) (privk hash))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (implies
-            (exists ((acctnum2 text))
-              (dotransfer acctnum2 b price m nm)) (doship m goods c))))
-      (3
-        (says b
-          (forall ((pm name))
-            (implies
-              (and (authtransfer c acctnum b price m nm)
-                (reqtransfer pm b price pm nm))
-              (dotransfer acctnum b price pm nm)))))
-      (4 (authtransfer c acctnum b price m nm))))
-  (defrole merchant
-    (vars (b c m hash name) (goods price text) (nc nm nb data))
-    (trace (recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    (non-orig (privk hash))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (implies
-          (exists ((acctnum2 text)) (dotransfer acctnum2 b price m nm))
-          (doship m goods c)))
-      (2
-        (and
-          (says b
-            (forall ((pm name))
-              (exists ((acctnum2 text))
-                (implies
-                  (and (authtransfer c acctnum2 b price m nm)
-                    (reqtransfer pm b price pm nm))
-                  (dotransfer acctnum2 b price pm nm)))))
-          (says c
-            (exists ((acctnum2 text))
-              (authtransfer c acctnum2 b price m nm)))))
-      (3 (and (reqtransfer m b price m nm) (doship m goods c))))))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price text) (nm nc nb data) (b m c hash name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nc nb)
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m)))))
-  (label 0)
-  (unrealized (0 2))
-  (origs (nm (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum text) (nm nc nb data) (b m c hash name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (hash hash))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nc nb)
-  (operation encryption-test (added-strand bank 2)
-    (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b)) (0 2))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 2) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text) (nm nc nb data)
-    (b m c hash b-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nm) (b b-0) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0))
-  (uniq-orig nm nc nb)
-  (operation nonce-test (added-strand customer 3) nm (1 0)
-    (enc nc nm m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b-0)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nm nc nb data)
-    (m c hash b name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nm) (b b) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b))
-  (uniq-orig nm nc nb)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nm
-    (1 0) (enc nc nm m price (pubk c))
-    (enc c nc nm acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))))
-  (label 3)
-  (parent 2)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nm nc nb nb-0 data) (b m c hash b-0 hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nm) (b b-0) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (precedes ((0 1) (2 1)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 0) (0 0))
-    ((2 2) (1 0)) ((3 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0))
-  (uniq-orig nm nc nb)
-  (operation nonce-test (added-strand bank 2) nm (1 0)
-    (enc nc nm m price (pubk c))
-    (enc c nc nm acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b-0))))
-    ((recv (enc c nc nm acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nm price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 4)
-  (parent 2)
-  (unrealized (0 0) (0 2) (1 0) (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nm nc nb data) (m c hash b name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nm) (b b) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b))
-  (uniq-orig nm nc nb)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))))
-  (label 5)
-  (parent 3)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nm nc nb nm-0 data)
-    (m c hash b name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (3 0)) ((2 2) (1 0))
-    ((3 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b))
-  (uniq-orig nm nc nb nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 6)
-  (parent 3)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nm nc nb nb-0 data) (b m c hash b-0 hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nm) (b b-0) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (3 0))
-    ((3 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0))
-  (uniq-orig nm nc nb)
-  (operation nonce-test (displaced 4 2 customer 3) nm (3 0)
-    (enc nc nm m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b-0))))
-    ((recv (enc c nc nm acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nm price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 7)
-  (parent 4)
-  (seen 3)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nm nc nb data) (c hash b m name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (2 1)) ((1 1) (2 3)) ((2 0) (0 0)) ((2 2) (1 0))
-    ((2 4) (0 2)))
-  (non-orig (privk c) (privk hash) (privk b) (privk m))
-  (uniq-orig nm nc nb)
-  (operation nonce-test (displaced 2 3 customer 5) nb (0 2)
-    (enc "hash" c nc nb nm price (pubk hash)) (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))))
-  (label 8)
-  (parent 5)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((b b) (m m) (c c) (nm nm) (nc nc) (nb nb) (hash hash)
-        (goods goods) (price price))))
-  (origs (nc (2 0)) (nm (0 1)) (nb (1 1))))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nm nc nb nm-0 data)
-    (m c hash b name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nm) (b b) (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (3 0)) ((2 2) (1 0))
-    ((3 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b))
-  (uniq-orig nm nc nb nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 9)
-  (parent 6)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text) (nc nb nb-0 data)
-    (b m c hash b-0 hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (b b-0) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (3 0))
-    ((3 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 4 3 bank 2) nm (1 0)
-    (enc "hash" c nc nb-0 nm price (pubk hash-0))
-    (enc nc nm m price (pubk c))
-    (enc c nc nm acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 10)
-  (parent 7)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nm nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nm) (b b-0) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (2 1)) ((0 1) (4 0)) ((1 1) (0 2)) ((2 0) (0 0))
-    ((2 2) (3 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nm nc nb)
-  (operation nonce-test (added-strand bank 2) nm (1 0)
-    (enc "hash" c nc nb-0 nm price (pubk hash-0))
-    (enc nc nm m price (pubk c))
-    (enc c nc nm acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b-0))))
-    ((recv (enc c nc nm acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nm price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nm acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nm price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 11)
-  (parent 7)
-  (seen 7)
-  (unrealized (0 0) (0 2) (1 0) (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price price-0 acctnum goods text) (nm nc nb nm-0 data)
-    (c hash b m name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (3 1)) ((1 1) (3 3)) ((2 1) (0 0)) ((3 0) (2 0))
-    ((3 2) (1 0)) ((3 4) (0 2)))
-  (non-orig (privk c) (privk hash) (privk b) (privk m))
-  (uniq-orig nm nc nb nm-0)
-  (operation nonce-test (displaced 2 4 customer 5) nb (0 2)
-    (enc "hash" c nc nb nm price (pubk hash)) (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))))
-  (label 12)
-  (parent 9)
-  (seen 8)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (3 0))
-    ((3 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nb-0
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 13)
-  (parent 10)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (b b-0) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (2 1)) ((0 1) (4 0)) ((1 1) (0 2)) ((2 0) (0 0))
-    ((2 2) (3 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 14)
-  (parent 10)
-  (unrealized (0 0) (0 2) (1 0) (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text) (nc nb nb-0 data)
-    (b m c hash b-0 hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (0 0))
-    ((3 2) (2 0)) ((3 4) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 2 4 customer 5) nb-0 (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0))))
-  (label 15)
-  (parent 10)
-  (unrealized (0 0) (0 2) (1 0) (3 3))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (3 0))
-    ((3 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 16)
-  (parent 13)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (4 0)) ((2 2) (3 0))
-    ((3 1) (1 0)) ((4 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 17)
-  (parent 13)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (b b-0) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (3 0))
-    ((2 2) (4 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 5 2 customer 3) nb-0 (4 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 18)
-  (parent 14)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text) (nc nb nb-0 data)
-    (b m c hash b-0 hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (3 3)) ((3 0) (0 0))
-    ((3 2) (2 0)) ((3 4) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation encryption-test (displaced 4 2 bank 2)
-    (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0)) (privk b-0))
-    (3 3))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0))))
-  (label 19)
-  (parent 15)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 data) (b m c hash b-0 hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (precedes ((0 1) (3 1)) ((0 1) (4 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 0) (0 0)) ((3 2) (2 0)) ((3 4) (1 0)) ((4 1) (3 3)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation encryption-test (added-strand bank 2)
-    (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0)) (privk b-0))
-    (3 3))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 20)
-  (parent 15)
-  (unrealized (0 0) (0 2) (1 0) (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 data)
-    (c hash hash-0 b m name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (3 1)) ((1 1) (3 3)) ((2 1) (1 0)) ((3 0) (0 0))
-    ((3 2) (2 0)) ((3 4) (0 2)))
-  (non-orig (privk c) (privk hash) (privk hash-0) (privk b) (privk m))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 2 4 customer 5) nb (0 2)
-    (enc "hash" c nc nb nb-0 price (pubk hash)) (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))))
-  (label 21)
-  (parent 16)
-  (seen 8)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (4 0)) ((2 2) (3 0))
-    ((3 1) (1 0)) ((4 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 22)
-  (parent 17)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (3 0))
-    ((2 2) (4 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nb-0
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 23)
-  (parent 18)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (b b-0) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (2 1)) ((0 1) (5 0)) ((1 1) (0 2)) ((2 0) (0 0))
-    ((2 2) (3 0)) ((2 2) (4 0)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 24)
-  (parent 18)
-  (seen 18)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text) (nc nb nb-0 data)
-    (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 2 5 customer 5) nb-0 (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0))))
-  (label 25)
-  (parent 18)
-  (unrealized (0 0) (0 2) (1 0) (4 3))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 2 5 customer 5) nb-0 (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0))))
-  (label 26)
-  (parent 18)
-  (seen 34)
-  (unrealized (0 0) (0 2) (1 0) (4 3))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (3 3)) ((3 0) (0 0))
-    ((3 2) (2 0)) ((3 4) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0))))
-  (label 27)
-  (parent 19)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (3 1)) ((0 1) (4 0)) ((1 1) (0 2)) ((2 1) (3 3))
-    ((3 0) (0 0)) ((3 2) (2 0)) ((3 4) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 28)
-  (parent 19)
-  (seen 37)
-  (unrealized (0 0) (0 2) (1 0) (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm data) (b m c hash b-0 hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (3 3)) ((3 0) (0 0))
-    ((3 0) (4 0)) ((3 2) (2 0)) ((3 4) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 29)
-  (parent 19)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 data) (b m c hash b-0 hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (0 0))
-    ((3 2) (2 0)) ((3 2) (4 0)) ((3 4) (1 0)) ((4 1) (3 3)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 5 3 customer 3) nb-0 (4 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 30)
-  (parent 20)
-  (seen 34)
-  (unrealized (0 0) (0 2) (1 0) (4 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price price-0 acctnum goods text) (nc nb nb-0 nm data)
-    (c hash hash-0 b m name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (4 1)) ((1 1) (4 3)) ((2 1) (1 0)) ((3 1) (0 0))
-    ((4 0) (3 0)) ((4 2) (2 0)) ((4 4) (0 2)))
-  (non-orig (privk c) (privk hash) (privk hash-0) (privk b) (privk m))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (displaced 2 5 customer 5) nb (0 2)
-    (enc "hash" c nc nb nb-0 price (pubk hash)) (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))))
-  (label 31)
-  (parent 22)
-  (seen 12)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0)) ((2 2) (3 0))
-    ((2 2) (4 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 32)
-  (parent 23)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (5 0)) ((2 2) (3 0))
-    ((2 2) (4 0)) ((3 1) (1 0)) ((4 1) (1 0)) ((5 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 33)
-  (parent 23)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text) (nc nb nb-0 data)
-    (b m c hash b-0 hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation encryption-test (displaced 5 2 bank 2)
-    (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1)) (privk b-0))
-    (4 3))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0))))
-  (label 34)
-  (parent 25)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text) (nc nb nb-0 data)
-    (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation encryption-test (displaced 5 3 bank 2)
-    (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1)) (privk b-0))
-    (4 3))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0))))
-  (label 35)
-  (parent 25)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((0 1) (5 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation encryption-test (added-strand bank 2)
-    (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1)) (privk b-0))
-    (4 3))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 36)
-  (parent 25)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation encryption-test (displaced 5 2 bank 2)
-    (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0)) (privk b-0))
-    (4 3))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0))))
-  (label 37)
-  (parent 26)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (precedes ((0 1) (4 1)) ((0 1) (5 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation encryption-test (added-strand bank 2)
-    (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0)) (privk b-0))
-    (4 3))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 38)
-  (parent 26)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (3 3)) ((3 0) (0 0))
-    ((3 2) (2 0)) ((3 4) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0))))
-  (label 39)
-  (parent 27)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (3 3)) ((3 0) (4 0))
-    ((3 2) (2 0)) ((3 4) (1 0)) ((4 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 40)
-  (parent 27)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (3 3)) ((3 0) (0 0))
-    ((3 0) (4 0)) ((3 2) (2 0)) ((3 4) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 41)
-  (parent 29)
-  (seen 40)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (3 1)) ((0 1) (5 0)) ((1 1) (0 2)) ((2 1) (3 3))
-    ((3 0) (0 0)) ((3 0) (4 0)) ((3 2) (2 0)) ((3 4) (1 0))
-    ((4 1) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 42)
-  (parent 29)
-  (seen 55)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (3 1)) ((0 1) (5 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 0) (0 0)) ((3 2) (2 0)) ((3 2) (4 0)) ((3 4) (1 0))
-    ((4 1) (3 3)) ((5 1) (4 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (4 0)
-    (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 43)
-  (parent 30)
-  (unrealized (0 0) (0 2) (1 0) (4 0) (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (c hash hash-0 hash-1 b m name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (4 1)) ((1 1) (4 3)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (0 2)))
-  (non-orig (privk c) (privk hash) (privk hash-0) (privk hash-1)
-    (privk b) (privk m))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 2 5 customer 5) nb (0 2)
-    (enc "hash" c nc nb nb-0 price (pubk hash)) (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))))
-  (label 44)
-  (parent 32)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand customer 3 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (b b) (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (5 0)) ((2 2) (3 0))
-    ((2 2) (4 0)) ((3 1) (1 0)) ((4 1) (1 0)) ((5 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 45)
-  (parent 33)
-  (unrealized (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0))))
-  (label 46)
-  (parent 34)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((0 1) (5 0)) ((1 1) (0 2)) ((2 1) (4 3))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 47)
-  (parent 34)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm data) (b m c hash b-0 hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 48)
-  (parent 34)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0))))
-  (label 49)
-  (parent 35)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (5 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (4 3)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 50)
-  (parent 35)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 51)
-  (parent 35)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (4 3)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 6 4 customer 3) nb-0 (5 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 52)
-  (parent 36)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0))))
-  (label 53)
-  (parent 37)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (5 0)) ((1 1) (0 2)) ((2 1) (4 3))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 54)
-  (parent 37)
-  (seen 37)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 55)
-  (parent 37)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (4 3)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 6 4 customer 3) nb-0 (5 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 56)
-  (parent 38)
-  (seen 60 65)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (3 3)) ((3 0) (4 0))
-    ((3 2) (2 0)) ((3 4) (1 0)) ((4 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 57)
-  (parent 40)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (3 3)) ((3 0) (0 0))
-    ((3 0) (4 0)) ((3 2) (2 0)) ((3 4) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 58)
-  (parent 41)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (3 3)) ((3 0) (4 0))
-    ((3 0) (5 0)) ((3 2) (2 0)) ((3 4) (1 0)) ((4 1) (1 0))
-    ((5 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 59)
-  (parent 41)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (0 0))
-    ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0)) ((4 1) (3 3))
-    ((5 1) (4 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 6 3 customer 3) nb-0 (5 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 60)
-  (parent 43)
-  (seen 19 74)
-  (unrealized (0 0) (0 2) (1 0) (4 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (c hash hash-0 b m name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (3 1)) ((1 1) (3 3)) ((2 1) (1 0)) ((3 0) (0 0))
-    ((3 2) (2 0)) ((3 4) (0 2)))
-  (non-orig (privk c) (privk hash) (privk hash-0) (privk b) (privk m))
-  (uniq-orig nc nb nb-0)
-  (operation generalization deleted (2 0))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))))
-  (label 61)
-  (parent 44)
-  (seen 8)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price price-0 acctnum goods text) (nc nb nb-0 nb-1 nm data)
-    (c hash hash-0 hash-1 b m name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (5 1)) ((1 1) (5 3)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 1) (0 0)) ((5 0) (4 0)) ((5 2) (2 0)) ((5 2) (3 0))
-    ((5 4) (0 2)))
-  (non-orig (privk c) (privk hash) (privk hash-0) (privk hash-1)
-    (privk b) (privk m))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (displaced 2 6 customer 5) nb (0 2)
-    (enc "hash" c nc nb nb-0 price (pubk hash)) (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))))
-  (label 62)
-  (parent 45)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0))))
-  (label 63)
-  (parent 46)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 64)
-  (parent 46)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 6 4 customer 3) nb-0 (5 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 65)
-  (parent 47)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 66)
-  (parent 48)
-  (seen 64)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (4 3))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 67)
-  (parent 48)
-  (seen 88)
-  (unrealized (0 0) (0 2) (1 0) (6 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0))))
-  (label 68)
-  (parent 49)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 69)
-  (parent 49)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 6 4 customer 3) nb-0 (5 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 70)
-  (parent 50)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 71)
-  (parent 51)
-  (seen 69)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm nb-1 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (4 3)) ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 72)
-  (parent 51)
-  (seen 94)
-  (unrealized (0 0) (0 2) (1 0) (6 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text) (nc nb nb-0 data)
-    (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (4 3)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (acctnum-1 acctnum-0)) nb-0 (5 0)
-    (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 73)
-  (parent 52)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 6 2 bank 2) nb-0 (5 0)
-    (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 74)
-  (parent 52)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (5 0)
-    (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 75)
-  (parent 52)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0))))
-  (label 76)
-  (parent 53)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 77)
-  (parent 53)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 78)
-  (parent 55)
-  (seen 77)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (4 3))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 79)
-  (parent 55)
-  (seen 55)
-  (unrealized (0 0) (0 2) (1 0) (6 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (5 0)
-    (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 80)
-  (parent 56)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (3 3)) ((3 0) (4 0))
-    ((3 0) (5 0)) ((3 2) (2 0)) ((3 4) (1 0)) ((4 1) (1 0))
-    ((5 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 81)
-  (parent 59)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (0 0))
-    ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0)) ((4 1) (3 3))
-    ((5 1) (4 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (acctnum-1 acctnum-0)) nb-0 (4 0)
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 82)
-  (parent 60)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (3 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 0) (0 0)) ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0))
-    ((4 1) (3 3)) ((5 1) (4 0)) ((6 1) (4 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (4 0)
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 83)
-  (parent 60)
-  (seen 60)
-  (unrealized (0 0) (0 2) (1 0) (4 0) (6 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price price-0 acctnum goods text) (nc nb nb-0 nb-1 nm data)
-    (c hash hash-0 b m name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (4 1)) ((1 1) (4 3)) ((2 1) (1 0)) ((3 1) (0 0))
-    ((4 0) (3 0)) ((4 2) (2 0)) ((4 4) (0 2)))
-  (non-orig (privk c) (privk hash) (privk hash-0) (privk b) (privk m))
-  (uniq-orig nc nb nb-0 nm)
-  (operation generalization deleted (2 0))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))))
-  (label 84)
-  (parent 62)
-  (seen 12)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 85)
-  (parent 64)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 86)
-  (parent 65)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (4 3))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 87)
-  (parent 65)
-  (seen 65)
-  (unrealized (0 0) (0 2) (1 0) (6 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 88)
-  (parent 65)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 89)
-  (parent 66)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (5 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 90)
-  (parent 66)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 91)
-  (parent 69)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 92)
-  (parent 70)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (4 3)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 93)
-  (parent 70)
-  (seen 70)
-  (unrealized (0 0) (0 2) (1 0) (6 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 94)
-  (parent 70)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 95)
-  (parent 71)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (5 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 96)
-  (parent 71)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (4 3)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 97)
-  (parent 73)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 98)
-  (parent 73)
-  (unrealized (0 0) (0 2) (1 0) (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 99)
-  (parent 73)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text) (nc nb nb-0 data)
-    (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (acctnum-1 acctnum-0)) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 100)
-  (parent 74)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 6 3 bank 2) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 101)
-  (parent 74)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 102)
-  (parent 74)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 7 4 customer 3) nb-0 (6 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 103)
-  (parent 75)
-  (seen 35 131)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "5 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 104)
-  (parent 77)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (5 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 105)
-  (parent 78)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (5 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 106)
-  (parent 78)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 7 4 customer 3) nb-0 (6 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 107)
-  (parent 80)
-  (seen 37 131)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "5 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (0 0))
-    ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0)) ((4 1) (3 3))
-    ((5 1) (4 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 108)
-  (parent 82)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (3 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 0) (0 0)) ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0))
-    ((4 1) (3 3)) ((5 1) (4 0)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 109)
-  (parent 82)
-  (seen 136)
-  (unrealized (0 0) (0 2) (1 0) (6 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (0 0))
-    ((3 0) (6 0)) ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0))
-    ((4 1) (3 3)) ((5 1) (4 0)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 110)
-  (parent 82)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 111)
-  (parent 86)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 112)
-  (parent 86)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 113)
-  (parent 88)
-  (seen 112)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (4 3))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0))
-    ((6 1) (1 0)) ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 114)
-  (parent 88)
-  (seen 88)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (5 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 115)
-  (parent 90)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 116)
-  (parent 92)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 117)
-  (parent 92)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 118)
-  (parent 94)
-  (seen 117)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (4 3)) ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0))
-    ((6 1) (1 0)) ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 119)
-  (parent 94)
-  (seen 94)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (5 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 120)
-  (parent 96)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (4 3)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 121)
-  (parent 97)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 122)
-  (parent 97)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 7 4 customer 3) nb-0 (6 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 123)
-  (parent 98)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 124)
-  (parent 99)
-  (seen 122)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm nb-1 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (1 0)) ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 125)
-  (parent 99)
-  (seen 152)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 126)
-  (parent 100)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 127)
-  (parent 100)
-  (unrealized (0 0) (0 2) (1 0) (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 128)
-  (parent 100)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text) (nc nb nb-0 data)
-    (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (acctnum-1 acctnum-0)) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 129)
-  (parent 101)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (5 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 130)
-  (parent 101)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 7 4 customer 3) nb-0 (6 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 131)
-  (parent 102)
-  (seen 163)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (acctnum-1 acctnum-0)) nb-0 (5 0)
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 132)
-  (parent 103)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 7 6 bank 2) nb-1 (5 0)
-    (enc "hash" c nc nb-0 nb-1 price (pubk hash-2))
-    (enc nc nb-1 m price (pubk c))
-    (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c))))))
-  (label 133)
-  (parent 103)
-  (seen 73)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (5 0)
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 134)
-  (parent 103)
-  (seen 103)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (5 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 135)
-  (parent 106)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (acctnum-1 acctnum-0)) nb-0 (5 0)
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-    (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 136)
-  (parent 107)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-1)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-1)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-1) (nb nb-1) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-1)
-  (operation nonce-test (displaced 7 6 bank 2) nb-2 (5 0)
-    (enc "hash" c nc nb-1 nb-2 price (pubk hash-2))
-    (enc nc nb-2 m price (pubk c))
-    (enc c nc nb-2 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-1 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-1 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-1 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-1 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-1 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-1 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-1 m price (pubk c)))
-      (send (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) nb-1)))
-    ((recv (enc c nc nb-1 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 137)
-  (parent 107)
-  (seen 65 131)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 nb-2 nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-3) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (5 0)
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-    (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 138)
-  (parent 107)
-  (seen 107)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (0 0))
-    ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0)) ((4 1) (3 3))
-    ((5 1) (4 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 139)
-  (parent 108)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (6 0))
-    ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0)) ((4 1) (3 3))
-    ((5 1) (4 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 140)
-  (parent 108)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (0 0))
-    ((3 0) (6 0)) ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0))
-    ((4 1) (3 3)) ((5 1) (4 0)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 141)
-  (parent 110)
-  (seen 140)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (3 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 0) (0 0)) ((3 0) (6 0)) ((3 2) (2 0)) ((3 2) (5 0))
-    ((3 4) (1 0)) ((4 1) (3 3)) ((5 1) (4 0)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 142)
-  (parent 110)
-  (seen 172)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 143)
-  (parent 112)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 144)
-  (parent 113)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 145)
-  (parent 113)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 146)
-  (parent 117)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 147)
-  (parent 118)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (6 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 148)
-  (parent 118)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 149)
-  (parent 122)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 150)
-  (parent 123)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (1 0)) ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 151)
-  (parent 123)
-  (seen 123)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (1 0)) ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 152)
-  (parent 123)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 153)
-  (parent 124)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 154)
-  (parent 124)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 155)
-  (parent 126)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 156)
-  (parent 126)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 7 4 customer 3) nb-0 (6 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 157)
-  (parent 127)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 158)
-  (parent 128)
-  (seen 156)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm nb-1 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 159)
-  (parent 128)
-  (seen 187)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 160)
-  (parent 129)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (6 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (5 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 161)
-  (parent 129)
-  (unrealized (0 0) (0 2) (1 0) (6 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm data) (b m c hash b-0 hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 162)
-  (parent 129)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 7 4 customer 3) nb-0 (6 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 163)
-  (parent 130)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (acctnum-1 acctnum-0)) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 164)
-  (parent 131)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 165)
-  (parent 131)
-  (seen 131)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 166)
-  (parent 132)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 167)
-  (parent 132)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 168)
-  (parent 132)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 169)
-  (parent 133)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (7 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 nb-2 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 170)
-  (parent 136)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-3) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 171)
-  (parent 136)
-  (seen 136)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 172)
-  (parent 136)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-1)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-1)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-1) (nb nb-1) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-1)
-  (operation nonce-test (added-strand bank 2) nb-1 (5 0)
-    (enc "hash" c nc nb-1 nb-1 price (pubk hash-2))
-    (enc nc nb-1 (pubk c)) (enc nc nb-1 m price (pubk c))
-    (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-1 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-1 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-1 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-1 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-1 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-1 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-1 m price (pubk c)))
-      (send (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) nb-1)))
-    ((recv (enc c nc nb-1 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-1 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 173)
-  (parent 137)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (7 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (6 0))
-    ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0)) ((4 1) (3 3))
-    ((5 1) (4 0)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 174)
-  (parent 140)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (0 0))
-    ((3 0) (6 0)) ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0))
-    ((4 1) (3 3)) ((5 1) (4 0)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 175)
-  (parent 141)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (6 0))
-    ((3 0) (7 0)) ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0))
-    ((4 1) (3 3)) ((5 1) (4 0)) ((6 1) (1 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 176)
-  (parent 141)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (4 3)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 177)
-  (parent 145)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (4 3))
-    ((4 0) (6 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 178)
-  (parent 148)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 179)
-  (parent 150)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 180)
-  (parent 150)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (1 0)) ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 181)
-  (parent 152)
-  (seen 180)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (5 0)) ((4 2) (6 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (1 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 182)
-  (parent 152)
-  (seen 152)
-  (unrealized (0 0) (0 2) (1 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 183)
-  (parent 154)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 184)
-  (parent 156)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 185)
-  (parent 157)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 186)
-  (parent 157)
-  (seen 157)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 187)
-  (parent 157)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 188)
-  (parent 158)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 189)
-  (parent 158)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 190)
-  (parent 160)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 191)
-  (parent 160)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 7 4 customer 3) nb-0 (6 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 192)
-  (parent 161)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 193)
-  (parent 162)
-  (seen 191)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nm nb-1 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (5 0)) ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 194)
-  (parent 162)
-  (seen 223)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data) (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (acctnum-1 acctnum-0)) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 195)
-  (parent 163)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (5 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 196)
-  (parent 163)
-  (seen 163)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 197)
-  (parent 164)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 198)
-  (parent 164)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 199)
-  (parent 164)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 200)
-  (parent 166)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 201)
-  (parent 166)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 8 4 customer 3) nb-0 (7 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 202)
-  (parent 167)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 203)
-  (parent 168)
-  (seen 201)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 204)
-  (parent 168)
-  (seen 237)
-  (unrealized (0 0) (0 2) (1 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 8 4 customer 3) nb-0 (7 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 205)
-  (parent 169)
-  (seen 35)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 nb-2 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 206)
-  (parent 170)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 207)
-  (parent 170)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 208)
-  (parent 172)
-  (seen 207)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-3) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 209)
-  (parent 172)
-  (seen 172)
-  (unrealized (0 0) (0 2) (1 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-1)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-1)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-1) (nb nb-1) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-1)
-  (operation nonce-test (displaced 8 4 customer 3) nb-1 (7 0)
-    (enc nc nb-1 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-1 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-1 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-1 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-1 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-1 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-1 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-1 m price (pubk c)))
-      (send (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) nb-1)))
-    ((recv (enc c nc nb-1 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-1 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 210)
-  (parent 173)
-  (seen 37 231)
-  (unrealized (0 0) (0 2) (1 0) (5 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (3 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 0) (6 0))
-    ((3 0) (7 0)) ((3 2) (2 0)) ((3 2) (5 0)) ((3 4) (1 0))
-    ((4 1) (3 3)) ((5 1) (4 0)) ((6 1) (1 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 211)
-  (parent 176)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (5 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 212)
-  (parent 180)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (1 0)) ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 213)
-  (parent 181)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (1 0)) ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 214)
-  (parent 181)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 215)
-  (parent 185)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 216)
-  (parent 185)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 217)
-  (parent 187)
-  (seen 216)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (1 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 218)
-  (parent 187)
-  (seen 187)
-  (unrealized (0 0) (0 2) (1 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (6 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 219)
-  (parent 189)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 220)
-  (parent 191)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 221)
-  (parent 192)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (5 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 222)
-  (parent 192)
-  (seen 192)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 223)
-  (parent 192)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nm data)
-    (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (6 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 224)
-  (parent 193)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (6 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 225)
-  (parent 193)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 226)
-  (parent 195)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (7 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (5 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 227)
-  (parent 195)
-  (unrealized (0 0) (0 2) (1 0) (7 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 228)
-  (parent 195)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 229)
-  (parent 197)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 230)
-  (parent 197)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 8 4 customer 3) nb-0 (7 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 231)
-  (parent 198)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 232)
-  (parent 199)
-  (seen 230)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 233)
-  (parent 199)
-  (seen 263)
-  (unrealized (0 0) (0 2) (1 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 234)
-  (parent 201)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 nb-2 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 235)
-  (parent 202)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-3) (b b-0) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 236)
-  (parent 202)
-  (seen 202)
-  (unrealized (0 0) (0 2) (1 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 237)
-  (parent 202)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 238)
-  (parent 203)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 239)
-  (parent 203)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (acctnum-1 acctnum-0)) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-1 (pubk c))))))
-  (label 240)
-  (parent 205)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (5 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 241)
-  (parent 205)
-  (seen 205)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 242)
-  (parent 207)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 243)
-  (parent 208)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nb-2 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 244)
-  (parent 208)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 acctnum-1 text)
-    (nc nb nb-0 nb-1 nb-2 nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-1)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-1)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-1) (nb nb-1) (b b-0) (c c) (m m)
-    (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-1) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-1)
-    (nb nb-3) (b b-0) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (5 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-1)
-  (operation nonce-test (added-strand bank 2) nb-1 (5 0)
-    (enc "hash" c nc nb-1 nb-1 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-1 price (pubk hash-3))
-    (enc nc nb-1 (pubk c)) (enc nc nb-1 m price (pubk c))
-    (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-1 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-1 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-1 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-1 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-1 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-1 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-1 m price (pubk c)))
-      (send (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) nb-1)))
-    ((recv (enc c nc nb-1 acctnum-1 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-1 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-1 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc nb-1 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-1 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 245)
-  (parent 210)
-  (seen 210)
-  (unrealized (0 0) (0 2) (1 0) (5 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (5 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (1 0)) ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 246)
-  (parent 214)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 247)
-  (parent 216)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 248)
-  (parent 217)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 249)
-  (parent 217)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 250)
-  (parent 221)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 251)
-  (parent 221)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 252)
-  (parent 223)
-  (seen 251)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (5 0)) ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (1 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 253)
-  (parent 223)
-  (seen 223)
-  (unrealized (0 0) (0 2) (1 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nm nm-0 data) (m c hash b hash-0 hash-1 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (6 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 254)
-  (parent 225)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 255)
-  (parent 226)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 256)
-  (parent 226)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 8 4 customer 3) nb-0 (7 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 257)
-  (parent 227)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data) (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 258)
-  (parent 228)
-  (seen 256)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (5 0)) ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 259)
-  (parent 228)
-  (seen 282)
-  (unrealized (0 0) (0 2) (1 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 260)
-  (parent 230)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 nb-2 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 261)
-  (parent 231)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-3) (b b-0) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 262)
-  (parent 231)
-  (seen 231)
-  (unrealized (0 0) (0 2) (1 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 263)
-  (parent 231)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 264)
-  (parent 232)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 265)
-  (parent 232)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 nb-2 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 266)
-  (parent 235)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 267)
-  (parent 235)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 268)
-  (parent 237)
-  (seen 267)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-3) (b b-0) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((0 1) (9 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0))
-    ((9 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 269)
-  (parent 237)
-  (seen 237)
-  (unrealized (0 0) (0 2) (1 0) (9 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 270)
-  (parent 239)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 271)
-  (parent 240)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 272)
-  (parent 240)
-  (unrealized (0 0) (0 2) (1 0) (8 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 273)
-  (parent 240)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nb-2 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 274)
-  (parent 244)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 275)
-  (parent 249)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 276)
-  (parent 251)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 277)
-  (parent 252)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 278)
-  (parent 252)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 279)
-  (parent 256)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 nb-2 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 280)
-  (parent 257)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-3) (b b-0) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((0 1) (8 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (5 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 281)
-  (parent 257)
-  (seen 257)
-  (unrealized (0 0) (0 2) (1 0) (8 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 282)
-  (parent 257)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (7 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 283)
-  (parent 258)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 284)
-  (parent 258)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 nb-2 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 285)
-  (parent 261)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 286)
-  (parent 261)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 287)
-  (parent 263)
-  (seen 286)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-3) (b b-0) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((0 1) (9 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0))
-    ((9 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 288)
-  (parent 263)
-  (seen 263)
-  (unrealized (0 0) (0 2) (1 0) (9 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 289)
-  (parent 265)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 290)
-  (parent 267)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 291)
-  (parent 268)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nb-2 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)) ((9 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 292)
-  (parent 268)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 293)
-  (parent 271)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 294)
-  (parent 271)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 2) (8 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (displaced 9 4 customer 3) nb-0 (8 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 295)
-  (parent 272)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 296)
-  (parent 273)
-  (seen 294)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nm nb-2 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((0 1) (9 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0))
-    ((9 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-2 (pubk c))))))
-  (label 297)
-  (parent 273)
-  (seen 311)
-  (unrealized (0 0) (0 2) (1 0) (9 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (1 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 298)
-  (parent 278)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 nb-2 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 299)
-  (parent 280)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 300)
-  (parent 280)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 301)
-  (parent 282)
-  (seen 300)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-3) (b b-0) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((0 1) (9 0)) ((1 1) (0 2)) ((2 1) (5 0))
-    ((3 1) (5 0)) ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0))
-    ((9 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 302)
-  (parent 282)
-  (seen 282)
-  (unrealized (0 0) (0 2) (1 0) (9 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (7 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 303)
-  (parent 284)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 304)
-  (parent 286)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 305)
-  (parent 287)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nb-2 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)) ((9 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 306)
-  (parent 287)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nb-2 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)) ((9 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 307)
-  (parent 292)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (5 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 308)
-  (parent 294)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 text) (nc nb nb-0 nb-1 nb-2 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 2) (8 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3) (privk hash-4))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 309)
-  (parent 295)
-  (unrealized (0 0) (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 text)
-    (nc nb nb-0 nb-1 nb-2 nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 hash-5 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-4))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-3) (b b-0) (c c) (hash hash-5))
-  (precedes ((0 1) (4 1)) ((0 1) (9 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 2) (8 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0))
-    ((9 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4) (privk hash-5))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-0 price (pubk hash-5))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 310)
-  (parent 295)
-  (seen 295)
-  (unrealized (0 0) (0 2) (1 0) (9 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-4))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 2) (8 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0))
-    ((9 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 311)
-  (parent 295)
-  (unrealized (0 0) (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nc nb nb-0 nb-1 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 312)
-  (parent 296)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0)) ((9 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 313)
-  (parent 296)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0))
-    ((7 1) (1 0)) ((8 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 314)
-  (parent 300)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (0 0)) ((4 0) (8 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 315)
-  (parent 301)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nb-2 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (8 0)) ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)) ((9 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 316)
-  (parent 301)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nb-2 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)) ((9 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 317)
-  (parent 306)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nc nb nb-0 nb-1 nb-2 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-4))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 2) (8 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3) (privk hash-4))
-  (uniq-orig nc nb nb-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 318)
-  (parent 309)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-4))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 2) (8 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0)) ((9 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3) (privk hash-4))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 319)
-  (parent 309)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-4))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 2) (8 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0))
-    ((9 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3) (privk hash-4))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (b-0 b) (acctnum-0 acctnum)) nc
-    (1 0) (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m)) (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 320)
-  (parent 311)
-  (seen 319)
-  (unrealized (0 0) (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum acctnum-0 goods-0 price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm nb-3 data)
-    (b m c hash b-0 hash-0 hash-1 hash-2 hash-3 hash-4 hash-5 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nb-0) (nb nb-0) (b b-0) (c c) (m m)
-    (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b-0) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b-0) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b-0) (c c) (hash hash-4))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-3) (b b-0) (c c) (hash hash-5))
-  (precedes ((0 1) (4 1)) ((0 1) (10 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)) ((4 0) (0 0)) ((4 0) (9 0)) ((4 2) (2 0))
-    ((4 2) (3 0)) ((4 2) (6 0)) ((4 2) (7 0)) ((4 2) (8 0))
-    ((4 4) (1 0)) ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (5 0))
-    ((8 1) (1 0)) ((9 1) (1 0)) ((10 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0)
-    (privk hash-0) (privk hash-1) (privk hash-2) (privk hash-3)
-    (privk hash-4) (privk hash-5))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (added-strand bank 2) nc (1 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-    (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-    (enc nc nb-0 (pubk c)) (enc nc nb-1 (pubk c)) (enc nc nb-2 (pubk c))
-    (enc nc nb-0 m price (pubk c)) (enc nc nm m price-0 (pubk c))
-    (enc c nc goods-0 (pubk m))
-    (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b-0)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b-0)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b-0)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b-0)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-3 nb-0 price (pubk hash-5))
-            (privk b-0)) (enc nc nb-3 (pubk c))))))
-  (label 321)
-  (parent 311)
-  (seen 311)
-  (unrealized (0 0) (0 2) (1 0) (10 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (8 0)) ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0)) ((9 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 322)
-  (parent 313)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nb-2 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-3))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (5 0)) ((3 1) (5 0))
-    ((4 0) (8 0)) ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (1 0)) ((8 1) (1 0)) ((9 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 323)
-  (parent 316)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-4))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0)) ((4 2) (6 0))
-    ((4 2) (7 0)) ((4 2) (8 0)) ((4 4) (1 0)) ((5 1) (4 3))
-    ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0)) ((9 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3) (privk hash-4))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 324)
-  (parent 319)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text)
-    (nc nb nb-0 nb-1 nb-2 nm data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-4))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (0 0)) ((4 0) (9 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 2) (8 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0))
-    ((9 1) (1 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3) (privk hash-4))
-  (uniq-orig nc nb nb-0 nm)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c)))))
-  (label 325)
-  (parent 320)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (goods price acctnum goods-0 price-0 price-1 text)
-    (nc nb nb-0 nb-1 nb-2 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods-0) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-4))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods-0) (price price-1) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (9 0)) ((4 0) (10 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 2) (8 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0))
-    ((9 1) (1 0)) ((10 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3) (privk hash-4))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (0 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 326)
-  (parent 320)
-  (unrealized (0 0) (0 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 price-1 text)
-    (nc nb nb-0 nb-1 nb-2 nm nm-0 data)
-    (m c hash b hash-0 hash-1 hash-2 hash-3 hash-4 name))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb-0) (b b) (c c) (m m) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-2))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-3))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-4))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand merchant 2 (goods goods) (price price-1) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (4 1)) ((1 1) (0 2)) ((2 1) (1 0)) ((3 1) (1 0))
-    ((4 0) (9 0)) ((4 0) (10 0)) ((4 2) (2 0)) ((4 2) (3 0))
-    ((4 2) (6 0)) ((4 2) (7 0)) ((4 2) (8 0)) ((4 4) (1 0))
-    ((5 1) (4 3)) ((6 1) (5 0)) ((7 1) (5 0)) ((8 1) (1 0))
-    ((9 1) (1 0)) ((10 1) (0 0)))
-  (non-orig (privk m) (privk c) (privk hash) (privk b) (privk hash-0)
-    (privk hash-1) (privk hash-2) (privk hash-3) (privk hash-4))
-  (uniq-orig nc nb nb-0 nm nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (0 0)
-    (enc nc nm-0 m price-1 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c))))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) nb-0)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-3))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-4))
-            (privk b)) (enc nc nb-2 (pubk c)))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-1 (pubk c)))))
-  (label 327)
-  (parent 326)
-  (unrealized (0 2))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
-
-(defprotocol sorted_epmo_acctnum basic
-  (defrole bank
-    (vars (b c m name) (acctnum price text) (hash name) (nc nm nb data))
-    (trace (recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    (non-orig (privk hash))
-    (annotations b
-      (1
-        (forall ((pm name))
-          (implies
-            (and (authtransfer c acctnum b price pm nm)
-              (reqtransfer pm b price pm nm))
-            (dotransfer acctnum b price pm nm))))
-      (2
-        (and (says c (authtransfer c acctnum b price m nm))
-          (says m (reqtransfer m b price m nm))))))
-  (defrole customer
-    (vars (b c m hash name) (acctnum goods price text) (nc nm nb data))
-    (trace (send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    (non-orig (privk b) (privk hash))
-    (uniq-orig nc)
-    (annotations c
-      (1
-        (says m
-          (implies
-            (exists ((acctnum2 text))
-              (dotransfer acctnum2 b price m nm)) (doship m goods c))))
-      (3
-        (says b
-          (forall ((pm name))
-            (implies
-              (and (authtransfer c acctnum b price m nm)
-                (reqtransfer pm b price pm nm))
-              (dotransfer acctnum b price pm nm)))))
-      (4 (authtransfer c acctnum b price m nm))))
-  (defrole merchant
-    (vars (b c m hash name) (goods price text) (nc nm nb data))
-    (trace (recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    (non-orig (privk hash))
-    (uniq-orig nm)
-    (annotations m
-      (1
-        (implies
-          (exists ((acctnum2 text)) (dotransfer acctnum2 b price m nm))
-          (doship m goods c)))
-      (2
-        (and
-          (says b
-            (forall ((pm name))
-              (exists ((acctnum2 text))
-                (implies
-                  (and (authtransfer c acctnum2 b price m nm)
-                    (reqtransfer pm b price pm nm))
-                  (dotransfer acctnum2 b price pm nm)))))
-          (says c
-            (exists ((acctnum2 text))
-              (authtransfer c acctnum2 b price m nm)))))
-      (3 (and (reqtransfer m b price m nm) (doship m goods c))))))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price text) (nm nb nc data) (b m c hash name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nb nc)
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m)))))
-  (label 328)
-  (unrealized (0 2))
-  (origs (nb (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price goods price-0 text) (nm nb nc nc-0 data)
-    (b m c hash c-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price-0) (nc nc-0) (nm nm)
-    (nb nb) (b b) (c c-0) (m m) (hash hash))
-  (precedes ((0 1) (1 2)) ((1 1) (0 0)) ((1 3) (0 2)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nb nc)
-  (operation encryption-test (added-strand merchant 4)
-    (enc (enc "hash" b m nb nm (pubk hash)) (privk m)) (0 2))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c-0 nc-0 goods (pubk m)))
-      (send (enc nc-0 nm m price-0 (pubk c-0)))
-      (recv
-        (cat
-          (enc (enc "hash" c-0 nc-0 nb nm price-0 (pubk hash))
-            (privk b)) nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m)))))
-  (label 329)
-  (parent 328)
-  (unrealized (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price goods text) (nm nb nc data) (b m c hash name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (1 2)) ((1 1) (0 0)) ((1 3) (0 2)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nb nc)
-  (operation encryption-test (displaced 2 0 bank 2)
-    (enc (enc "hash" c-0 nc-0 nb nm price-0 (pubk hash)) (privk b))
-    (1 2))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m)))))
-  (label 330)
-  (parent 329)
-  (unrealized (0 0) (1 2))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price goods acctnum-0 goods-0 text) (nm nb nc data)
-    (b m c hash b-0 m-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nm) (nb nb) (b b-0) (c c) (m m-0)
-    (hash hash))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (added-strand customer 5) nb (1 2)
-    (enc "hash" c nc nb nm price (pubk hash)) (enc nc nb (pubk c)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods-0 (pubk m-0)))
-      (recv (enc nc nm m-0 price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b-0)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b-0))
-          nb))))
-  (label 331)
-  (parent 330)
-  (unrealized (0 0) (2 1) (2 3))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price goods acctnum-0 goods-0 text) (nm nb nc data)
-    (b m c hash b-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nm) (nb nb) (b b-0) (c c) (m m)
-    (hash hash))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk b-0))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (contracted (m-0 m)) nm (2 1)
-    (enc nc nm m price (pubk c)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b-0)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b-0))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b-0))
-          nb))))
-  (label 332)
-  (parent 331)
-  (unrealized (0 0) (1 0) (2 3))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price goods acctnum-0 goods-0 text) (nm nb nc data)
-    (b m c hash name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nb nc)
-  (operation encryption-test (displaced 3 0 bank 2)
-    (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b-0)) (2 3))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))))
-  (label 333)
-  (parent 332)
-  (unrealized (0 0) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods text) (nm nb nc data)
-    (b m c hash name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (contracted (goods-0 goods)) nc (1 0)
-    (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))))
-  (label 334)
-  (parent 333)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price goods acctnum-0 goods-0 price-0 text)
-    (nm nb nc nm-0 data) (b m c hash name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods-0)
-    (price price) (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods-0) (price price-0) (nc nc)
-    (nm nm-0) (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (3 0)) ((2 4) (1 2)) ((3 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (added-strand merchant 2) nc (1 0)
-    (enc c nc goods-0 (pubk m)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods-0 (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods-0 (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 335)
-  (parent 333)
-  (unrealized (0 0) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods text) (nm nb nc data)
-    (b m c hash name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (0 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (displaced 3 2 customer 3) nm (0 0)
-    (enc nc nm m price (pubk c)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))))
-  (label 336)
-  (parent 334)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods price-0 text)
-    (nm nb nc nm-0 data) (b m c hash name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (0 0)) ((1 1) (2 1)) ((1 3) (0 2))
-    ((2 0) (3 0)) ((2 4) (1 2)) ((3 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (contracted (goods-0 goods)) nc (1 0)
-    (enc nc nm-0 m price-0 (pubk c)) (enc c nc goods (pubk m)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 337)
-  (parent 335)
-  (unrealized (0 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nm nb nc data) (b m c hash name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (0 0)) ((2 4) (1 2)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (contracted (acctnum-0 acctnum)) nm (0 0)
-    (enc nc nm m price (pubk c)) (enc c nc nm acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))))
-  (label 338)
-  (parent 336)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((b b) (m m) (c c) (nm nm) (nb nb) (nc nc) (hash hash)
-        (acctnum acctnum) (price price))))
-  (origs (nc (2 0)) (nm (1 1)) (nb (0 1))))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods text) (nm nb nc nb-0 data)
-    (b m c hash hash-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 1) (3 0)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 2) (0 0)) ((2 4) (1 2)) ((3 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (added-strand bank 2) nm (0 0)
-    (enc nc nm m price (pubk c)) (enc c nc nm acctnum-0 price (pubk b)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc nm acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nm price (pubk hash-0)) (privk b))
-          (enc nc nb-0 (pubk c))))))
-  (label 339)
-  (parent 336)
-  (unrealized (0 0) (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods price-0 text)
-    (nm nb nc nm-0 data) (b m c hash name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (3 0))
-    ((2 2) (0 0)) ((2 4) (1 2)) ((3 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (displaced 4 2 customer 3) nm (0 0)
-    (enc nc nm m price (pubk c)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 340)
-  (parent 337)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods text) (nm nb nc nb-0 data)
-    (b m c hash hash-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (3 0)) ((2 4) (1 2)) ((3 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (displaced 4 2 customer 3) nm (3 0)
-    (enc nc nm m price (pubk c)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc nm acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nm price (pubk hash-0)) (privk b))
-          (enc nc nb-0 (pubk c))))))
-  (label 341)
-  (parent 339)
-  (unrealized (0 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nm nb nc nm-0 data)
-    (b m c hash name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (3 0))
-    ((2 2) (0 0)) ((2 4) (1 2)) ((3 1) (1 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (contracted (acctnum-0 acctnum)) nm (0 0)
-    (enc nc nm m price (pubk c)) (enc c nc nm acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c)))))
-  (label 342)
-  (parent 340)
-  (seen 338)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods price-0 text)
-    (nm nb nc nm-0 nb-0 data) (b m c hash hash-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 1) (4 0)) ((1 3) (0 2))
-    ((2 0) (3 0)) ((2 2) (0 0)) ((2 4) (1 2)) ((3 1) (1 0))
-    ((4 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (added-strand bank 2) nm (0 0)
-    (enc nc nm m price (pubk c)) (enc c nc nm acctnum-0 price (pubk b)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c))))
-    ((recv (enc c nc nm acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nm price (pubk hash-0)) (privk b))
-          (enc nc nb-0 (pubk c))))))
-  (label 343)
-  (parent 340)
-  (unrealized (0 0) (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nm nb nc nb-0 data)
-    (b m c hash hash-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (3 0)) ((2 4) (1 2)) ((3 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (contracted (acctnum-0 acctnum)) nm (0 0)
-    (enc "hash" c nc nb-0 nm price (pubk hash-0))
-    (enc nc nm m price (pubk c)) (enc c nc nm acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nm price (pubk hash-0)) (privk b))
-          (enc nc nb-0 (pubk c))))))
-  (label 344)
-  (parent 341)
-  (seen 338)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods text) (nb nc nb-0 data)
-    (b m c hash hash-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (3 0)) ((2 4) (1 2)) ((3 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0))
-  (uniq-orig nb nc nb-0)
-  (operation nonce-test (displaced 4 3 bank 2) nm (0 0)
-    (enc "hash" c nc nb-0 nm price (pubk hash-0))
-    (enc nc nm m price (pubk c)) (enc c nc nm acctnum-0 price (pubk b)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 345)
-  (parent 341)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods text) (nm nb nc nb-0 nb-1 data)
-    (b m c hash hash-0 hash-1 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 1) (4 0)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 2) (3 0)) ((2 4) (1 2)) ((3 1) (0 0))
-    ((4 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nm nb nc)
-  (operation nonce-test (added-strand bank 2) nm (0 0)
-    (enc "hash" c nc nb-0 nm price (pubk hash-0))
-    (enc nc nm m price (pubk c)) (enc c nc nm acctnum-0 price (pubk b)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc nm acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nm price (pubk hash-0)) (privk b))
-          (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nm acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nm price (pubk hash-1)) (privk b))
-          (enc nc nb-1 (pubk c))))))
-  (label 346)
-  (parent 341)
-  (seen 341)
-  (unrealized (0 0) (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods price-0 text)
-    (nm nb nc nm-0 nb-0 data) (b m c hash hash-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (3 0))
-    ((2 2) (4 0)) ((2 4) (1 2)) ((3 1) (1 0)) ((4 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (displaced 5 2 customer 3) nm (4 0)
-    (enc nc nm m price (pubk c)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c))))
-    ((recv (enc c nc nm acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nm price (pubk hash-0)) (privk b))
-          (enc nc nb-0 (pubk c))))))
-  (label 347)
-  (parent 343)
-  (unrealized (0 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nb nc nb-0 data)
-    (b m c hash hash-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (3 0)) ((2 4) (1 2)) ((3 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0))
-  (uniq-orig nb nc nb-0)
-  (operation nonce-test (contracted (acctnum-0 acctnum)) nb-0 (0 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 348)
-  (parent 345)
-  (seen 338)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods text) (nb nc nb-0 nb-1 data)
-    (b m c hash hash-0 hash-1 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 1) (4 0)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 2) (3 0)) ((2 4) (1 2)) ((3 1) (0 0))
-    ((4 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nb nc nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (0 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 349)
-  (parent 345)
-  (unrealized (0 0) (4 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nm nb nc nm-0 nb-0 data)
-    (b m c hash hash-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (3 0))
-    ((2 2) (4 0)) ((2 4) (1 2)) ((3 1) (1 0)) ((4 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (contracted (acctnum-0 acctnum)) nm (0 0)
-    (enc "hash" c nc nb-0 nm price (pubk hash-0))
-    (enc nc nm m price (pubk c)) (enc c nc nm acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c))))
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nm price (pubk hash-0)) (privk b))
-          (enc nc nb-0 (pubk c))))))
-  (label 350)
-  (parent 347)
-  (seen 344)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods price-0 text)
-    (nb nc nm nb-0 data) (b m c hash hash-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (3 0))
-    ((2 2) (4 0)) ((2 4) (1 2)) ((3 1) (1 0)) ((4 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0))
-  (uniq-orig nb nc nm nb-0)
-  (operation nonce-test (displaced 5 4 bank 2) nm-0 (0 0)
-    (enc "hash" c nc nb-0 nm-0 price (pubk hash-0))
-    (enc nc nm-0 m price (pubk c))
-    (enc c nc nm-0 acctnum-0 price (pubk b)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 351)
-  (parent 347)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods price-0 text)
-    (nm nb nc nm-0 nb-0 nb-1 data) (b m c hash hash-0 hash-1 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nm)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nm) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm-0)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nm)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 1) (5 0)) ((1 3) (0 2))
-    ((2 0) (3 0)) ((2 2) (4 0)) ((2 4) (1 2)) ((3 1) (1 0))
-    ((4 1) (0 0)) ((5 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nm nb nc nm-0)
-  (operation nonce-test (added-strand bank 2) nm (0 0)
-    (enc "hash" c nc nb-0 nm price (pubk hash-0))
-    (enc nc nm m price (pubk c)) (enc c nc nm acctnum-0 price (pubk b)))
-  (traces
-    ((recv (enc c nc nm acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nm (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nm m price (pubk c)))
-      (send (enc c nc nm acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nm price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm-0 m price-0 (pubk c))))
-    ((recv (enc c nc nm acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nm price (pubk hash-0)) (privk b))
-          (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nm acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nm price (pubk hash-1)) (privk b))
-          (enc nc nb-1 (pubk c))))))
-  (label 352)
-  (parent 347)
-  (seen 347)
-  (unrealized (0 0) (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods text) (nb nc nb-0 nb-1 data)
-    (b m c hash hash-0 hash-1 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (3 0)) ((2 2) (4 0)) ((2 4) (1 2)) ((3 1) (0 0))
-    ((4 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nb nc nb-0)
-  (operation nonce-test (displaced 5 2 customer 3) nb-0 (4 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 353)
-  (parent 349)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nb nc nm nb-0 data)
-    (b m c hash hash-0 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (3 0))
-    ((2 2) (4 0)) ((2 4) (1 2)) ((3 1) (1 0)) ((4 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0))
-  (uniq-orig nb nc nm nb-0)
-  (operation nonce-test (contracted (acctnum-0 acctnum)) nb-0 (0 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c))))))
-  (label 354)
-  (parent 351)
-  (seen 348)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods price-0 text)
-    (nb nc nm nb-0 nb-1 data) (b m c hash hash-0 hash-1 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 1) (5 0)) ((1 3) (0 2))
-    ((2 0) (3 0)) ((2 2) (4 0)) ((2 4) (1 2)) ((3 1) (1 0))
-    ((4 1) (0 0)) ((5 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nb nc nm nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (0 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 355)
-  (parent 351)
-  (unrealized (0 0) (5 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods text) (nb nc nb-0 nb-1 data)
-    (b m c hash hash-0 hash-1 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (1 0))
-    ((2 2) (3 0)) ((2 2) (4 0)) ((2 4) (1 2)) ((3 1) (0 0))
-    ((4 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nb nc nb-0)
-  (operation nonce-test (contracted (acctnum-0 acctnum)) nb-0 (0 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 356)
-  (parent 353)
-  (seen 344)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods text) (nb nc nb-0 nb-1 nb-2 data)
-    (b m c hash hash-0 hash-1 hash-2 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 1) (5 0)) ((1 3) (0 2))
-    ((2 0) (1 0)) ((2 2) (3 0)) ((2 2) (4 0)) ((2 4) (1 2))
-    ((3 1) (0 0)) ((4 1) (0 0)) ((5 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nb nc nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (0 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 357)
-  (parent 353)
-  (seen 353)
-  (unrealized (0 0) (5 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods price-0 text)
-    (nb nc nm nb-0 nb-1 data) (b m c hash hash-0 hash-1 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (3 0))
-    ((2 2) (4 0)) ((2 2) (5 0)) ((2 4) (1 2)) ((3 1) (1 0))
-    ((4 1) (0 0)) ((5 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nb nc nm nb-0)
-  (operation nonce-test (displaced 6 2 customer 3) nb-0 (5 0)
-    (enc nc nb-0 m price (pubk c)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 358)
-  (parent 355)
-  (unrealized (0 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (price acctnum goods price-0 text) (nb nc nm nb-0 nb-1 data)
-    (b m c hash hash-0 hash-1 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 3) (0 2)) ((2 0) (3 0))
-    ((2 2) (4 0)) ((2 2) (5 0)) ((2 4) (1 2)) ((3 1) (1 0))
-    ((4 1) (0 0)) ((5 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0)
-    (privk hash-1))
-  (uniq-orig nb nc nm nb-0)
-  (operation nonce-test (contracted (acctnum-0 acctnum)) nb-0 (0 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum price (pubk b)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c))))))
-  (label 359)
-  (parent 358)
-  (seen 356)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton sorted_epmo_acctnum
-  (vars (acctnum price acctnum-0 goods price-0 text)
-    (nb nc nm nb-0 nb-1 nb-2 data)
-    (b m c hash hash-0 hash-1 hash-2 name))
-  (defstrand bank 3 (acctnum acctnum) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 4 (goods goods) (price price) (nc nc) (nm nb-0)
-    (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand customer 5 (acctnum acctnum-0) (goods goods) (price price)
-    (nc nc) (nm nb-0) (nb nb) (b b) (c c) (m m) (hash hash))
-  (defstrand merchant 2 (goods goods) (price price-0) (nc nc) (nm nm)
-    (c c) (m m))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-0) (b b) (c c) (hash hash-0))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-1) (b b) (c c) (hash hash-1))
-  (defstrand bank 2 (acctnum acctnum-0) (price price) (nc nc) (nm nb-0)
-    (nb nb-2) (b b) (c c) (hash hash-2))
-  (precedes ((0 1) (2 3)) ((1 1) (2 1)) ((1 1) (6 0)) ((1 3) (0 2))
-    ((2 0) (3 0)) ((2 2) (4 0)) ((2 2) (5 0)) ((2 4) (1 2))
-    ((3 1) (1 0)) ((4 1) (0 0)) ((5 1) (0 0)) ((6 1) (0 0)))
-  (non-orig (privk b) (privk m) (privk c) (privk hash) (privk hash-0)
-    (privk hash-1) (privk hash-2))
-  (uniq-orig nb nc nm nb-0)
-  (operation nonce-test (added-strand bank 2) nb-0 (0 0)
-    (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-    (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-    (enc nc nb-0 (pubk c)) (enc nc nb-0 m price (pubk c))
-    (enc c nc nb-0 acctnum-0 price (pubk b)))
-  (traces
-    ((recv (enc c nc nb-0 acctnum price (pubk b)))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (recv (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nb-0 m price (pubk c)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb))
-      (send (enc (enc "hash" b m nb nb-0 (pubk hash)) (privk m))))
-    ((send (enc c nc goods (pubk m)))
-      (recv (enc nc nb-0 m price (pubk c)))
-      (send (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (recv
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          (enc nc nb (pubk c))))
-      (send
-        (cat (enc (enc "hash" c nc nb nb-0 price (pubk hash)) (privk b))
-          nb)))
-    ((recv (enc c nc goods (pubk m)))
-      (send (enc nc nm m price-0 (pubk c))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-0 nb-0 price (pubk hash-0))
-            (privk b)) (enc nc nb-0 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-1 nb-0 price (pubk hash-1))
-            (privk b)) (enc nc nb-1 (pubk c)))))
-    ((recv (enc c nc nb-0 acctnum-0 price (pubk b)))
-      (send
-        (cat
-          (enc (enc "hash" c nc nb-2 nb-0 price (pubk hash-2))
-            (privk b)) (enc nc nb-2 (pubk c))))))
-  (label 360)
-  (parent 358)
-  (seen 358)
-  (unrealized (0 0) (6 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
diff --git a/tst/staticdh.scm b/tst/staticdh.scm
new file mode 100644
--- /dev/null
+++ b/tst/staticdh.scm
@@ -0,0 +1,64 @@
+(herald "Static DH key exchange" 
+  (algebra diffie-hellman))
+
+(defprotocol staticdh diffie-hellman
+  (defrole init
+    (vars (b ca name) (h base) (x expn) (n text))
+    (trace
+       (recv (enc "cert" h b (privk ca)))
+       (send (enc n (exp h x)))
+       (recv n))
+    (uniq-orig n)
+    (non-orig (privk ca) x))
+  (defrole resp
+    (vars (a ca name) (h base) (y expn) (n text))
+    (trace
+       (recv (enc "cert" h a (privk ca)))
+       (recv (enc n (exp h y)))
+       (send n))
+    (non-orig (privk ca) y))
+  (defrole ca
+    (vars (p ca name) (x expn))
+    (trace
+       (send (enc "cert" (exp (gen) x) p (privk ca))))
+    (non-orig x)
+    (fn-of (owner-of (p x)))))
+
+(comment
+(defskeleton staticdh
+  (vars )
+  (defstrand init 3))
+)
+
+(defprotocol staticdh1 diffie-hellman
+  (defrole init
+    (vars (a b ca name) (h base) (x expn) (n text))
+    (trace
+       (recv (enc "cert" (exp (gen) x) a (privk ca)))
+       (recv (enc "cert" h b (privk ca)))
+       (send (enc n (exp h x)))
+       (recv n))
+    (uniq-orig n)
+    (neq (a b))
+    (non-orig (privk ca)))
+  (defrole resp
+    (vars (a b ca name) (h base) (y expn) (n text))
+    (trace
+       (recv (enc "cert" h a (privk ca)))
+       (recv (enc "cert" (exp (gen) y) b (privk ca)))
+       (recv (enc n (exp h y)))
+       (send n))
+    (neq (a b))
+    (non-orig (privk ca)))
+  (defrole ca
+    (vars (p ca name) (x expn) (n text))
+    (trace
+       (send (enc "cert" (exp (gen) x) p (privk ca))))
+    (non-orig x)
+    (fn-of (owner-of (p x)))))
+
+
+(defskeleton staticdh1
+  (vars )
+  (defstrand init 4))
+
diff --git a/tst/staticdh.tst b/tst/staticdh.tst
new file mode 100644
--- /dev/null
+++ b/tst/staticdh.tst
@@ -0,0 +1,516 @@
+(herald "Static DH key exchange" (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from staticdh.scm")
+
+(defprotocol staticdh1 diffie-hellman
+  (defrole init
+    (vars (a b ca name) (h base) (x expn) (n text))
+    (trace (recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" h b (privk ca))) (send (enc n (exp h x)))
+      (recv n))
+    (non-orig (privk ca))
+    (uniq-orig n)
+    (neq (a b)))
+  (defrole resp
+    (vars (a b ca name) (h base) (y expn) (n text))
+    (trace (recv (enc "cert" h a (privk ca)))
+      (recv (enc "cert" (exp (gen) y) b (privk ca)))
+      (recv (enc n (exp h y))) (send n))
+    (non-orig (privk ca))
+    (neq (a b)))
+  (defrole ca
+    (vars (p ca name) (x expn))
+    (trace (send (enc "cert" (exp (gen) x) p (privk ca))))
+    (non-orig x)
+    (fn-of (owner-of (p x)))))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca name) (h base) (x expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h h) (x x))
+  (neq (a b))
+  (non-orig (privk ca))
+  (uniq-orig n)
+  (traces
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" h b (privk ca))) (send (enc n (exp h x)))
+      (recv n)))
+  (label 0)
+  (unrealized (0 0) (0 1))
+  (origs (n (0 2)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca name) (h base) (x expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h h) (x x))
+  (defstrand ca 1 (p a) (ca ca) (x x))
+  (precedes ((1 0) (0 0)))
+  (fn-of (owner-of (a x)))
+  (neq (a b))
+  (non-orig (privk ca) x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 1)
+    (enc "cert" (exp (gen) x) a (privk ca)) (0 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" h b (privk ca))) (send (enc n (exp h x)))
+      (recv n)) ((send (enc "cert" (exp (gen) x) a (privk ca)))))
+  (label 1)
+  (parent 0)
+  (unrealized (0 1) (0 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca name) (x x-0 expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x-0)) (x x))
+  (defstrand ca 1 (p a) (ca ca) (x x))
+  (defstrand ca 1 (p b) (ca ca) (x x-0))
+  (precedes ((1 0) (0 0)) ((2 0) (0 1)))
+  (fn-of (owner-of (b x-0) (a x)))
+  (neq (a b))
+  (non-orig (privk ca) x x-0)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 1)
+    (enc "cert" (exp (gen) x-0) b (privk ca)) (0 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) b (privk ca)))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x-0) b (privk ca)))))
+  (label 2)
+  (parent 1)
+  (unrealized (0 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca a-0 b-0 ca-0 name) (x x-0 y expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x-0)) (x x))
+  (defstrand ca 1 (p a) (ca ca) (x x))
+  (defstrand ca 1 (p b) (ca ca) (x x-0))
+  (defstrand resp 4 (n n) (a a-0) (b b-0) (ca ca-0)
+    (h (exp (gen) (mul x x-0 (rec y)))) (y y))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((2 0) (0 1)) ((3 3) (0 3)))
+  (fn-of (owner-of (b x-0) (a x)))
+  (neq (a-0 b-0) (a b))
+  (non-orig (privk ca) (privk ca-0) x x-0)
+  (uniq-orig n)
+  (operation nonce-test (added-strand resp 4) n (0 3)
+    (enc n (exp (gen) (mul x x-0))))
+  (traces
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) b (privk ca)))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x-0) b (privk ca))))
+    ((recv
+       (enc "cert" (exp (gen) (mul x x-0 (rec y))) a-0 (privk ca-0)))
+      (recv (enc "cert" (exp (gen) y) b-0 (privk ca-0)))
+      (recv (enc n (exp (gen) (mul x x-0)))) (send n)))
+  (label 3)
+  (parent 2)
+  (unrealized (3 0) (3 1))
+  (comment "4 in cohort - 4 not yet seen"))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca name) (x x-0 expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x-0)) (x x))
+  (defstrand ca 1 (p a) (ca ca) (x x))
+  (defstrand ca 1 (p b) (ca ca) (x x-0))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((1 0) (0 0)) ((2 0) (0 1)) ((3 1) (0 3)))
+  (fn-of (owner-of (b x-0) (a x)))
+  (neq (a b))
+  (non-orig (privk ca) x x-0)
+  (uniq-orig n)
+  (operation nonce-test (added-listener (exp (gen) (mul x x-0))) n (0 3)
+    (enc n (exp (gen) (mul x x-0))))
+  (traces
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) b (privk ca)))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x-0) b (privk ca))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0)))))
+  (label 4)
+  (parent 2)
+  (unrealized (3 0))
+  (comment "empty cohort"))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca b-0 name) (y x expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (x y))
+  (defstrand ca 1 (p a) (ca ca) (x y))
+  (defstrand ca 1 (p b) (ca ca) (x x))
+  (defstrand resp 4 (n n) (a b) (b b-0) (ca ca) (h (exp (gen) x)) (y y))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((2 0) (0 1)) ((2 0) (3 0))
+    ((3 3) (0 3)))
+  (fn-of (owner-of (b x) (a y)))
+  (neq (b b-0) (a b))
+  (non-orig (privk ca) y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 4 2 ca 1)
+    (enc "cert" (exp (gen) x) a-0 (privk ca-0)) (3 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) y) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x) b (privk ca)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc "cert" (exp (gen) y) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) b (privk ca)))
+      (recv (enc "cert" (exp (gen) y) b-0 (privk ca)))
+      (recv (enc n (exp (gen) (mul y x)))) (send n)))
+  (label 5)
+  (parent 3)
+  (unrealized (3 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca b-0 ca-0 name) (y x expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (x y))
+  (defstrand ca 1 (p a) (ca ca) (x y))
+  (defstrand ca 1 (p b) (ca ca) (x x))
+  (defstrand resp 4 (n n) (a b) (b b-0) (ca ca-0) (h (exp (gen) x))
+    (y y))
+  (defstrand ca 1 (p b) (ca ca-0) (x x))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((2 0) (0 1)) ((3 3) (0 3))
+    ((4 0) (3 0)))
+  (fn-of (owner-of (b x) (a y)))
+  (neq (b b-0) (a b))
+  (non-orig (privk ca) (privk ca-0) y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 1)
+    (enc "cert" (exp (gen) x) b (privk ca-0)) (3 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) y) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x) b (privk ca)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc "cert" (exp (gen) y) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) b (privk ca-0)))
+      (recv (enc "cert" (exp (gen) y) b-0 (privk ca-0)))
+      (recv (enc n (exp (gen) (mul y x)))) (send n))
+    ((send (enc "cert" (exp (gen) x) b (privk ca-0)))))
+  (label 6)
+  (parent 3)
+  (unrealized (3 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca b-0 name) (y x expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 1 (p a) (ca ca) (x x))
+  (defstrand ca 1 (p b) (ca ca) (x y))
+  (defstrand resp 4 (n n) (a a) (b b-0) (ca ca) (h (exp (gen) x)) (y y))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((1 0) (3 0)) ((2 0) (0 1))
+    ((3 3) (0 3)))
+  (fn-of (owner-of (a x) (b y)))
+  (neq (a b-0) (a b))
+  (non-orig (privk ca) y x)
+  (uniq-orig n)
+  (operation encryption-test (displaced 4 1 ca 1)
+    (enc "cert" (exp (gen) x) a-0 (privk ca-0)) (3 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) y) b (privk ca)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca))))
+    ((send (enc "cert" (exp (gen) y) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) y) b-0 (privk ca)))
+      (recv (enc n (exp (gen) (mul y x)))) (send n)))
+  (label 7)
+  (parent 3)
+  (unrealized (3 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca b-0 ca-0 name) (y x expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) y)) (x x))
+  (defstrand ca 1 (p a) (ca ca) (x x))
+  (defstrand ca 1 (p b) (ca ca) (x y))
+  (defstrand resp 4 (n n) (a a) (b b-0) (ca ca-0) (h (exp (gen) x))
+    (y y))
+  (defstrand ca 1 (p a) (ca ca-0) (x x))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((2 0) (0 1)) ((3 3) (0 3))
+    ((4 0) (3 0)))
+  (fn-of (owner-of (a x) (b y)))
+  (neq (a b-0) (a b))
+  (non-orig (privk ca) (privk ca-0) y x)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 1)
+    (enc "cert" (exp (gen) x) a (privk ca-0)) (3 0))
+  (traces
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) y) b (privk ca)))
+      (send (enc n (exp (gen) (mul y x)))) (recv n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca))))
+    ((send (enc "cert" (exp (gen) y) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) a (privk ca-0)))
+      (recv (enc "cert" (exp (gen) y) b-0 (privk ca-0)))
+      (recv (enc n (exp (gen) (mul y x)))) (send n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca-0)))))
+  (label 8)
+  (parent 3)
+  (unrealized (3 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca name) (x x-0 expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (x x-0))
+  (defstrand ca 1 (p a) (ca ca) (x x-0))
+  (defstrand ca 1 (p b) (ca ca) (x x))
+  (defstrand resp 4 (n n) (a b) (b a) (ca ca) (h (exp (gen) x)) (y x-0))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((1 0) (3 1)) ((2 0) (0 1))
+    ((2 0) (3 0)) ((3 3) (0 3)))
+  (fn-of (owner-of (a x-0) (b x)))
+  (neq (b a) (a b))
+  (non-orig (privk ca) x x-0)
+  (uniq-orig n)
+  (operation encryption-test (displaced 4 1 ca 1)
+    (enc "cert" (exp (gen) x-0) b-0 (privk ca)) (3 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) x-0) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x) b (privk ca)))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((send (enc "cert" (exp (gen) x-0) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) b (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) a (privk ca)))
+      (recv (enc n (exp (gen) (mul x x-0)))) (send n)))
+  (label 9)
+  (parent 5)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (ca ca) (h (exp (gen) x)) (x x-0) (n n))))
+  (origs (n (0 2))))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca name) (x x-0 expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (x x-0))
+  (defstrand ca 1 (p a) (ca ca) (x x-0))
+  (defstrand ca 1 (p b) (ca ca) (x x))
+  (defstrand resp 4 (n n) (a b) (b a) (ca ca) (h (exp (gen) x)) (y x-0))
+  (defstrand ca 1 (p a) (ca ca) (x x-0))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((2 0) (0 1)) ((2 0) (3 0))
+    ((3 3) (0 3)) ((4 0) (3 1)))
+  (fn-of (owner-of (a x-0) (b x)))
+  (neq (b a) (a b))
+  (non-orig (privk ca) x x-0)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 1)
+    (enc "cert" (exp (gen) x-0) a (privk ca)) (3 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) x-0) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x) b (privk ca)))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((send (enc "cert" (exp (gen) x-0) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) b (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) a (privk ca)))
+      (recv (enc n (exp (gen) (mul x x-0)))) (send n))
+    ((send (enc "cert" (exp (gen) x-0) a (privk ca)))))
+  (label 10)
+  (parent 5)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (ca ca) (h (exp (gen) x)) (x x-0) (n n))))
+  (origs (n (0 2))))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca name) (x x-0 expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (x x-0))
+  (defstrand ca 1 (p a) (ca ca) (x x-0))
+  (defstrand ca 1 (p b) (ca ca) (x x))
+  (defstrand resp 4 (n n) (a b) (b a) (ca ca) (h (exp (gen) x)) (y x-0))
+  (defstrand ca 1 (p b) (ca ca) (x x))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((1 0) (3 1)) ((2 0) (0 1))
+    ((3 3) (0 3)) ((4 0) (3 0)))
+  (fn-of (owner-of (a x-0) (b x)))
+  (neq (b a) (a b))
+  (non-orig (privk ca) x x-0)
+  (uniq-orig n)
+  (operation encryption-test (displaced 5 1 ca 1)
+    (enc "cert" (exp (gen) x-0) b-0 (privk ca-0)) (3 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) x-0) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x) b (privk ca)))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((send (enc "cert" (exp (gen) x-0) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) b (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) a (privk ca)))
+      (recv (enc n (exp (gen) (mul x x-0)))) (send n))
+    ((send (enc "cert" (exp (gen) x) b (privk ca)))))
+  (label 11)
+  (parent 6)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (ca ca) (h (exp (gen) x)) (x x-0) (n n))))
+  (origs (n (0 2))))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca ca-0 name) (x x-0 expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (x x-0))
+  (defstrand ca 1 (p a) (ca ca) (x x-0))
+  (defstrand ca 1 (p b) (ca ca) (x x))
+  (defstrand resp 4 (n n) (a b) (b a) (ca ca-0) (h (exp (gen) x))
+    (y x-0))
+  (defstrand ca 1 (p b) (ca ca-0) (x x))
+  (defstrand ca 1 (p a) (ca ca-0) (x x-0))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((2 0) (0 1)) ((3 3) (0 3))
+    ((4 0) (3 0)) ((5 0) (3 1)))
+  (fn-of (owner-of (a x-0) (b x)))
+  (neq (b a) (a b))
+  (non-orig (privk ca) (privk ca-0) x x-0)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 1)
+    (enc "cert" (exp (gen) x-0) a (privk ca-0)) (3 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) x-0) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x) b (privk ca)))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((send (enc "cert" (exp (gen) x-0) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) b (privk ca-0)))
+      (recv (enc "cert" (exp (gen) x-0) a (privk ca-0)))
+      (recv (enc n (exp (gen) (mul x x-0)))) (send n))
+    ((send (enc "cert" (exp (gen) x) b (privk ca-0))))
+    ((send (enc "cert" (exp (gen) x-0) a (privk ca-0)))))
+  (label 12)
+  (parent 6)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (ca ca) (h (exp (gen) x)) (x x-0) (n n))))
+  (origs (n (0 2))))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca name) (x x-0 expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x-0)) (x x))
+  (defstrand ca 1 (p a) (ca ca) (x x))
+  (defstrand ca 1 (p b) (ca ca) (x x-0))
+  (defstrand resp 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y x-0))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((1 0) (3 0)) ((2 0) (0 1))
+    ((2 0) (3 1)) ((3 3) (0 3)))
+  (fn-of (owner-of (b x-0) (a x)))
+  (neq (a b))
+  (non-orig (privk ca) x x-0)
+  (uniq-orig n)
+  (operation encryption-test (displaced 4 2 ca 1)
+    (enc "cert" (exp (gen) x-0) b-0 (privk ca)) (3 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) b (privk ca)))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x-0) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) b (privk ca)))
+      (recv (enc n (exp (gen) (mul x x-0)))) (send n)))
+  (label 13)
+  (parent 7)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (ca ca) (h (exp (gen) x-0)) (x x) (n n))))
+  (origs (n (0 2))))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca name) (x x-0 expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x-0)) (x x))
+  (defstrand ca 1 (p a) (ca ca) (x x))
+  (defstrand ca 1 (p b) (ca ca) (x x-0))
+  (defstrand resp 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y x-0))
+  (defstrand ca 1 (p b) (ca ca) (x x-0))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((1 0) (3 0)) ((2 0) (0 1))
+    ((3 3) (0 3)) ((4 0) (3 1)))
+  (fn-of (owner-of (b x-0) (a x)))
+  (neq (a b))
+  (non-orig (privk ca) x x-0)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 1)
+    (enc "cert" (exp (gen) x-0) b (privk ca)) (3 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) b (privk ca)))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x-0) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) b (privk ca)))
+      (recv (enc n (exp (gen) (mul x x-0)))) (send n))
+    ((send (enc "cert" (exp (gen) x-0) b (privk ca)))))
+  (label 14)
+  (parent 7)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (ca ca) (h (exp (gen) x-0)) (x x) (n n))))
+  (origs (n (0 2))))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca name) (x x-0 expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x-0)) (x x))
+  (defstrand ca 1 (p a) (ca ca) (x x))
+  (defstrand ca 1 (p b) (ca ca) (x x-0))
+  (defstrand resp 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x)) (y x-0))
+  (defstrand ca 1 (p a) (ca ca) (x x))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((2 0) (0 1)) ((2 0) (3 1))
+    ((3 3) (0 3)) ((4 0) (3 0)))
+  (fn-of (owner-of (b x-0) (a x)))
+  (neq (a b))
+  (non-orig (privk ca) x x-0)
+  (uniq-orig n)
+  (operation encryption-test (displaced 5 2 ca 1)
+    (enc "cert" (exp (gen) x-0) b-0 (privk ca-0)) (3 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) b (privk ca)))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x-0) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) b (privk ca)))
+      (recv (enc n (exp (gen) (mul x x-0)))) (send n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca)))))
+  (label 15)
+  (parent 8)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (ca ca) (h (exp (gen) x-0)) (x x) (n n))))
+  (origs (n (0 2))))
+
+(defskeleton staticdh1
+  (vars (n text) (a b ca ca-0 name) (x x-0 expn))
+  (defstrand init 4 (n n) (a a) (b b) (ca ca) (h (exp (gen) x-0)) (x x))
+  (defstrand ca 1 (p a) (ca ca) (x x))
+  (defstrand ca 1 (p b) (ca ca) (x x-0))
+  (defstrand resp 4 (n n) (a a) (b b) (ca ca-0) (h (exp (gen) x))
+    (y x-0))
+  (defstrand ca 1 (p a) (ca ca-0) (x x))
+  (defstrand ca 1 (p b) (ca ca-0) (x x-0))
+  (precedes ((0 2) (3 2)) ((1 0) (0 0)) ((2 0) (0 1)) ((3 3) (0 3))
+    ((4 0) (3 0)) ((5 0) (3 1)))
+  (fn-of (owner-of (b x-0) (a x)))
+  (neq (a b))
+  (non-orig (privk ca) (privk ca-0) x x-0)
+  (uniq-orig n)
+  (operation encryption-test (added-strand ca 1)
+    (enc "cert" (exp (gen) x-0) b (privk ca-0)) (3 1))
+  (traces
+    ((recv (enc "cert" (exp (gen) x) a (privk ca)))
+      (recv (enc "cert" (exp (gen) x-0) b (privk ca)))
+      (send (enc n (exp (gen) (mul x x-0)))) (recv n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca))))
+    ((send (enc "cert" (exp (gen) x-0) b (privk ca))))
+    ((recv (enc "cert" (exp (gen) x) a (privk ca-0)))
+      (recv (enc "cert" (exp (gen) x-0) b (privk ca-0)))
+      (recv (enc n (exp (gen) (mul x x-0)))) (send n))
+    ((send (enc "cert" (exp (gen) x) a (privk ca-0))))
+    ((send (enc "cert" (exp (gen) x-0) b (privk ca-0)))))
+  (label 16)
+  (parent 8)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (ca ca) (h (exp (gen) x-0)) (x x) (n n))))
+  (origs (n (0 2))))
+
+(comment "Nothing left to do")
diff --git a/tst/station2.scm b/tst/station2.scm
new file mode 100644
--- /dev/null
+++ b/tst/station2.scm
@@ -0,0 +1,33 @@
+(herald "Station-to-station protocol" (algebra diffie-hellman)
+; (limit 1)
+)
+
+(defprotocol station-to-station diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace 
+     (send (exp (gen) x)) 
+     (recv (enc h (exp (gen) x) (privk b)))
+     (send (enc (enc (exp (gen) x) h (exp h x)) (privk a))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace 
+     (recv h) 
+     (send (enc (exp (gen) y) h (privk b)))
+     (recv (enc (enc h (exp (gen) y) (exp h y)) (privk a))))
+    (uniq-gen y))
+)
+
+(defskeleton station-to-station
+  (vars (a b name))
+  (defstrand init 3 (a a) (b b))
+  (non-orig (privk b) (privk a))
+)
+
+(defskeleton station-to-station
+  (vars (a b name))
+  (defstrand resp 3 (a a) (b b))
+  (non-orig (privk a) (privk b))
+)
+
diff --git a/tst/station2.tst b/tst/station2.tst
new file mode 100644
--- /dev/null
+++ b/tst/station2.tst
@@ -0,0 +1,115 @@
+(herald "Station-to-station protocol" (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from station2.scm")
+
+(defprotocol station-to-station diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace (send (exp (gen) x)) (recv (enc h (exp (gen) x) (privk b)))
+      (send (enc (enc (exp (gen) x) h (exp h x)) (privk a))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace (recv h) (send (enc (exp (gen) y) h (privk b)))
+      (recv (enc (enc h (exp (gen) y) (exp h y)) (privk a))))
+    (uniq-gen y)
+    (ind-zero-in (y h))))
+
+(defskeleton station-to-station
+  (vars (a b name) (h base) (x expn))
+  (defstrand init 3 (a a) (b b) (h h) (x x))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (traces
+    ((send (exp (gen) x)) (recv (enc h (exp (gen) x) (privk b)))
+      (send (enc (enc (exp (gen) x) h (exp h x)) (privk a)))))
+  (label 0)
+  (unrealized (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b name) (x y expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (defstrand resp 2 (b b) (h (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand resp 2)
+    (enc (exp (gen) y) (exp (gen) x) (privk b)) (0 1))
+  (traces
+    ((send (exp (gen) x))
+      (recv (enc (exp (gen) y) (exp (gen) x) (privk b)))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) y) (exp (gen) (mul x y)))
+          (privk a))))
+    ((recv (exp (gen) x))
+      (send (enc (exp (gen) y) (exp (gen) x) (privk b)))))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (x x) (h (exp (gen) y)))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol station-to-station diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace (send (exp (gen) x)) (recv (enc h (exp (gen) x) (privk b)))
+      (send (enc (enc (exp (gen) x) h (exp h x)) (privk a))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace (recv h) (send (enc (exp (gen) y) h (privk b)))
+      (recv (enc (enc h (exp (gen) y) (exp h y)) (privk a))))
+    (uniq-gen y)
+    (ind-zero-in (y h))))
+
+(defskeleton station-to-station
+  (vars (a b name) (h base) (y expn))
+  (defstrand resp 3 (a a) (b b) (h h) (y y))
+  (ind-zero-in (y h))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (traces
+    ((recv h) (send (enc (exp (gen) y) h (privk b)))
+      (recv (enc (enc h (exp (gen) y) (exp h y)) (privk a)))))
+  (label 2)
+  (unrealized (0 2))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b b-0 name) (y x expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b-0) (h (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (operation encryption-test (added-strand init 3)
+    (enc (enc (exp (gen) x) (exp (gen) y) (exp (gen) (mul y x)))
+      (privk a)) (0 2))
+  (traces
+    ((recv (exp (gen) x))
+      (send (enc (exp (gen) y) (exp (gen) x) (privk b)))
+      (recv
+        (enc (enc (exp (gen) x) (exp (gen) y) (exp (gen) (mul y x)))
+          (privk a))))
+    ((send (exp (gen) x))
+      (recv (enc (exp (gen) y) (exp (gen) x) (privk b-0)))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) y) (exp (gen) (mul y x)))
+          (privk a)))))
+  (label 3)
+  (parent 2)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (y y) (h (exp (gen) x)))))
+  (origs))
+
+(comment "Nothing left to do")
diff --git a/tst/station_to_station.scm b/tst/station_to_station.scm
new file mode 100644
--- /dev/null
+++ b/tst/station_to_station.scm
@@ -0,0 +1,33 @@
+(herald "Station-to-station protocol" (algebra diffie-hellman)
+; (limit 1)
+)
+
+(defprotocol station-to-station diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace 
+     (send (exp (gen) x)) 
+     (recv (cat h (enc (enc h (exp (gen) x) (privk b)) (exp h x))))
+     (send (enc (enc (exp (gen) x) h (privk a)) (exp h x))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace 
+     (recv h) 
+     (send (cat (exp (gen) y) (enc (enc (exp (gen) y) h (privk b)) (exp h y))))
+     (recv (enc (enc h (exp (gen) y) (privk a)) (exp h y))))
+    (uniq-gen y))
+)
+
+(defskeleton station-to-station
+  (vars (a b name))
+  (defstrand init 3 (a a) (b b))
+  (non-orig (privk b) (privk a))
+)
+
+(defskeleton station-to-station
+  (vars (a b name))
+  (defstrand resp 3 (a a) (b b))
+  (non-orig (privk a) (privk b))
+)
+
diff --git a/tst/station_to_station.tst b/tst/station_to_station.tst
new file mode 100644
--- /dev/null
+++ b/tst/station_to_station.tst
@@ -0,0 +1,577 @@
+(herald "Station-to-station protocol" (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from station_to_station.scm")
+
+(defprotocol station-to-station diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace (send (exp (gen) x))
+      (recv (cat h (enc (enc h (exp (gen) x) (privk b)) (exp h x))))
+      (send (enc (enc (exp (gen) x) h (privk a)) (exp h x))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace (recv h)
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) h (privk b)) (exp h y))))
+      (recv (enc (enc h (exp (gen) y) (privk a)) (exp h y))))
+    (uniq-gen y)
+    (ind-zero-in (y h))))
+
+(defskeleton station-to-station
+  (vars (a b name) (h base) (x expn))
+  (defstrand init 3 (a a) (b b) (h h) (x x))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (traces
+    ((send (exp (gen) x))
+      (recv (cat h (enc (enc h (exp (gen) x) (privk b)) (exp h x))))
+      (send (enc (enc (exp (gen) x) h (privk a)) (exp h x)))))
+  (label 0)
+  (unrealized (0 1))
+  (origs)
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b b-0 name) (x x-0 expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) x-0)) (x x))
+  (defstrand init 3 (a b) (b b-0) (h (exp (gen) x)) (x x-0))
+  (precedes ((0 0) (1 1)) ((1 2) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x x-0)
+  (operation encryption-test (added-strand init 3)
+    (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b))
+      (exp (gen) (mul x x-0))) (0 1))
+  (traces
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) x-0)
+          (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b))
+            (exp (gen) (mul x x-0)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) x-0) (privk a))
+          (exp (gen) (mul x x-0)))))
+    ((send (exp (gen) x-0))
+      (recv
+        (cat (exp (gen) x)
+          (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0))
+            (exp (gen) (mul x x-0)))))
+      (send
+        (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b))
+          (exp (gen) (mul x x-0))))))
+  (label 1)
+  (parent 0)
+  (unrealized (1 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b name) (x y expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (defstrand resp 2 (b b) (h (exp (gen) x)) (y y))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand resp 2)
+    (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+      (exp (gen) (mul x y))) (0 1))
+  (traces
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul x y)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul x y)))))
+    ((recv (exp (gen) x))
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul x y)))))))
+  (label 2)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (x x) (h (exp (gen) y)))))
+  (origs))
+
+(defskeleton station-to-station
+  (vars (a b name) (h base) (x expn))
+  (defstrand init 3 (a a) (b b) (h h) (x x))
+  (deflistener (exp h x))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (operation encryption-test (added-listener (exp h x))
+    (enc (enc h (exp (gen) x) (privk b)) (exp h x)) (0 1))
+  (traces
+    ((send (exp (gen) x))
+      (recv (cat h (enc (enc h (exp (gen) x) (privk b)) (exp h x))))
+      (send (enc (enc (exp (gen) x) h (privk a)) (exp h x))))
+    ((recv (exp h x)) (send (exp h x))))
+  (label 3)
+  (parent 0)
+  (unrealized (0 1) (1 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b b-0 name) (x x-0 expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) x-0)) (x x))
+  (defstrand init 3 (a b) (b b-0) (h (exp (gen) x)) (x x-0))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (2 0)) ((1 0) (2 0)) ((1 2) (0 1)) ((2 1) (1 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x x-0)
+  (operation encryption-test (added-listener (exp (gen) (mul x x-0)))
+    (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0))
+      (exp (gen) (mul x x-0))) (1 1))
+  (traces
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) x-0)
+          (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b))
+            (exp (gen) (mul x x-0)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) x-0) (privk a))
+          (exp (gen) (mul x x-0)))))
+    ((send (exp (gen) x-0))
+      (recv
+        (cat (exp (gen) x)
+          (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0))
+            (exp (gen) (mul x x-0)))))
+      (send
+        (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b))
+          (exp (gen) (mul x x-0)))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0)))))
+  (label 4)
+  (parent 1)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(defskeleton station-to-station
+  (vars (a b name) (x expn) (x-0 expr))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) x-0)) (x x))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x)
+  (operation nonce-test (algebra-contracted (h (exp (gen) x-0)))
+    (exp (gen) (mul x x-0)) (1 0) (exp (gen) x))
+  (traces
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) x-0)
+          (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b))
+            (exp (gen) (mul x x-0)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) x-0) (privk a))
+          (exp (gen) (mul x x-0)))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0)))))
+  (label 5)
+  (parent 3)
+  (unrealized (0 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b b-0 name) (x x-0 expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) x-0)) (x x))
+  (deflistener (exp (gen) (mul x x-0)))
+  (defstrand init 3 (a b) (b b-0) (h (exp (gen) x)) (x x-0))
+  (precedes ((0 0) (1 0)) ((0 0) (2 1)) ((1 1) (0 1)) ((2 0) (1 0))
+    ((2 2) (0 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x x-0)
+  (operation encryption-test (added-strand init 3)
+    (enc (exp (gen) x-0) (exp (gen) x) (privk b)) (0 1))
+  (traces
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) x-0)
+          (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b))
+            (exp (gen) (mul x x-0)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) x-0) (privk a))
+          (exp (gen) (mul x x-0)))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0))))
+    ((send (exp (gen) x-0))
+      (recv
+        (cat (exp (gen) x)
+          (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0))
+            (exp (gen) (mul x x-0)))))
+      (send
+        (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b))
+          (exp (gen) (mul x x-0))))))
+  (label 6)
+  (parent 5)
+  (unrealized (1 0) (2 1))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b name) (x y expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (deflistener (exp (gen) (mul x y)))
+  (defstrand resp 2 (b b) (h (exp (gen) x)) (y y))
+  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (added-strand resp 2)
+    (enc (exp (gen) y) (exp (gen) x) (privk b)) (0 1))
+  (traces
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul x y)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul x y)))))
+    ((recv (exp (gen) (mul x y))) (send (exp (gen) (mul x y))))
+    ((recv (exp (gen) x))
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul x y)))))))
+  (label 7)
+  (parent 5)
+  (unrealized (1 0))
+  (comment "empty cohort"))
+
+(defskeleton station-to-station
+  (vars (a b b-0 name) (x x-0 expn))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) x-0)) (x x))
+  (deflistener (exp (gen) (mul x x-0)))
+  (defstrand init 3 (a b) (b b-0) (h (exp (gen) x)) (x x-0))
+  (deflistener (exp (gen) (mul x x-0)))
+  (precedes ((0 0) (1 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 0) (1 0))
+    ((2 0) (3 0)) ((2 2) (0 1)) ((3 1) (2 1)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x x-0)
+  (operation encryption-test (added-listener (exp (gen) (mul x x-0)))
+    (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0))
+      (exp (gen) (mul x x-0))) (2 1))
+  (traces
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) x-0)
+          (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b))
+            (exp (gen) (mul x x-0)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) x-0) (privk a))
+          (exp (gen) (mul x x-0)))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0))))
+    ((send (exp (gen) x-0))
+      (recv
+        (cat (exp (gen) x)
+          (enc (enc (exp (gen) x) (exp (gen) x-0) (privk b-0))
+            (exp (gen) (mul x x-0)))))
+      (send
+        (enc (enc (exp (gen) x-0) (exp (gen) x) (privk b))
+          (exp (gen) (mul x x-0)))))
+    ((recv (exp (gen) (mul x x-0))) (send (exp (gen) (mul x x-0)))))
+  (label 8)
+  (parent 6)
+  (unrealized (1 0) (3 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol station-to-station diffie-hellman
+  (defrole init
+    (vars (x expn) (h base) (a b name))
+    (trace (send (exp (gen) x))
+      (recv (cat h (enc (enc h (exp (gen) x) (privk b)) (exp h x))))
+      (send (enc (enc (exp (gen) x) h (privk a)) (exp h x))))
+    (uniq-gen x))
+  (defrole resp
+    (vars (y expn) (h base) (a b name))
+    (trace (recv h)
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) h (privk b)) (exp h y))))
+      (recv (enc (enc h (exp (gen) y) (privk a)) (exp h y))))
+    (uniq-gen y)
+    (ind-zero-in (y h))))
+
+(defskeleton station-to-station
+  (vars (a b name) (h base) (y expn))
+  (defstrand resp 3 (a a) (b b) (h h) (y y))
+  (ind-zero-in (y h))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (traces
+    ((recv h)
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) h (privk b)) (exp h y))))
+      (recv (enc (enc h (exp (gen) y) (privk a)) (exp h y)))))
+  (label 9)
+  (unrealized (0 2))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b b-0 name) (y x expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b-0) (h (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (operation encryption-test (added-strand init 3)
+    (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+      (exp (gen) (mul y x))) (0 2))
+  (traces
+    ((recv (exp (gen) x))
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul y x)))))
+      (recv
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul y x)))))
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+            (exp (gen) (mul y x)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul y x))))))
+  (label 10)
+  (parent 9)
+  (unrealized (1 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b name) (h base) (y expn))
+  (defstrand resp 3 (a a) (b b) (h h) (y y))
+  (deflistener (exp h y))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (ind-zero-in (y h))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (operation encryption-test (added-listener (exp h y))
+    (enc (enc h (exp (gen) y) (privk a)) (exp h y)) (0 2))
+  (traces
+    ((recv h)
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) h (privk b)) (exp h y))))
+      (recv (enc (enc h (exp (gen) y) (privk a)) (exp h y))))
+    ((recv (exp h y)) (send (exp h y))))
+  (label 11)
+  (parent 9)
+  (unrealized (0 2) (1 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b name) (x y expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (displaced 2 0 resp 2)
+    (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+      (exp (gen) (mul x y))) (1 1))
+  (traces
+    ((recv (exp (gen) x))
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul x y)))))
+      (recv
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul x y)))))
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul x y)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul x y))))))
+  (label 12)
+  (parent 10)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (y y) (h (exp (gen) x)))))
+  (origs))
+
+(defskeleton station-to-station
+  (vars (a b b-0 name) (y x expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (defstrand init 3 (a a) (b b-0) (h (exp (gen) y)) (x x))
+  (deflistener (exp (gen) (mul y x)))
+  (precedes ((0 1) (2 0)) ((1 0) (0 0)) ((1 2) (0 2)) ((2 1) (1 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (operation encryption-test (added-listener (exp (gen) (mul y x)))
+    (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+      (exp (gen) (mul y x))) (1 1))
+  (traces
+    ((recv (exp (gen) x))
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul y x)))))
+      (recv
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul y x)))))
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+            (exp (gen) (mul y x)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul y x)))))
+    ((recv (exp (gen) (mul y x))) (send (exp (gen) (mul y x)))))
+  (label 13)
+  (parent 10)
+  (unrealized (2 0))
+  (comment "empty cohort"))
+
+(defskeleton station-to-station
+  (vars (a b name) (y expn) (y-0 expr))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) y-0)) (y y))
+  (deflistener (exp (gen) (mul y y-0)))
+  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
+  (ind-zero-in (y (exp (gen) y-0)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y)
+  (operation nonce-test (algebra-contracted (h (exp (gen) y-0)))
+    (exp (gen) (mul y y-0)) (1 0) (exp (gen) y)
+    (enc (enc (exp (gen) y) (exp (gen) y-0) (privk b))
+      (exp (gen) (mul y y-0))))
+  (traces
+    ((recv (exp (gen) y-0))
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) y-0) (privk b))
+            (exp (gen) (mul y y-0)))))
+      (recv
+        (enc (enc (exp (gen) y-0) (exp (gen) y) (privk a))
+          (exp (gen) (mul y y-0)))))
+    ((recv (exp (gen) (mul y y-0))) (send (exp (gen) (mul y y-0)))))
+  (label 14)
+  (parent 11)
+  (unrealized (0 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b b-0 name) (y x expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (deflistener (exp (gen) (mul y x)))
+  (defstrand init 3 (a a) (b b-0) (h (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 0)) ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0))
+    ((2 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (operation encryption-test (added-strand init 3)
+    (enc (exp (gen) x) (exp (gen) y) (privk a)) (0 2))
+  (traces
+    ((recv (exp (gen) x))
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul y x)))))
+      (recv
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul y x)))))
+    ((recv (exp (gen) (mul y x))) (send (exp (gen) (mul y x))))
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+            (exp (gen) (mul y x)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul y x))))))
+  (label 15)
+  (parent 14)
+  (unrealized (1 0) (2 1))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton station-to-station
+  (vars (a b name) (x y expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (deflistener (exp (gen) (mul x y)))
+  (defstrand init 3 (a a) (b b) (h (exp (gen) y)) (x x))
+  (precedes ((0 1) (1 0)) ((0 1) (2 1)) ((1 1) (0 2)) ((2 0) (0 0))
+    ((2 2) (0 2)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen x y)
+  (operation encryption-test (displaced 3 0 resp 2)
+    (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+      (exp (gen) (mul x y))) (2 1))
+  (traces
+    ((recv (exp (gen) x))
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul x y)))))
+      (recv
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul x y)))))
+    ((recv (exp (gen) (mul x y))) (send (exp (gen) (mul x y))))
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul x y)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul x y))))))
+  (label 16)
+  (parent 15)
+  (unrealized (1 0))
+  (comment "empty cohort"))
+
+(defskeleton station-to-station
+  (vars (a b b-0 name) (y x expn))
+  (defstrand resp 3 (a a) (b b) (h (exp (gen) x)) (y y))
+  (deflistener (exp (gen) (mul y x)))
+  (defstrand init 3 (a a) (b b-0) (h (exp (gen) y)) (x x))
+  (deflistener (exp (gen) (mul y x)))
+  (precedes ((0 1) (1 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 0) (0 0))
+    ((2 2) (0 2)) ((3 1) (2 1)))
+  (ind-zero-in (y (exp (gen) x)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen y x)
+  (operation encryption-test (added-listener (exp (gen) (mul y x)))
+    (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+      (exp (gen) (mul y x))) (2 1))
+  (traces
+    ((recv (exp (gen) x))
+      (send
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b))
+            (exp (gen) (mul y x)))))
+      (recv
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul y x)))))
+    ((recv (exp (gen) (mul y x))) (send (exp (gen) (mul y x))))
+    ((send (exp (gen) x))
+      (recv
+        (cat (exp (gen) y)
+          (enc (enc (exp (gen) y) (exp (gen) x) (privk b-0))
+            (exp (gen) (mul y x)))))
+      (send
+        (enc (enc (exp (gen) x) (exp (gen) y) (privk a))
+          (exp (gen) (mul y x)))))
+    ((recv (exp (gen) (mul y x))) (send (exp (gen) (mul y x)))))
+  (label 17)
+  (parent 15)
+  (unrealized (1 0) (3 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
diff --git a/tst/subsort_test.scm b/tst/subsort_test.scm
new file mode 100644
--- /dev/null
+++ b/tst/subsort_test.scm
@@ -0,0 +1,43 @@
+(herald "Subsort constraint test protocol"
+   (comment "First, third, and fourth skeletons should have a shape,"
+            "second should be dead."))
+
+(defprotocol subsorttest basic
+  (defrole init
+     (vars (n1 n2 text) (k skey))
+     (trace
+       (send (cat n1 (enc n1 n2 k)))
+       (recv n2))
+     (non-orig k)
+     (uniq-orig n1 n2)
+  )
+)
+
+;;; With no declaration, a shape should be found where n1 = n2.
+(defskeleton subsorttest
+   (vars (n1 n2 text) (k skey))
+   (defstrand init 2) (n1 n1) (n2 n2) (k k))
+
+;;; By declaring n1 to be of subsort A and n2 to be of subsort B, the
+;;; unification of n1 and n2 is prevented, so no shape should exist.
+(defskeleton subsorttest
+   (vars (n1 n2 text))
+   (defstrand init 2 (n1 n1) (n2 n2))
+   (subsort (A n1) (B n2))
+)
+
+;;; Here, only n1 is declared to be of a subsort.  Unification with n2
+;;; is allowed, so a shape should be found.
+(defskeleton subsorttest
+   (vars (n1 n2 text))
+   (defstrand init 2 (n1 n1) (n2 n2))
+   (subsort (A n1))
+)
+
+;;; Here, both n1 and n2 are declared to be of the same subsort (A),
+;;; which should allow their unification.
+(defskeleton subsorttest
+   (vars (n1 n2 text))
+   (defstrand init 2 (n1 n1) (n2 n2))
+   (subsort (A n1 n2))
+)
diff --git a/tst/subsort_test.tst b/tst/subsort_test.tst
new file mode 100644
--- /dev/null
+++ b/tst/subsort_test.tst
@@ -0,0 +1,133 @@
+(herald "Subsort constraint test protocol"
+  (comment "First, third, and fourth skeletons should have a shape,"
+    "second should be dead."))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from subsort_test.scm")
+
+(defprotocol subsorttest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))
+
+(defskeleton subsorttest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (non-orig k)
+  (uniq-orig n1 n2)
+  (traces ((send (cat n1 (enc n1 n2 k))) (recv n2)))
+  (label 0)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton subsorttest
+  (vars (n1 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n1) (k k))
+  (non-orig k)
+  (uniq-orig n1)
+  (operation nonce-test (displaced 1 0 init 1) n2 (0 1) (enc n1 n2 k))
+  (traces ((send (cat n1 (enc n1 n1 k))) (recv n1)))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n1 n1) (n2 n1) (k k))))
+  (origs (n1 (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol subsorttest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))
+
+(defskeleton subsorttest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (non-orig k)
+  (subsort (A n1) (B n2))
+  (uniq-orig n1 n2)
+  (traces ((send (cat n1 (enc n1 n2 k))) (recv n2)))
+  (label 2)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
+
+(defprotocol subsorttest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))
+
+(defskeleton subsorttest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (non-orig k)
+  (subsort (A n1))
+  (uniq-orig n1 n2)
+  (traces ((send (cat n1 (enc n1 n2 k))) (recv n2)))
+  (label 3)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton subsorttest
+  (vars (n1 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n1) (k k))
+  (non-orig k)
+  (subsort (A n1))
+  (uniq-orig n1)
+  (operation nonce-test (displaced 1 0 init 1) n2 (0 1) (enc n1 n2 k))
+  (traces ((send (cat n1 (enc n1 n1 k))) (recv n1)))
+  (label 4)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n1 n1) (n2 n1) (k k))))
+  (origs (n1 (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol subsorttest basic
+  (defrole init
+    (vars (n1 n2 text) (k skey))
+    (trace (send (cat n1 (enc n1 n2 k))) (recv n2))
+    (non-orig k)
+    (uniq-orig n1 n2)))
+
+(defskeleton subsorttest
+  (vars (n1 n2 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n2) (k k))
+  (non-orig k)
+  (subsort (A n1 n2))
+  (uniq-orig n1 n2)
+  (traces ((send (cat n1 (enc n1 n2 k))) (recv n2)))
+  (label 5)
+  (unrealized (0 1))
+  (origs (n1 (0 0)) (n2 (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton subsorttest
+  (vars (n1 text) (k skey))
+  (defstrand init 2 (n1 n1) (n2 n1) (k k))
+  (non-orig k)
+  (subsort (A n1))
+  (uniq-orig n1)
+  (operation nonce-test (displaced 1 0 init 1) n2 (0 1) (enc n1 n2 k))
+  (traces ((send (cat n1 (enc n1 n1 k))) (recv n1)))
+  (label 6)
+  (parent 5)
+  (unrealized)
+  (shape)
+  (maps ((0) ((n1 n1) (n2 n1) (k k))))
+  (origs (n1 (0 0))))
+
+(comment "Nothing left to do")
diff --git a/tst/targetterms2.scm b/tst/targetterms2.scm
deleted file mode 100644
--- a/tst/targetterms2.scm
+++ /dev/null
@@ -1,36 +0,0 @@
-;;; Target terms experiment
-;  The aim of this "experiment" was to try to create an instance
-; where we would want to do an augmentation where (1) the critical
-; term is to appear in a variable of sort mesg in the transforming
-; node and moreover (2) the target term we'd like to use is a
-; subterm of what is currently a variable of sort mesg in the
-; escape set.
-;  This was not wholly successful.  However, targetterms2 did
-; illustrate something interesting: a lack of factoring all homomorphisms
-; through members of the cohort.  We could have the init2 strand and a
-; mostly generic trans strand, and there are two trans strands in the
-; shape.  There are two homomorphisms, then, but only one factored through
-; what happened next, because the only next step was a contraction that
-; effectively fixed our idea of which trans strand we had.
-
-(defprotocol targetterms2 basic
-  (defrole init (vars (a name) (n text))
-    (trace
-	(send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a)))
-    )
-    (uniq-orig n)
-    (non-orig (privk a))
-)
-  (defrole trans (vars (a name) (n text) (m mesg))
-    (trace
-     (recv (enc n (pubk a)))
-     (recv m)
-     (send (enc n m (pubk a)))
-    ))
-)
-
-(defskeleton targetterms2
-  (vars (a name) (n text))
-  (defstrand init 2 (a a) (n n))
-)
diff --git a/tst/targetterms2.tst b/tst/targetterms2.tst
deleted file mode 100644
--- a/tst/targetterms2.tst
+++ /dev/null
@@ -1,251 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from targetterms2.scm")
-
-(defprotocol targetterms2 basic
-  (defrole init
-    (vars (a name) (n text))
-    (trace (send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    (non-orig (privk a))
-    (uniq-orig n))
-  (defrole trans
-    (vars (a name) (n text) (m mesg))
-    (trace (recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a))))))
-
-(defskeleton targetterms2
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (traces
-    ((send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a)))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (n (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms2
-  (vars (m mesg) (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m m) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((1 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans 3) n (0 1) (enc n (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton targetterms2
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((1 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (contracted (m (enc n (pubk a)))) n (0 1)
-    (enc n (pubk a)) (enc n (enc n (pubk a)) (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms2
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((1 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test
-    (contracted (m (enc n (enc n (pubk a)) (pubk a)))) n (0 1)
-    (enc n (pubk a)) (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a)))))
-  (label 3)
-  (parent 1)
-  (unrealized (1 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms2
-  (vars (m mesg) (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m m) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (0 1)) ((2 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans 3) n (0 1) (enc n (pubk a))
-    (enc n (enc n (pubk a)) (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a)))))
-  (label 4)
-  (parent 2)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms2
-  (vars (m mesg) (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m m) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (0 1)) ((2 2) (1 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans 3) n (1 1) (enc n (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a)))))
-  (label 5)
-  (parent 3)
-  (unrealized (1 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms2
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (0 1)) ((2 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test
-    (contracted (m (enc n (enc n (pubk a)) (pubk a)))) n (0 1)
-    (enc n (pubk a)) (enc n (enc n (pubk a)) (pubk a))
-    (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a)))))
-  (label 6)
-  (parent 4)
-  (seen 7)
-  (unrealized (2 1))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms2
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (0 1)) ((2 2) (1 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (contracted (m (enc n (pubk a)))) n (1 1)
-    (enc n (pubk a)) (enc n (enc n (pubk a)) (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a)))))
-  (label 7)
-  (parent 5)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (n n))))
-  (origs (n (0 0))))
-
-(defskeleton targetterms2
-  (vars (m mesg) (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m m) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 2) (0 1))
-    ((2 2) (0 1)) ((3 2) (2 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans 3) n (2 1) (enc n (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a)))))
-  (label 8)
-  (parent 6)
-  (unrealized (2 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton targetterms2
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 2) (0 1))
-    ((2 2) (0 1)) ((3 2) (2 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (contracted (m (enc n (pubk a)))) n (2 1)
-    (enc n (pubk a)) (enc n (enc n (pubk a)) (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a)))))
-  (label 9)
-  (parent 8)
-  (seen 7)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton targetterms2
-  (vars (m mesg) (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m m) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 2) (2 1))
-    ((2 2) (0 1)) ((3 2) (2 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (displaced 4 1 trans 3) n (2 1) (enc n (pubk a))
-    (enc n m (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a)))))
-  (label 10)
-  (parent 8)
-  (seen 7)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
diff --git a/tst/targetterms6.scm b/tst/targetterms6.scm
deleted file mode 100644
--- a/tst/targetterms6.scm
+++ /dev/null
@@ -1,56 +0,0 @@
-;;; Target terms experiment
-;
-;  After a series of other experiments on target terms
-; this example arose, and it demonstrated two serious bugs
-; in CPSA.
-;  First, before this example, CPSA was looking for contractions
-; that would completely realize a test node (at least, with respect
-; to one critical message).  In this example, the unrealized node
-; is the second node of the init strand, and the only critical
-; message is the nonce n.  Only if TWO instances of trans were
-; available, both with variable m unbound, could we completely
-; solve the reception with a single substitution.  However, we can't
-; have two instances of trans that are so generic, if we are
-; to terminate in circumstances like these (similar to the pruning
-; necessary to make Needham-Schroeder terminate).  The fix is to
-; make contractions solve only one *position* of the critical
-; message at a time.
-;  The other problem arose when we added that fix - CPSA was still
-; unable to find the shape.  This time, the problem was that pruning
-; was overly aggressive: we had an instance of trans in which m had
-; been bound, and another version in which m had not.  There was a
-; homomorphism and all other conditions were satisfied but the pruning
-; was not justified, because the new copy of the trans strand retained
-; the freedom to have m map to something not unifiable with the binding
-; of m in the other strand.
-
-(defprotocol targetterms6 basic
-  (defrole init (vars (a name) (n text) (m mesg))
-    (trace
-	(send (enc n (pubk a)))
-      (recv (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-         (enc n (enc n (pubk a)) (pubk a)) ))
-    )
-    (uniq-orig n)
-    (non-orig (privk a))
-)
-  (defrole trans (vars (a name) (n text) (m mesg))
-    (trace
-     (recv (enc n (pubk a)))
-     (recv m)
-     (send (enc n m (pubk a)))
-    ))
-)
-
-(defskeleton targetterms6
-  (vars (a name) (n text))
-  (defstrand init 2 (a a) (n n))
-)
-
-(defskeleton targetterms6
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (2 1)) ((2 2) (0 1)))
-)
diff --git a/tst/targetterms6.tst b/tst/targetterms6.tst
deleted file mode 100644
--- a/tst/targetterms6.tst
+++ /dev/null
@@ -1,268 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from targetterms6.scm")
-
-(defprotocol targetterms6 basic
-  (defrole init
-    (vars (a name) (n text))
-    (trace (send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a)))))
-    (non-orig (privk a))
-    (uniq-orig n))
-  (defrole trans
-    (vars (a name) (n text) (m mesg))
-    (trace (recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a))))))
-
-(defskeleton targetterms6
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (traces
-    ((send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a))))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (n (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms6
-  (vars (m mesg) (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m m) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((1 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans 3) n (0 1) (enc n (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a)))))
-    ((recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms6
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((1 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (contracted (m (enc n (pubk a)))) n (0 1)
-    (enc n (pubk a)) (enc n (enc n (pubk a)) (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a)))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a)))))
-  (label 2)
-  (parent 1)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms6
-  (vars (m mesg) (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m m) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (0 1)) ((2 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans 3) n (0 1) (enc n (pubk a))
-    (enc n (enc n (pubk a)) (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a)))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a)))))
-  (label 3)
-  (parent 2)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms6
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (0 1)) ((2 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test
-    (contracted (m (enc n (enc n (pubk a)) (pubk a)))) n (0 1)
-    (enc n (pubk a)) (enc n (enc n (pubk a)) (pubk a))
-    (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a)))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a)))))
-  (label 4)
-  (parent 3)
-  (unrealized (2 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton targetterms6
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (2 1)) ((2 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (displaced 3 1 trans 3) n (2 1)
-    (enc n (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a)))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a)))))
-  (label 5)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (n n))))
-  (origs (n (0 0))))
-
-(defskeleton targetterms6
-  (vars (m mesg) (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m m) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 2) (0 1))
-    ((2 2) (0 1)) ((3 2) (2 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (added-strand trans 3) n (2 1) (enc n (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a)))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a)))))
-  (label 6)
-  (parent 4)
-  (unrealized (2 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton targetterms6
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 2) (0 1))
-    ((2 2) (0 1)) ((3 2) (2 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (contracted (m (enc n (pubk a)))) n (2 1)
-    (enc n (pubk a)) (enc n (enc n (pubk a)) (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a)))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a)))))
-  (label 7)
-  (parent 6)
-  (seen 5)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton targetterms6
-  (vars (m mesg) (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m m) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 2) (2 1))
-    ((2 2) (0 1)) ((3 2) (2 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (operation nonce-test (displaced 4 1 trans 3) n (2 1) (enc n (pubk a))
-    (enc n m (pubk a)))
-  (traces
-    ((send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a)))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a)))))
-  (label 8)
-  (parent 6)
-  (seen 5)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
-
-(defprotocol targetterms6 basic
-  (defrole init
-    (vars (a name) (n text))
-    (trace (send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a)))))
-    (non-orig (privk a))
-    (uniq-orig n))
-  (defrole trans
-    (vars (a name) (n text) (m mesg))
-    (trace (recv (enc n (pubk a))) (recv m) (send (enc n m (pubk a))))))
-
-(defskeleton targetterms6
-  (vars (n text) (a name))
-  (defstrand init 2 (n n) (a a))
-  (defstrand trans 3 (m (enc n (pubk a))) (n n) (a a))
-  (defstrand trans 3 (m (enc n (enc n (pubk a)) (pubk a))) (n n) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 2) (2 1)) ((2 2) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig n)
-  (traces
-    ((send (enc n (pubk a)))
-      (recv
-        (cat (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a))
-          (enc n (enc n (pubk a)) (pubk a)))))
-    ((recv (enc n (pubk a))) (recv (enc n (pubk a)))
-      (send (enc n (enc n (pubk a)) (pubk a))))
-    ((recv (enc n (pubk a))) (recv (enc n (enc n (pubk a)) (pubk a)))
-      (send (enc n (enc n (enc n (pubk a)) (pubk a)) (pubk a)))))
-  (label 9)
-  (unrealized)
-  (shape)
-  (maps ((0 1 2) ((n n) (a a))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/targetterms8.scm b/tst/targetterms8.scm
deleted file mode 100644
--- a/tst/targetterms8.scm
+++ /dev/null
@@ -1,64 +0,0 @@
-;;; Target terms experiment
-;
-;  This example demonstrates the need for the solved filter condition "2a",
-; which we had suspected was necessary for months but until now we were not
-; sure.
-;
-;
-;  The initiator sends out an encryption {|n1 {|a n2|} |}, with both levels
-; of encryption being under an asymmetric key whose inverse is assumed to be
-; non-originating.  n1 is freshly chosen.  The initiator expects to receive
-; {|a n1|}.
-;
-;  The responder takes {|n1 {|m|} |} and outputs {|m|}.
-;
-;  The initial POV (which is just the init 2 role) is dead because we don't
-; have condition 2a in the solved predicate.  If we did, we could try an
-; augmentation or displacement for a length-1 init strand with n1 being
-; used as the value for n2.  Hulling would require that this unify with the
-; existing init strand, and the result would be an init strand in which n1
-; and n2 are unified.  (Our second POV is this skeleton).
-;
-;  However, the escape set after this map is no bigger than it was; it consists
-; of only {|n1 {|a n1|} |}, which is in the image of the old escape set, so
-; we don't meet condition 2.  We do meet condition 2a, since the target term
-; (a n1) is not an image of any old target term (the old target terms were only
-; n1 and (n1 {|a n2|}).
-;
-;  Note that the first POV is dead (in CPSA 2.2.2) but the second POV is not,
-; and leads to a shape.
-
-(defprotocol targetterms8 basic
-  (defrole init (vars (a name) (n1 n2 text) (k akey))
-    (trace
-	(send (enc n1 (enc a n2 k) k))
-      (recv (enc a n1 k))
-    )
-    (uniq-orig n1)
-    (non-orig (invk k))
-)
-  (defrole resp (vars (n1 text) (m mesg) (k akey))
-    (trace
-     (recv (enc n1 (enc m k) k))
-     (send (enc m k))
-    ))
-)
-
-(comment First POV)
-(defskeleton targetterms8
-  (vars (a name) (n1 n2 text) (k akey))
-  (defstrand init 2 (a a) (n1 n1) (n2 n2) (k k))
-)
-
-(comment Second POV)
-(defskeleton targetterms8
-  (vars (a name) (n1 text) (k akey))
-  (defstrand init 2 (a a) (n1 n1) (n2 n1) (k k))
-)
-
-(comment "This is the shape.  We don't need it because we find it from the second POV.")
-(comment (defskeleton targetterms8
-  (vars (a name) (n1 text) (k akey) )
-  (defstrand init 2 (a a) (n1 n1) (n2 n1) (k k))
-  (defstrand resp 2 (n1 n1) (k k) (m (cat a n1)))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))))
diff --git a/tst/targetterms8.tst b/tst/targetterms8.tst
deleted file mode 100644
--- a/tst/targetterms8.tst
+++ /dev/null
@@ -1,98 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from targetterms8.scm")
-
-(defprotocol targetterms8 basic
-  (defrole init
-    (vars (a name) (n1 n2 text) (k akey))
-    (trace (send (enc n1 (enc a n2 k) k)) (recv (enc a n1 k)))
-    (non-orig (invk k))
-    (uniq-orig n1))
-  (defrole resp
-    (vars (n1 text) (m mesg) (k akey))
-    (trace (recv (enc n1 (enc m k) k)) (send (enc m k)))))
-
-(defskeleton targetterms8
-  (vars (n1 n2 text) (a name) (k akey))
-  (defstrand init 2 (n1 n1) (n2 n2) (a a) (k k))
-  (non-orig (invk k))
-  (uniq-orig n1)
-  (traces ((send (enc n1 (enc a n2 k) k)) (recv (enc a n1 k))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (n1 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms8
-  (vars (n2 text) (a name) (k akey))
-  (defstrand init 2 (n1 n2) (n2 n2) (a a) (k k))
-  (non-orig (invk k))
-  (uniq-orig n2)
-  (operation nonce-test (displaced 1 0 init 1) n1 (0 1)
-    (enc n1 (enc a n2 k) k))
-  (traces ((send (enc n2 (enc a n2 k) k)) (recv (enc a n2 k))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1))
-  (origs (n2 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms8
-  (vars (n2 text) (a name) (k akey))
-  (defstrand init 2 (n1 n2) (n2 n2) (a a) (k k))
-  (defstrand resp 2 (m (cat a n2)) (n1 n2) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n2)
-  (operation nonce-test (added-strand resp 2) n2 (0 1)
-    (enc n2 (enc a n2 k) k))
-  (traces ((send (enc n2 (enc a n2 k) k)) (recv (enc a n2 k)))
-    ((recv (enc n2 (enc a n2 k) k)) (send (enc a n2 k))))
-  (label 2)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (n1 n2) (n2 n2) (k k))))
-  (origs (n2 (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol targetterms8 basic
-  (defrole init
-    (vars (a name) (n1 n2 text) (k akey))
-    (trace (send (enc n1 (enc a n2 k) k)) (recv (enc a n1 k)))
-    (non-orig (invk k))
-    (uniq-orig n1))
-  (defrole resp
-    (vars (n1 text) (m mesg) (k akey))
-    (trace (recv (enc n1 (enc m k) k)) (send (enc m k)))))
-
-(defskeleton targetterms8
-  (vars (n1 text) (a name) (k akey))
-  (defstrand init 2 (n1 n1) (n2 n1) (a a) (k k))
-  (non-orig (invk k))
-  (uniq-orig n1)
-  (traces ((send (enc n1 (enc a n1 k) k)) (recv (enc a n1 k))))
-  (label 3)
-  (unrealized (0 1))
-  (origs (n1 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton targetterms8
-  (vars (n1 text) (a name) (k akey))
-  (defstrand init 2 (n1 n1) (n2 n1) (a a) (k k))
-  (defstrand resp 2 (m (cat a n1)) (n1 n1) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n1)
-  (operation nonce-test (added-strand resp 2) n1 (0 1)
-    (enc n1 (enc a n1 k) k))
-  (traces ((send (enc n1 (enc a n1 k) k)) (recv (enc a n1 k)))
-    ((recv (enc n1 (enc a n1 k) k)) (send (enc a n1 k))))
-  (label 4)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (n1 n1) (k k))))
-  (origs (n1 (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/test_small.scm b/tst/test_small.scm
new file mode 100644
--- /dev/null
+++ b/tst/test_small.scm
@@ -0,0 +1,39 @@
+(herald "small test" (algebra diffie-hellman)
+;(limit 1)
+)
+
+
+(defprotocol test diffie-hellman
+  (defrole init
+    (vars (hr base) (a b name) (xi expn))
+    (trace 
+     (recv (enc hr (privk b)))
+     (send (enc (hash (exp hr xi)) (exp (gen) xi) (privk a))))
+    (uniq-gen xi)
+;    (non-orig (privk b))
+)
+  (defrole resp
+    (vars (xr expn) (a b name) (hi base))
+    (trace 
+     (send (enc (exp (gen) xr) (privk b)))
+     (recv (enc (hash (exp hi xr)) hi (privk a))))
+    (uniq-gen xr)
+;    (non-orig (privk a))
+
+;  (defrole signer
+;    (vars (m mesg) (n name))
+;    (trace
+;      (recv m)
+;      (send (enc m (privk n)))))
+))
+
+;(defskeleton test
+;  (vars (a b name))
+;  (defstrand init 2 (a a) (b b))
+;  (non-orig (privk a) (privk b)))
+
+(defskeleton test
+  (vars (a b name))
+  (defstrand resp 2 (a a) (b b))
+  (non-orig (privk a) (privk b)))
+
diff --git a/tst/test_small.tst b/tst/test_small.tst
new file mode 100644
--- /dev/null
+++ b/tst/test_small.tst
@@ -0,0 +1,56 @@
+(herald "small test" (algebra diffie-hellman))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from test_small.scm")
+
+(defprotocol test diffie-hellman
+  (defrole init
+    (vars (hr base) (a b name) (xi expn))
+    (trace (recv (enc hr (privk b)))
+      (send (enc (hash (exp hr xi)) (exp (gen) xi) (privk a))))
+    (uniq-gen xi)
+    (ind-zero-in (xi hr)))
+  (defrole resp
+    (vars (xr expn) (a b name) (hi base))
+    (trace (send (enc (exp (gen) xr) (privk b)))
+      (recv (enc (hash (exp hi xr)) hi (privk a))))
+    (uniq-gen xr)))
+
+(defskeleton test
+  (vars (a b name) (hi base) (xr expn))
+  (defstrand resp 2 (a a) (b b) (hi hi) (xr xr))
+  (non-orig (privk a) (privk b))
+  (uniq-gen xr)
+  (traces
+    ((send (enc (exp (gen) xr) (privk b)))
+      (recv (enc (hash (exp hi xr)) hi (privk a)))))
+  (label 0)
+  (unrealized (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton test
+  (vars (a b b-0 name) (xr xi expn))
+  (defstrand resp 2 (a a) (b b) (hi (exp (gen) xi)) (xr xr))
+  (defstrand init 2 (a a) (b b-0) (hr (exp (gen) xr)) (xi xi))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (ind-zero-in (xi (exp (gen) xr)))
+  (non-orig (privk a) (privk b))
+  (uniq-gen xr xi)
+  (operation encryption-test (added-strand init 2)
+    (enc (hash (exp (gen) (mul xr xi))) (exp (gen) xi) (privk a)) (0 1))
+  (traces
+    ((send (enc (exp (gen) xr) (privk b)))
+      (recv
+        (enc (hash (exp (gen) (mul xr xi))) (exp (gen) xi) (privk a))))
+    ((recv (enc (exp (gen) xr) (privk b-0)))
+      (send
+        (enc (hash (exp (gen) (mul xr xi))) (exp (gen) xi) (privk a)))))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (xr xr) (hi (exp (gen) xi)))))
+  (origs))
+
+(comment "Nothing left to do")
diff --git a/tst/timestamping.scm b/tst/timestamping.scm
deleted file mode 100644
--- a/tst/timestamping.scm
+++ /dev/null
@@ -1,46 +0,0 @@
-(herald timestamping-service)
-
-;; Timestamping service as described on Page 76 in Applied
-;; Cryptography, Second Edition by Bruce Schneier.
-
-;; This version DOES NOT send the identity of timestamp holder that
-;; follows the one sent to the client.  It's a to do.
-
-(defmacro (link)
-  (cat alice_1 h_1 t_1 l_1))
-
-(defmacro (timestamp l)
-  (enc n alice h alice_1 h_1 t_1 l (privk trent)))
-
-(defprotocol timestamping-service basic
-  (defrole client (vars (alice alice_1 trent name)
-  			(n data) (h h_1 text) (t_1 l mesg))
-    (trace
-     (send (cat h alice))
-     (recv (timestamp l))))
-  (defrole server (vars (alice alice_1 trent name)
-			(n data) (h h_1 text) (t_1 l_1 mesg))
-    (trace
-     (recv (cat (enc (enc (link) (privk trent)) (pubk trent)) h alice))
-     (send (cat (timestamp (hash (link)))
-		(enc
-		 (enc (hash alice h (timestamp (hash (link))) (hash (link)))
-		      (privk trent))
-		 (pubk trent)))))
-    (uniq-orig n))
-  (defrole origin (vars (alice alice_1 trent name)
-  			(n data) (h h_1 text) (t_1 l_1 text))
-    (trace
-     (recv (enc (enc n (privk trent)) (pubk trent)))
-     (send (enc
-	    (enc alice h (timestamp (hash (link))) (hash (link))
-		 (privk trent))
-	    (pubk trent)))))
-  (defrole big-bang (vars (n data) (trent name))
-    (trace (send (enc (enc n (privk trent)) (pubk trent))))
-    (uniq-orig n)))
-
-(defskeleton timestamping-service
-  (vars (trent name) (n_0 data))
-  (defstrand client 2 (trent trent))
-  (non-orig (privk trent)))
diff --git a/tst/timestamping.tst b/tst/timestamping.tst
deleted file mode 100644
--- a/tst/timestamping.tst
+++ /dev/null
@@ -1,558 +0,0 @@
-(herald timestamping-service)
-
-(comment "CPSA 2.5.4")
-(comment "All input read from timestamping.scm")
-
-(defprotocol timestamping-service basic
-  (defrole client
-    (vars (alice alice_1 trent name) (n data) (h h_1 text) (t_1 l mesg))
-    (trace (send (cat h alice))
-      (recv (enc n alice h alice_1 h_1 t_1 l (privk trent)))))
-  (defrole server
-    (vars (alice alice_1 trent name) (n data) (h h_1 text)
-      (t_1 l_1 mesg))
-    (trace
-      (recv
-        (cat (enc (enc alice_1 h_1 t_1 l_1 (privk trent)) (pubk trent))
-          h alice))
-      (send
-        (cat
-          (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-            (privk trent))
-          (enc
-            (enc
-              (hash alice h
-                (enc n alice h alice_1 h_1 t_1
-                  (hash alice_1 h_1 t_1 l_1) (privk trent))
-                (hash alice_1 h_1 t_1 l_1)) (privk trent))
-            (pubk trent)))))
-    (uniq-orig n))
-  (defrole origin
-    (vars (alice alice_1 trent name) (n data) (h h_1 t_1 l_1 text))
-    (trace (recv (enc (enc n (privk trent)) (pubk trent)))
-      (send
-        (enc
-          (enc alice h
-            (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-              (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent))
-          (pubk trent)))))
-  (defrole big-bang
-    (vars (n data) (trent name))
-    (trace (send (enc (enc n (privk trent)) (pubk trent))))
-    (uniq-orig n)))
-
-(defskeleton timestamping-service
-  (vars (t_1 l mesg) (h h_1 text) (n data) (trent alice alice_1 name))
-  (defstrand client 2 (t_1 t_1) (l l) (h h) (h_1 h_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (non-orig (privk trent))
-  (traces
-    ((send (cat h alice))
-      (recv (enc n alice h alice_1 h_1 t_1 l (privk trent)))))
-  (label 0)
-  (unrealized (0 1))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton timestamping-service
-  (vars (t_1 l_1 mesg) (h h_1 text) (n data) (trent alice alice_1 name))
-  (defstrand client 2 (t_1 t_1) (l (hash alice_1 h_1 t_1 l_1)) (h h)
-    (h_1 h_1) (n n) (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand server 2 (t_1 t_1) (l_1 l_1) (h h) (h_1 h_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (precedes ((1 1) (0 1)))
-  (non-orig (privk trent))
-  (uniq-orig n)
-  (operation encryption-test (added-strand server 2)
-    (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-      (privk trent)) (0 1))
-  (traces
-    ((send (cat h alice))
-      (recv
-        (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-          (privk trent))))
-    ((recv
-       (cat (enc (enc alice_1 h_1 t_1 l_1 (privk trent)) (pubk trent)) h
-         alice))
-      (send
-        (cat
-          (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-            (privk trent))
-          (enc
-            (enc
-              (hash alice h
-                (enc n alice h alice_1 h_1 t_1
-                  (hash alice_1 h_1 t_1 l_1) (privk trent))
-                (hash alice_1 h_1 t_1 l_1)) (privk trent))
-            (pubk trent))))))
-  (label 1)
-  (parent 0)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton timestamping-service
-  (vars (h h_1 t_1 l_1 text) (n data) (trent alice alice_1 name))
-  (defstrand client 2 (t_1 t_1) (l (hash alice_1 h_1 t_1 l_1)) (h h)
-    (h_1 h_1) (n n) (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand origin 2 (h h) (h_1 h_1) (t_1 t_1) (l_1 l_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (precedes ((1 1) (0 1)))
-  (non-orig (privk trent))
-  (operation encryption-test (added-strand origin 2)
-    (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-      (privk trent)) (0 1))
-  (traces
-    ((send (cat h alice))
-      (recv
-        (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-          (privk trent))))
-    ((recv (enc (enc n (privk trent)) (pubk trent)))
-      (send
-        (enc
-          (enc alice h
-            (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-              (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent))
-          (pubk trent)))))
-  (label 2)
-  (parent 0)
-  (unrealized (0 1) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton timestamping-service
-  (vars (h h_1 h_1-0 t_1 l_1 text) (n n-0 data)
-    (trent alice alice_1 alice_1-0 name))
-  (defstrand client 2
-    (t_1
-      (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-        (hash alice_1-0 h_1-0 t_1 l_1) (privk trent)))
-    (l
-      (hash alice_1 h_1
-        (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-          (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-        (hash alice_1-0 h_1-0 t_1 l_1))) (h h) (h_1 h_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand server 2
-    (t_1
-      (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-        (hash alice_1-0 h_1-0 t_1 l_1) (privk trent)))
-    (l_1 (hash alice_1-0 h_1-0 t_1 l_1)) (h h) (h_1 h_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand origin 2 (h h_1) (h_1 h_1-0) (t_1 t_1) (l_1 l_1) (n n-0)
-    (alice alice_1) (alice_1 alice_1-0) (trent trent))
-  (precedes ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk trent))
-  (uniq-orig n)
-  (operation encryption-test (added-strand origin 2)
-    (enc alice_1 h_1
-      (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-        (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-      (hash alice_1-0 h_1-0 t_1 l_1) (privk trent)) (1 0))
-  (traces
-    ((send (cat h alice))
-      (recv
-        (enc n alice h alice_1 h_1
-          (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-            (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-          (hash alice_1 h_1
-            (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-              (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-            (hash alice_1-0 h_1-0 t_1 l_1)) (privk trent))))
-    ((recv
-       (cat
-         (enc
-           (enc alice_1 h_1
-             (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-               (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-             (hash alice_1-0 h_1-0 t_1 l_1) (privk trent)) (pubk trent))
-         h alice))
-      (send
-        (cat
-          (enc n alice h alice_1 h_1
-            (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-              (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-            (hash alice_1 h_1
-              (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-                (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-              (hash alice_1-0 h_1-0 t_1 l_1)) (privk trent))
-          (enc
-            (enc
-              (hash alice h
-                (enc n alice h alice_1 h_1
-                  (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-                    (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-                  (hash alice_1 h_1
-                    (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-                      (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-                    (hash alice_1-0 h_1-0 t_1 l_1)) (privk trent))
-                (hash alice_1 h_1
-                  (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-                    (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-                  (hash alice_1-0 h_1-0 t_1 l_1))) (privk trent))
-            (pubk trent)))))
-    ((recv (enc (enc n-0 (privk trent)) (pubk trent)))
-      (send
-        (enc
-          (enc alice_1 h_1
-            (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-              (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-            (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-          (pubk trent)))))
-  (label 3)
-  (parent 1)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton timestamping-service
-  (vars (h h_1 t_1 l_1 text) (n data) (trent alice alice_1 name))
-  (defstrand client 2 (t_1 t_1) (l (hash alice_1 h_1 t_1 l_1)) (h h)
-    (h_1 h_1) (n n) (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand origin 2 (h h) (h_1 h_1) (t_1 t_1) (l_1 l_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand big-bang 1 (n n) (trent trent))
-  (precedes ((1 1) (0 1)) ((2 0) (1 0)))
-  (non-orig (privk trent))
-  (uniq-orig n)
-  (operation encryption-test (added-strand big-bang 1)
-    (enc n (privk trent)) (1 0))
-  (traces
-    ((send (cat h alice))
-      (recv
-        (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-          (privk trent))))
-    ((recv (enc (enc n (privk trent)) (pubk trent)))
-      (send
-        (enc
-          (enc alice h
-            (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-              (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent))
-          (pubk trent))))
-    ((send (enc (enc n (privk trent)) (pubk trent)))))
-  (label 4)
-  (parent 2)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton timestamping-service
-  (vars (h h_1 h_1-0 t_1 l_1 text) (n n-0 data)
-    (trent alice alice_1 alice_1-0 name))
-  (defstrand client 2
-    (t_1
-      (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-        (hash alice_1-0 h_1-0 t_1 l_1) (privk trent)))
-    (l
-      (hash alice_1 h_1
-        (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-          (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-        (hash alice_1-0 h_1-0 t_1 l_1))) (h h) (h_1 h_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand server 2
-    (t_1
-      (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-        (hash alice_1-0 h_1-0 t_1 l_1) (privk trent)))
-    (l_1 (hash alice_1-0 h_1-0 t_1 l_1)) (h h) (h_1 h_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand origin 2 (h h_1) (h_1 h_1-0) (t_1 t_1) (l_1 l_1) (n n-0)
-    (alice alice_1) (alice_1 alice_1-0) (trent trent))
-  (defstrand big-bang 1 (n n-0) (trent trent))
-  (precedes ((1 1) (0 1)) ((2 1) (1 0)) ((3 0) (2 0)))
-  (non-orig (privk trent))
-  (uniq-orig n n-0)
-  (operation encryption-test (added-strand big-bang 1)
-    (enc n-0 (privk trent)) (2 0))
-  (traces
-    ((send (cat h alice))
-      (recv
-        (enc n alice h alice_1 h_1
-          (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-            (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-          (hash alice_1 h_1
-            (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-              (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-            (hash alice_1-0 h_1-0 t_1 l_1)) (privk trent))))
-    ((recv
-       (cat
-         (enc
-           (enc alice_1 h_1
-             (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-               (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-             (hash alice_1-0 h_1-0 t_1 l_1) (privk trent)) (pubk trent))
-         h alice))
-      (send
-        (cat
-          (enc n alice h alice_1 h_1
-            (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-              (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-            (hash alice_1 h_1
-              (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-                (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-              (hash alice_1-0 h_1-0 t_1 l_1)) (privk trent))
-          (enc
-            (enc
-              (hash alice h
-                (enc n alice h alice_1 h_1
-                  (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-                    (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-                  (hash alice_1 h_1
-                    (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-                      (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-                    (hash alice_1-0 h_1-0 t_1 l_1)) (privk trent))
-                (hash alice_1 h_1
-                  (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-                    (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-                  (hash alice_1-0 h_1-0 t_1 l_1))) (privk trent))
-            (pubk trent)))))
-    ((recv (enc (enc n-0 (privk trent)) (pubk trent)))
-      (send
-        (enc
-          (enc alice_1 h_1
-            (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-              (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-            (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-          (pubk trent))))
-    ((send (enc (enc n-0 (privk trent)) (pubk trent)))))
-  (label 5)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((trent trent) (alice alice) (alice_1 alice_1) (n n) (h h)
-        (h_1 h_1)
-        (t_1
-          (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-            (hash alice_1-0 h_1-0 t_1 l_1) (privk trent)))
-        (l
-          (hash alice_1 h_1
-            (enc n-0 alice_1 h_1 alice_1-0 h_1-0 t_1
-              (hash alice_1-0 h_1-0 t_1 l_1) (privk trent))
-            (hash alice_1-0 h_1-0 t_1 l_1))))))
-  (origs (n-0 (3 0)) (n (1 1))))
-
-(defskeleton timestamping-service
-  (vars (h h_1 t_1 l_1 h-0 text) (n n-0 data)
-    (trent alice alice_1 alice-0 name))
-  (defstrand client 2 (t_1 t_1) (l (hash alice_1 h_1 t_1 l_1)) (h h)
-    (h_1 h_1) (n n) (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand origin 2 (h h) (h_1 h_1) (t_1 t_1) (l_1 l_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand big-bang 1 (n n) (trent trent))
-  (defstrand server 2
-    (t_1
-      (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-        (privk trent))) (l_1 (hash alice_1 h_1 t_1 l_1)) (h h-0) (h_1 h)
-    (n n-0) (alice alice-0) (alice_1 alice) (trent trent))
-  (precedes ((1 1) (0 1)) ((2 0) (1 0)) ((2 0) (3 0)) ((3 1) (0 1)))
-  (non-orig (privk trent))
-  (uniq-orig n n-0)
-  (operation encryption-test (added-strand server 2)
-    (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-      (privk trent)) (0 1)
-    (enc
-      (enc alice h
-        (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-          (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent))
-      (pubk trent)))
-  (traces
-    ((send (cat h alice))
-      (recv
-        (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-          (privk trent))))
-    ((recv (enc (enc n (privk trent)) (pubk trent)))
-      (send
-        (enc
-          (enc alice h
-            (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-              (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent))
-          (pubk trent))))
-    ((send (enc (enc n (privk trent)) (pubk trent))))
-    ((recv
-       (cat
-         (enc
-           (enc alice h
-             (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-               (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent))
-           (pubk trent)) h-0 alice-0))
-      (send
-        (cat
-          (enc n-0 alice-0 h-0 alice h
-            (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-              (privk trent))
-            (hash alice h
-              (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-                (privk trent)) (hash alice_1 h_1 t_1 l_1))
-            (privk trent))
-          (enc
-            (enc
-              (hash alice-0 h-0
-                (enc n-0 alice-0 h-0 alice h
-                  (enc n alice h alice_1 h_1 t_1
-                    (hash alice_1 h_1 t_1 l_1) (privk trent))
-                  (hash alice h
-                    (enc n alice h alice_1 h_1 t_1
-                      (hash alice_1 h_1 t_1 l_1) (privk trent))
-                    (hash alice_1 h_1 t_1 l_1)) (privk trent))
-                (hash alice h
-                  (enc n alice h alice_1 h_1 t_1
-                    (hash alice_1 h_1 t_1 l_1) (privk trent))
-                  (hash alice_1 h_1 t_1 l_1))) (privk trent))
-            (pubk trent))))))
-  (label 6)
-  (parent 4)
-  (unrealized (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton timestamping-service
-  (vars (h h_1 t_1 l_1 h-0 text) (n n-0 data)
-    (trent alice alice_1 alice-0 name))
-  (defstrand client 2 (t_1 t_1) (l (hash alice_1 h_1 t_1 l_1)) (h h)
-    (h_1 h_1) (n n) (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand origin 2 (h h) (h_1 h_1) (t_1 t_1) (l_1 l_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand big-bang 1 (n n) (trent trent))
-  (defstrand server 2
-    (t_1
-      (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-        (privk trent))) (l_1 (hash alice_1 h_1 t_1 l_1)) (h h-0) (h_1 h)
-    (n n-0) (alice alice-0) (alice_1 alice) (trent trent))
-  (precedes ((1 1) (3 0)) ((2 0) (1 0)) ((3 1) (0 1)))
-  (non-orig (privk trent))
-  (uniq-orig n n-0)
-  (operation encryption-test (displaced 4 1 origin 2)
-    (enc alice h
-      (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-        (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent)) (3 0))
-  (traces
-    ((send (cat h alice))
-      (recv
-        (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-          (privk trent))))
-    ((recv (enc (enc n (privk trent)) (pubk trent)))
-      (send
-        (enc
-          (enc alice h
-            (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-              (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent))
-          (pubk trent))))
-    ((send (enc (enc n (privk trent)) (pubk trent))))
-    ((recv
-       (cat
-         (enc
-           (enc alice h
-             (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-               (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent))
-           (pubk trent)) h-0 alice-0))
-      (send
-        (cat
-          (enc n-0 alice-0 h-0 alice h
-            (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-              (privk trent))
-            (hash alice h
-              (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-                (privk trent)) (hash alice_1 h_1 t_1 l_1))
-            (privk trent))
-          (enc
-            (enc
-              (hash alice-0 h-0
-                (enc n-0 alice-0 h-0 alice h
-                  (enc n alice h alice_1 h_1 t_1
-                    (hash alice_1 h_1 t_1 l_1) (privk trent))
-                  (hash alice h
-                    (enc n alice h alice_1 h_1 t_1
-                      (hash alice_1 h_1 t_1 l_1) (privk trent))
-                    (hash alice_1 h_1 t_1 l_1)) (privk trent))
-                (hash alice h
-                  (enc n alice h alice_1 h_1 t_1
-                    (hash alice_1 h_1 t_1 l_1) (privk trent))
-                  (hash alice_1 h_1 t_1 l_1))) (privk trent))
-            (pubk trent))))))
-  (label 7)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((trent trent) (alice alice) (alice_1 alice_1) (n n) (h h)
-        (h_1 h_1) (t_1 t_1) (l (hash alice_1 h_1 t_1 l_1)))))
-  (origs (n-0 (3 1)) (n (2 0))))
-
-(defskeleton timestamping-service
-  (vars (h h_1 t_1 l_1 h-0 text) (n n-0 data)
-    (trent alice alice_1 alice-0 name))
-  (defstrand client 2 (t_1 t_1) (l (hash alice_1 h_1 t_1 l_1)) (h h)
-    (h_1 h_1) (n n) (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand origin 2 (h h) (h_1 h_1) (t_1 t_1) (l_1 l_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (defstrand big-bang 1 (n n) (trent trent))
-  (defstrand server 2
-    (t_1
-      (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-        (privk trent))) (l_1 (hash alice_1 h_1 t_1 l_1)) (h h-0) (h_1 h)
-    (n n-0) (alice alice-0) (alice_1 alice) (trent trent))
-  (defstrand origin 2 (h h) (h_1 h_1) (t_1 t_1) (l_1 l_1) (n n)
-    (alice alice) (alice_1 alice_1) (trent trent))
-  (precedes ((1 1) (0 1)) ((2 0) (1 0)) ((2 0) (4 0)) ((3 1) (0 1))
-    ((4 1) (3 0)))
-  (non-orig (privk trent))
-  (uniq-orig n n-0)
-  (operation encryption-test (added-strand origin 2)
-    (enc alice h
-      (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-        (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent)) (3 0))
-  (traces
-    ((send (cat h alice))
-      (recv
-        (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-          (privk trent))))
-    ((recv (enc (enc n (privk trent)) (pubk trent)))
-      (send
-        (enc
-          (enc alice h
-            (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-              (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent))
-          (pubk trent))))
-    ((send (enc (enc n (privk trent)) (pubk trent))))
-    ((recv
-       (cat
-         (enc
-           (enc alice h
-             (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-               (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent))
-           (pubk trent)) h-0 alice-0))
-      (send
-        (cat
-          (enc n-0 alice-0 h-0 alice h
-            (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-              (privk trent))
-            (hash alice h
-              (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-                (privk trent)) (hash alice_1 h_1 t_1 l_1))
-            (privk trent))
-          (enc
-            (enc
-              (hash alice-0 h-0
-                (enc n-0 alice-0 h-0 alice h
-                  (enc n alice h alice_1 h_1 t_1
-                    (hash alice_1 h_1 t_1 l_1) (privk trent))
-                  (hash alice h
-                    (enc n alice h alice_1 h_1 t_1
-                      (hash alice_1 h_1 t_1 l_1) (privk trent))
-                    (hash alice_1 h_1 t_1 l_1)) (privk trent))
-                (hash alice h
-                  (enc n alice h alice_1 h_1 t_1
-                    (hash alice_1 h_1 t_1 l_1) (privk trent))
-                  (hash alice_1 h_1 t_1 l_1))) (privk trent))
-            (pubk trent)))))
-    ((recv (enc (enc n (privk trent)) (pubk trent)))
-      (send
-        (enc
-          (enc alice h
-            (enc n alice h alice_1 h_1 t_1 (hash alice_1 h_1 t_1 l_1)
-              (privk trent)) (hash alice_1 h_1 t_1 l_1) (privk trent))
-          (pubk trent)))))
-  (label 8)
-  (parent 6)
-  (seen 7)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
diff --git a/tst/tnsl5.lisp b/tst/tnsl5.lisp
deleted file mode 100644
--- a/tst/tnsl5.lisp
+++ /dev/null
@@ -1,168 +0,0 @@
-(defprotocol tnsl5 basic
-  (defrole init
-    (vars (a b c d e name)
-      (na0 na1 na2 na3 nb0 nb1 nb2 nb3 nc0 nc1 nc2 nc3 nd0 nd1 nd2 nd3
-        ne0 ne1 ne2 ne3 text))
-    (trace
-      (send
-        (enc na0 a c d e (enc "unitac" na1 a b d e (pubk c))
-          (enc "unitad" na2 a b c e (pubk d))
-          (enc "unitae" na3 a b c d (pubk e)) (pubk b)))
-      (recv
-        (enc na3 ne0 e b c d (enc "repba" na0 nb3 b c d e (pubk a))
-          (enc "repca" na1 nc2 c b d e (pubk a))
-          (enc "repda" na2 nd1 d e b c (pubk a))
-          (enc "repcb" nb0 nc3 c d e a (pubk b))
-          (enc "repdb" nb1 nd2 d c e a (pubk b))
-          (enc "repeb" nb2 ne1 e a c d (pubk b))
-          (enc "repdc" nc0 nd3 d e a b (pubk c))
-          (enc "repec" nc1 ne2 e a b d (pubk c))
-          (enc "reped" nd0 ne3 e a b c (pubk d)) (pubk a)))
-      (send
-        (enc nb3 (enc "repcb" nb0 nc3 c d e a (pubk b))
-          (enc "repdb" nb1 nd2 d c e a (pubk b))
-          (enc "repeb" nb2 ne1 e a c d (pubk b))
-          (enc "repdc" nc0 nd3 d e a b (pubk c))
-          (enc "repec" nc1 ne2 e a b d (pubk c))
-          (enc "confac" nc2 (pubk c))
-          (enc "reped" nd0 ne3 e a b c (pubk d))
-          (enc "confad" nd1 (pubk d)) (enc "confae" ne0 (pubk e))
-          (pubk b))))
-    (uniq-orig na0 na1 na2 na3))
-  (defrole resp1
-    (vars (a b c d e name)
-      (na0 na1 na2 na3 nb0 nb1 nb2 nb3 nc0 nc1 nc2 nc3 nd0 nd1 nd2 nd3
-        ne0 ne1 ne2 ne3 text))
-    (trace
-      (recv
-        (enc na0 a c d e (enc "unitac" na1 a b d e (pubk c))
-          (enc "unitad" na2 a b c e (pubk d))
-          (enc "unitae" na3 a b c d (pubk e)) (pubk b)))
-      (send
-        (enc nb0 b d e a (enc "unitac" na1 a b d e (pubk c))
-          (enc "unitad" na2 a b c e (pubk d))
-          (enc "unitbd" nb1 b c e a (pubk d))
-          (enc "unitae" na3 a b c d (pubk e))
-          (enc "unitbe" nb2 b c d a (pubk e))
-          (enc "repba" na0 nb3 b c d e (pubk a)) (pubk c)))
-      (recv
-        (enc nb3 (enc "repcb" nb0 nc3 c d e a (pubk b))
-          (enc "repdb" nb1 nd2 d c e a (pubk b))
-          (enc "repeb" nb2 ne1 e a c d (pubk b))
-          (enc "repdc" nc0 nd3 d e a b (pubk c))
-          (enc "repec" nc1 ne2 e a b d (pubk c))
-          (enc "confac" nc2 (pubk c))
-          (enc "reped" nd0 ne3 e a b c (pubk d))
-          (enc "confad" nd1 (pubk d)) (enc "confae" ne0 (pubk e))
-          (pubk b)))
-      (send
-        (enc nc3 (enc "repdc" nc0 nd3 d e a b (pubk c))
-          (enc "repec" nc1 ne2 e a b d (pubk c))
-          (enc "confac" nc2 (pubk c))
-          (enc "reped" nd0 ne3 e a b c (pubk d))
-          (enc "confad" nd1 (pubk d)) (enc "confbd" nd2 (pubk d))
-          (enc "confae" ne0 (pubk e)) (enc "confbe" ne1 (pubk e))
-          (pubk c))))
-    (uniq-orig nb0 nb1 nb2 nb3))
-  (defrole resp2
-    (vars (a b c d e name)
-      (na0 na1 na2 na3 nb0 nb1 nb2 nb3 nc0 nc1 nc2 nc3 nd0 nd1 nd2 nd3
-        ne0 ne1 ne2 ne3 text))
-    (trace
-      (recv
-        (enc nb0 b d e a (enc "unitac" na1 a b d e (pubk c))
-          (enc "unitad" na2 a b c e (pubk d))
-          (enc "unitbd" nb1 b c e a (pubk d))
-          (enc "unitae" na3 a b c d (pubk e))
-          (enc "unitbe" nb2 b c d a (pubk e))
-          (enc "repba" na0 nb3 b c d e (pubk a)) (pubk c)))
-      (send
-        (enc nc0 c e a b (enc "unitad" na2 a b c e (pubk d))
-          (enc "unitbd" nb1 b c e a (pubk d))
-          (enc "unitae" na3 a b c d (pubk e))
-          (enc "unitbe" nb2 b c d a (pubk e))
-          (enc "unitce" nc1 c d a b (pubk e))
-          (enc "repba" na0 nb3 b c d e (pubk a))
-          (enc "repca" na1 nc2 c b d e (pubk a))
-          (enc "repcb" nb0 nc3 c d e a (pubk b)) (pubk d)))
-      (recv
-        (enc nc3 (enc "repdc" nc0 nd3 d e a b (pubk c))
-          (enc "repec" nc1 ne2 e a b d (pubk c))
-          (enc "confac" nc2 (pubk c))
-          (enc "reped" nd0 ne3 e a b c (pubk d))
-          (enc "confad" nd1 (pubk d)) (enc "confbd" nd2 (pubk d))
-          (enc "confae" ne0 (pubk e)) (enc "confbe" ne1 (pubk e))
-          (pubk c)))
-      (send
-        (enc nd3 (enc "reped" nd0 ne3 e a b c (pubk d))
-          (enc "confad" nd1 (pubk d)) (enc "confbd" nd2 (pubk d))
-          (enc "confae" ne0 (pubk e)) (enc "confbe" ne1 (pubk e))
-          (enc "confce" ne2 (pubk e)) (pubk d))))
-    (uniq-orig nc0 nc1 nc2 nc3))
-  (defrole resp3
-    (vars (a b c d e name)
-      (na0 na1 na2 na3 nb0 nb1 nb2 nb3 nc0 nc1 nc2 nc3 nd0 nd1 nd2 nd3
-        ne0 ne1 ne2 ne3 text))
-    (trace
-      (recv
-        (enc nc0 c e a b (enc "unitad" na2 a b c e (pubk d))
-          (enc "unitbd" nb1 b c e a (pubk d))
-          (enc "unitae" na3 a b c d (pubk e))
-          (enc "unitbe" nb2 b c d a (pubk e))
-          (enc "unitce" nc1 c d a b (pubk e))
-          (enc "repba" na0 nb3 b c d e (pubk a))
-          (enc "repca" na1 nc2 c b d e (pubk a))
-          (enc "repcb" nb0 nc3 c d e a (pubk b)) (pubk d)))
-      (send
-        (enc nd0 d a b c (enc "unitae" na3 a b c d (pubk e))
-          (enc "unitbe" nb2 b c d a (pubk e))
-          (enc "unitce" nc1 c d a b (pubk e))
-          (enc "repba" na0 nb3 b c d e (pubk a))
-          (enc "repca" na1 nc2 c b d e (pubk a))
-          (enc "repda" na2 nd1 d e b c (pubk a))
-          (enc "repcb" nb0 nc3 c d e a (pubk b))
-          (enc "repdb" nb1 nd2 d c e a (pubk b))
-          (enc "repde" nc0 nd3 d e a b (pubk c)) (pubk e)))
-      (recv
-        (enc nd3 (enc "reped" nd0 ne3 e a b c (pubk d))
-          (enc "confad" nd1 (pubk d)) (enc "confbd" nd2 (pubk d))
-          (enc "confae" ne0 (pubk e)) (enc "confbe" ne1 (pubk e))
-          (enc "confce" ne2 (pubk e)) (pubk d)))
-      (send
-        (enc ne3 (enc "confae" ne0 (pubk e)) (enc "confbe" ne1 (pubk e))
-          (enc "confce" ne2 (pubk e)) (pubk e))))
-    (uniq-orig nd0 nd1 nd2 nd3))
-  (defrole resp4
-    (vars (a b c d e name)
-      (na0 na1 na2 na3 nb0 nb1 nb2 nb3 nc0 nc1 nc2 nc3 nd0 nd1 nd2 nd3
-        ne0 ne1 ne2 ne3 text))
-    (trace
-      (recv
-        (enc nd0 d a b c (enc "unitae" na3 a b c d (pubk e))
-          (enc "unitbe" nb2 b c d a (pubk e))
-          (enc "unitce" nc1 c d a b (pubk e))
-          (enc "repba" na0 nb3 b c d e (pubk a))
-          (enc "repca" na1 nc2 c b d e (pubk a))
-          (enc "repda" na2 nd1 d e b c (pubk a))
-          (enc "repcb" nb0 nc3 c d e a (pubk b))
-          (enc "repdb" nb1 nd2 d c e a (pubk b))
-          (enc "repde" nc0 nd3 d e a b (pubk c)) (pubk e)))
-      (send
-        (enc na3 ne0 e b c d (enc "repba" na0 nb3 b c d e (pubk a))
-          (enc "repca" na1 nc2 c b d e (pubk a))
-          (enc "repda" na2 nd1 d e b c (pubk a))
-          (enc "repcb" nb0 nc3 c d e a (pubk b))
-          (enc "repdb" nb1 nd2 d c e a (pubk b))
-          (enc "repeb" nb2 ne1 e a c d (pubk b))
-          (enc "repdc" nc0 nd3 d e a b (pubk c))
-          (enc "repec" nc1 ne2 e a b d (pubk c))
-          (enc "reped" nd0 ne3 e a b c (pubk d)) (pubk a)))
-      (recv
-        (enc ne3 (enc "confae" ne0 (pubk e)) (enc "confbe" ne1 (pubk e))
-          (enc "confce" ne2 (pubk e)) (pubk e))))
-    (uniq-orig ne0 ne1 ne2 ne3)))
-
-(defskeleton tnsl5
-  (vars (a b c d e name))
-  (defstrand init 3 (a a) (b b) (c c) (d d) (e e))
-  (non-orig (privk a) (privk b) (privk c) (privk d) (privk e)))
diff --git a/tst/uncarried_keys.scm b/tst/uncarried_keys.scm
deleted file mode 100644
--- a/tst/uncarried_keys.scm
+++ /dev/null
@@ -1,30 +0,0 @@
-; uncarried-keys
-;   Shows that our notion of uniquely-originating
-; does not necessarily correspond to the notion of
-; a freshly-generated nonce, because such values can
-; be used in non-carried positions before they are
-; received.  Here, the initiator originates K in its
-; 4th message but receives (earlier) a message
-; encrypted with K from the responder.
-
-(defprotocol uncarried-keys basic
-  (defrole init
-    (vars (a text) (A B name) (K akey))
-    (trace
-     (send (enc "start" a A B (pubk B)))
-     (recv (enc a A B (pubk A)))
-     (send (enc a K (pubk B)))
-     (recv (enc a A B K)))
-    (non-orig (privk B) (invk K))
-    (uniq-orig a K))
-  (defrole resp
-    (vars (a text) (A B name) (K akey))
-    (trace
-     (recv (enc "start" a A B (pubk B)))
-     (send (enc a A B (pubk A)))
-     (recv (enc a K (pubk B)))
-     (send (enc a A B K)))))
-
-(defskeleton uncarried-keys
-  (vars (a text) (A B name) (K akey))
-  (defstrand init 4 (a a) (A A) (B B) (K K)))
diff --git a/tst/uncarried_keys.tst b/tst/uncarried_keys.tst
deleted file mode 100644
--- a/tst/uncarried_keys.tst
+++ /dev/null
@@ -1,131 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from uncarried_keys.scm")
-
-(defprotocol uncarried-keys basic
-  (defrole init
-    (vars (a text) (A B name) (K akey))
-    (trace (send (enc "start" a A B (pubk B)))
-      (recv (enc a A B (pubk A))) (send (enc a K (pubk B)))
-      (recv (enc a A B K)))
-    (non-orig (invk K) (privk B))
-    (uniq-orig a K))
-  (defrole resp
-    (vars (a text) (A B name) (K akey))
-    (trace (recv (enc "start" a A B (pubk B)))
-      (send (enc a A B (pubk A))) (recv (enc a K (pubk B)))
-      (send (enc a A B K)))))
-
-(defskeleton uncarried-keys
-  (vars (a text) (A B name) (K akey))
-  (defstrand init 4 (a a) (A A) (B B) (K K))
-  (non-orig (invk K) (privk B))
-  (uniq-orig a K)
-  (traces
-    ((send (enc "start" a A B (pubk B))) (recv (enc a A B (pubk A)))
-      (send (enc a K (pubk B))) (recv (enc a A B K))))
-  (label 0)
-  (unrealized (0 1) (0 3))
-  (origs (K (0 2)) (a (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton uncarried-keys
-  (vars (a text) (A B name) (K akey))
-  (defstrand init 4 (a a) (A A) (B B) (K K))
-  (defstrand resp 2 (a a) (A A) (B B))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk K) (privk B))
-  (uniq-orig a K)
-  (operation nonce-test (added-strand resp 2) a (0 1)
-    (enc "start" a A B (pubk B)))
-  (traces
-    ((send (enc "start" a A B (pubk B))) (recv (enc a A B (pubk A)))
-      (send (enc a K (pubk B))) (recv (enc a A B K)))
-    ((recv (enc "start" a A B (pubk B))) (send (enc a A B (pubk A)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 3))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton uncarried-keys
-  (vars (a text) (A B name) (K akey))
-  (defstrand init 4 (a a) (A A) (B B) (K K))
-  (defstrand resp 4 (a a) (A A) (B B) (K K))
-  (precedes ((0 0) (1 0)) ((0 2) (1 2)) ((1 1) (0 1)) ((1 3) (0 3)))
-  (non-orig (invk K) (privk B))
-  (uniq-orig a K)
-  (operation encryption-test (displaced 1 2 resp 4) (enc a A B K) (0 3))
-  (traces
-    ((send (enc "start" a A B (pubk B))) (recv (enc a A B (pubk A)))
-      (send (enc a K (pubk B))) (recv (enc a A B K)))
-    ((recv (enc "start" a A B (pubk B))) (send (enc a A B (pubk A)))
-      (recv (enc a K (pubk B))) (send (enc a A B K))))
-  (label 2)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (A A) (B B) (K K))))
-  (origs (K (0 2)) (a (0 0))))
-
-(defskeleton uncarried-keys
-  (vars (a text) (A B name) (K akey))
-  (defstrand init 4 (a a) (A A) (B B) (K K))
-  (defstrand resp 2 (a a) (A A) (B B))
-  (defstrand resp 4 (a a) (A A) (B B) (K K))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 2) (2 2)) ((1 1) (0 1))
-    ((2 3) (0 3)))
-  (non-orig (invk K) (privk B))
-  (uniq-orig a K)
-  (operation encryption-test (added-strand resp 4) (enc a A B K) (0 3))
-  (traces
-    ((send (enc "start" a A B (pubk B))) (recv (enc a A B (pubk A)))
-      (send (enc a K (pubk B))) (recv (enc a A B K)))
-    ((recv (enc "start" a A B (pubk B))) (send (enc a A B (pubk A))))
-    ((recv (enc "start" a A B (pubk B))) (send (enc a A B (pubk A)))
-      (recv (enc a K (pubk B))) (send (enc a A B K))))
-  (label 3)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (A A) (B B) (K K))))
-  (origs (K (0 2)) (a (0 0))))
-
-(defskeleton uncarried-keys
-  (vars (a text) (A B name))
-  (defstrand init 4 (a a) (A A) (B B) (K (pubk A)))
-  (defstrand resp 2 (a a) (A A) (B B))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk A) (privk B))
-  (uniq-orig a (pubk A))
-  (operation encryption-test (displaced 2 1 resp 2) (enc a A B (pubk A))
-    (0 3))
-  (traces
-    ((send (enc "start" a A B (pubk B))) (recv (enc a A B (pubk A)))
-      (send (enc a (pubk A) (pubk B))) (recv (enc a A B (pubk A))))
-    ((recv (enc "start" a A B (pubk B))) (send (enc a A B (pubk A)))))
-  (label 4)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (A A) (B B) (K (pubk A)))))
-  (origs ((pubk A) (0 2)) (a (0 0))))
-
-(defskeleton uncarried-keys
-  (vars (a text) (A B name) (K akey))
-  (defstrand init 4 (a a) (A A) (B B) (K K))
-  (defstrand resp 2 (a a) (A A) (B B))
-  (deflistener K)
-  (precedes ((0 0) (1 0)) ((0 2) (2 0)) ((1 1) (0 1)) ((2 1) (0 3)))
-  (non-orig (invk K) (privk B))
-  (uniq-orig a K)
-  (operation encryption-test (added-listener K) (enc a A B K) (0 3))
-  (traces
-    ((send (enc "start" a A B (pubk B))) (recv (enc a A B (pubk A)))
-      (send (enc a K (pubk B))) (recv (enc a A B K)))
-    ((recv (enc "start" a A B (pubk B))) (send (enc a A B (pubk A))))
-    ((recv K) (send K)))
-  (label 5)
-  (parent 1)
-  (unrealized (2 0))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
diff --git a/tst/unilateral.scm b/tst/unilateral.scm
--- a/tst/unilateral.scm
+++ b/tst/unilateral.scm
@@ -23,70 +23,3 @@
    (defstrand resp 2 (n n) (k k))
    (pen-non-orig n)
    (non-orig (invk k)))
-
-;;; The same two problems posed using security goals.  The goals were
-;;; taken from the output of cpsasas.
-
-(defgoal unilateral
-  (forall ((n text) (k akey) (z z-0 node))
-    (implies
-      (and (p "init" 0 z) (p "init" 1 z-0) (p "init" "n" z-0 n)
-        (p "init" "k" z-0 k) (str-prec z z-0) (non (invk k))
-        (uniq-at n z))
-      (exists ((z-1 z-2 node))
-        (and (p "resp" 0 z-1) (p "resp" 1 z-2) (p "resp" "n" z-2 n)
-          (p "resp" "k" z-2 k) (prec z z-1) (prec z-2 z-0)
-          (str-prec z-1 z-2))))))
-
-(defgoal unilateral
-  (forall ((n text) (k akey) (z node))
-    (implies
-      (and (p "resp" 1 z) (p "resp" "n" z n) (p "resp" "k" z k)
-        (non (invk k)) (pnon n))
-      (exists ((k-0 akey) (z-0 z-1 node))
-        (and (p "resp" 0 z-0) (p "init" 0 z-1) (p "init" "n" z-1 n)
-          (p "init" "k" z-1 k-0) (prec z-1 z-0) (str-prec z-0 z)
-          (uniq-at n z-1))))))
-
-;;; Unilateral authentication from ISO/IEC JTC 1/SC 27/WG 2 N1050
-
-(defprotocol iso-unilateral basic
-  (defrole resp
-    (vars (na nb t1 t2 t3 text) (b name))
-    (trace
-     (recv (cat nb t1))
-     (send (cat na nb b t3 (enc na nb b t2 (privk b)))))
-    (uniq-orig na))
-  (defrole init
-    (vars (na nb t1 t2 t3 text) (b name))
-    (trace
-     (send (cat nb t1))
-     (recv (cat na nb b t3 (enc na nb b t2 (privk b)))))
-    (uniq-orig nb))
-  (comment "Two pass authentication"))
-
-(defskeleton iso-unilateral
-  (vars (b name))
-  (defstrand init 2 (b b))
-  (non-orig (privk b)))
-
-;;; Same as above, but also checking to see if there was agreement.
-(defgoal iso-unilateral
-  (forall ((b name) (z node))
-    (implies
-     (and (p "init" 1 z)
-	  (p "init" "b" z b)
-	  (non (privk b)))
-      (exists ((y node))
-	      (and (p "resp" 1 y)
-		   (p "resp" "b" y b))))))
-
-;;; Silly example.  Of course the shape produced does not satisfy this
-;;; goal!
-(defgoal iso-unilateral
-  (forall ((b name) (z node))
-    (implies
-     (and (p "init" 1 z)
-	  (p "init" "b" z b)
-	  (non (privk b)))
-     (false))))
diff --git a/tst/unilateral.tst b/tst/unilateral.tst
--- a/tst/unilateral.tst
+++ b/tst/unilateral.tst
@@ -1,6 +1,6 @@
 (herald unilateral)
 
-(comment "CPSA 2.5.4")
+(comment "CPSA 3.2.2")
 (comment "All input read from unilateral.scm")
 
 (defprotocol unilateral basic
@@ -77,260 +77,5 @@
   (shape)
   (maps ((0) ((n n) (k k))))
   (origs (n (1 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol unilateral basic
-  (defrole init
-    (vars (n text) (k akey))
-    (trace (send (enc n k)) (recv n))
-    (uniq-orig n))
-  (defrole resp
-    (vars (n text) (k akey))
-    (trace (recv (enc n k)) (send n))))
-
-(defskeleton unilateral
-  (vars (n text) (k akey))
-  (defstrand init 2 (n n) (k k))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (goals
-    (forall ((n text) (k akey) (z z-0 node))
-      (implies
-        (and (p "init" 0 z) (p "init" 1 z-0) (p "init" "n" z-0 n)
-          (p "init" "k" z-0 k) (str-prec z z-0) (non (invk k))
-          (uniq-at n z))
-        (exists ((z-1 z-2 node))
-          (and (p "resp" 0 z-1) (p "resp" 1 z-2) (p "resp" "n" z-2 n)
-            (p "resp" "k" z-2 k) (prec z z-1) (prec z-2 z-0)
-            (str-prec z-1 z-2))))))
-  (traces ((send (enc n k)) (recv n)))
-  (label 4)
-  (unrealized (0 1))
-  (origs (n (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton unilateral
-  (vars (n text) (k akey))
-  (defstrand init 2 (n n) (k k))
-  (defstrand resp 2 (n n) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (invk k))
-  (uniq-orig n)
-  (operation nonce-test (added-strand resp 2) n (0 1) (enc n k))
-  (traces ((send (enc n k)) (recv n)) ((recv (enc n k)) (send n)))
-  (label 5)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (satisfies yes)
-  (maps ((0) ((n n) (k k))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol unilateral basic
-  (defrole init
-    (vars (n text) (k akey))
-    (trace (send (enc n k)) (recv n))
-    (uniq-orig n))
-  (defrole resp
-    (vars (n text) (k akey))
-    (trace (recv (enc n k)) (send n))))
-
-(defskeleton unilateral
-  (vars (n text) (k akey))
-  (defstrand resp 2 (n n) (k k))
-  (non-orig (invk k))
-  (pen-non-orig n)
-  (goals
-    (forall ((n text) (k akey) (z node))
-      (implies
-        (and (p "resp" 1 z) (p "resp" "n" z n) (p "resp" "k" z k)
-          (non (invk k)) (pnon n))
-        (exists ((k-0 akey) (z-0 z-1 node))
-          (and (p "resp" 0 z-0) (p "init" 0 z-1) (p "init" "n" z-1 n)
-            (p "init" "k" z-1 k-0) (prec z-1 z-0) (str-prec z-0 z)
-            (uniq-at n z-1))))))
-  (traces ((recv (enc n k)) (send n)))
-  (label 6)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton unilateral
-  (vars (n text) (k k-0 akey))
-  (defstrand resp 2 (n n) (k k))
-  (defstrand init 1 (n n) (k k-0))
-  (precedes ((1 0) (0 0)))
-  (non-orig (invk k))
-  (pen-non-orig n)
-  (uniq-orig n)
-  (operation nonce-test (added-strand init 1) n (0 0))
-  (traces ((recv (enc n k)) (send n)) ((send (enc n k-0))))
-  (label 7)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (satisfies yes)
-  (maps ((0) ((n n) (k k))))
-  (origs (n (1 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol iso-unilateral basic
-  (defrole resp
-    (vars (na nb t1 t2 t3 text) (b name))
-    (trace (recv (cat nb t1))
-      (send (cat na nb b t3 (enc na nb b t2 (privk b)))))
-    (uniq-orig na))
-  (defrole init
-    (vars (na nb t1 t2 t3 text) (b name))
-    (trace (send (cat nb t1))
-      (recv (cat na nb b t3 (enc na nb b t2 (privk b)))))
-    (uniq-orig nb))
-  (comment "Two pass authentication"))
-
-(defskeleton iso-unilateral
-  (vars (na nb t1 t2 t3 text) (b name))
-  (defstrand init 2 (na na) (nb nb) (t1 t1) (t2 t2) (t3 t3) (b b))
-  (non-orig (privk b))
-  (uniq-orig nb)
-  (traces
-    ((send (cat nb t1))
-      (recv (cat na nb b t3 (enc na nb b t2 (privk b))))))
-  (label 8)
-  (unrealized (0 1))
-  (origs (nb (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton iso-unilateral
-  (vars (na nb t1 t2 t3 t1-0 t3-0 text) (b name))
-  (defstrand init 2 (na na) (nb nb) (t1 t1) (t2 t2) (t3 t3) (b b))
-  (defstrand resp 2 (na na) (nb nb) (t1 t1-0) (t2 t2) (t3 t3-0) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig na nb)
-  (operation encryption-test (added-strand resp 2)
-    (enc na nb b t2 (privk b)) (0 1))
-  (traces
-    ((send (cat nb t1))
-      (recv (cat na nb b t3 (enc na nb b t2 (privk b)))))
-    ((recv (cat nb t1-0))
-      (send (cat na nb b t3-0 (enc na nb b t2 (privk b))))))
-  (label 9)
-  (parent 8)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (na na) (nb nb) (t1 t1) (t2 t2) (t3 t3))))
-  (origs (na (1 1)) (nb (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol iso-unilateral basic
-  (defrole resp
-    (vars (na nb t1 t2 t3 text) (b name))
-    (trace (recv (cat nb t1))
-      (send (cat na nb b t3 (enc na nb b t2 (privk b)))))
-    (uniq-orig na))
-  (defrole init
-    (vars (na nb t1 t2 t3 text) (b name))
-    (trace (send (cat nb t1))
-      (recv (cat na nb b t3 (enc na nb b t2 (privk b)))))
-    (uniq-orig nb))
-  (comment "Two pass authentication"))
-
-(defskeleton iso-unilateral
-  (vars (na nb t1 t2 t3 text) (b name))
-  (defstrand init 2 (na na) (nb nb) (t1 t1) (t2 t2) (t3 t3) (b b))
-  (non-orig (privk b))
-  (uniq-orig nb)
-  (goals
-    (forall ((b name) (z node))
-      (implies (and (p "init" 1 z) (p "init" "b" z b) (non (privk b)))
-        (exists ((y node)) (and (p "resp" 1 y) (p "resp" "b" y b))))))
-  (traces
-    ((send (cat nb t1))
-      (recv (cat na nb b t3 (enc na nb b t2 (privk b))))))
-  (label 10)
-  (unrealized (0 1))
-  (origs (nb (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton iso-unilateral
-  (vars (na nb t1 t2 t3 t1-0 t3-0 text) (b name))
-  (defstrand init 2 (na na) (nb nb) (t1 t1) (t2 t2) (t3 t3) (b b))
-  (defstrand resp 2 (na na) (nb nb) (t1 t1-0) (t2 t2) (t3 t3-0) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig na nb)
-  (operation encryption-test (added-strand resp 2)
-    (enc na nb b t2 (privk b)) (0 1))
-  (traces
-    ((send (cat nb t1))
-      (recv (cat na nb b t3 (enc na nb b t2 (privk b)))))
-    ((recv (cat nb t1-0))
-      (send (cat na nb b t3-0 (enc na nb b t2 (privk b))))))
-  (label 11)
-  (parent 10)
-  (unrealized)
-  (shape)
-  (satisfies yes)
-  (maps ((0) ((b b) (na na) (nb nb) (t1 t1) (t2 t2) (t3 t3))))
-  (origs (na (1 1)) (nb (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol iso-unilateral basic
-  (defrole resp
-    (vars (na nb t1 t2 t3 text) (b name))
-    (trace (recv (cat nb t1))
-      (send (cat na nb b t3 (enc na nb b t2 (privk b)))))
-    (uniq-orig na))
-  (defrole init
-    (vars (na nb t1 t2 t3 text) (b name))
-    (trace (send (cat nb t1))
-      (recv (cat na nb b t3 (enc na nb b t2 (privk b)))))
-    (uniq-orig nb))
-  (comment "Two pass authentication"))
-
-(defskeleton iso-unilateral
-  (vars (na nb t1 t2 t3 text) (b name))
-  (defstrand init 2 (na na) (nb nb) (t1 t1) (t2 t2) (t3 t3) (b b))
-  (non-orig (privk b))
-  (uniq-orig nb)
-  (goals
-    (forall ((b name) (z node))
-      (implies (and (p "init" 1 z) (p "init" "b" z b) (non (privk b)))
-        (false))))
-  (traces
-    ((send (cat nb t1))
-      (recv (cat na nb b t3 (enc na nb b t2 (privk b))))))
-  (label 12)
-  (unrealized (0 1))
-  (origs (nb (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton iso-unilateral
-  (vars (na nb t1 t2 t3 t1-0 t3-0 text) (b name))
-  (defstrand init 2 (na na) (nb nb) (t1 t1) (t2 t2) (t3 t3) (b b))
-  (defstrand resp 2 (na na) (nb nb) (t1 t1-0) (t2 t2) (t3 t3-0) (b b))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk b))
-  (uniq-orig na nb)
-  (operation encryption-test (added-strand resp 2)
-    (enc na nb b t2 (privk b)) (0 1))
-  (traces
-    ((send (cat nb t1))
-      (recv (cat na nb b t3 (enc na nb b t2 (privk b)))))
-    ((recv (cat nb t1-0))
-      (send (cat na nb b t3-0 (enc na nb b t2 (privk b))))))
-  (label 13)
-  (parent 12)
-  (unrealized)
-  (shape)
-  (satisfies (no (b b) (z (0 1))))
-  (maps ((0) ((b b) (na na) (nb nb) (t1 t1) (t2 t2) (t3 t3))))
-  (origs (na (1 1)) (nb (0 0))))
 
 (comment "Nothing left to do")
diff --git a/tst/uniq-gen-test.scm b/tst/uniq-gen-test.scm
new file mode 100644
--- /dev/null
+++ b/tst/uniq-gen-test.scm
@@ -0,0 +1,48 @@
+(herald "Unique generation test protocols."
+   (comment "Skeletons 2, 4, and 7 should have no shapes."))
+
+(defprotocol uniqgentest basic
+  (defrole init
+    (vars (a name) (k skey))
+    (trace
+       (send (enc a k))
+       (recv (enc a a k))
+    )
+   )
+  (defrole doubler
+    (vars (a name) (k skey))
+    (trace
+       (send (enc a a k)))
+  )
+  (defrole resp
+    (vars (a name) (k skey))
+    (trace
+     (recv (enc a k))
+     (send (enc a a k)))
+    )
+)
+
+;; This input, if enabled, should cause an 
+;; error, since k is not carried anywhere.
+;(defskeleton uniqgentest 
+;   (vars (k skey))
+;   (defstrand init 2 (k k))
+;   (uniq-orig k))
+
+;; This input should have a shape in which a
+;; doubler produces the message needed by the
+;; initiator.
+(defskeleton uniqgentest
+   (vars (k skey))
+   (defstrand init 2 (k k))
+   (non-orig k))
+
+;; This input should have no shape, because
+;; declaring k to be uniq-gen does not allow
+;; a doubler strand: the doubler strand generates
+;; its key.
+(defskeleton uniqgentest
+   (vars (k skey))
+   (defstrand init 2 (k k))
+   (uniq-gen k))
+
diff --git a/tst/uniq-gen-test.tst b/tst/uniq-gen-test.tst
new file mode 100644
--- /dev/null
+++ b/tst/uniq-gen-test.tst
@@ -0,0 +1,138 @@
+(herald "Unique generation test protocols."
+  (comment "Skeletons 2, 4, and 7 should have no shapes."))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from uniq-gen-test.scm")
+
+(defprotocol uniqgentest basic
+  (defrole init
+    (vars (a name) (k skey))
+    (trace (send (enc a k)) (recv (enc a a k))))
+  (defrole doubler (vars (a name) (k skey)) (trace (send (enc a a k))))
+  (defrole resp
+    (vars (a name) (k skey))
+    (trace (recv (enc a k)) (send (enc a a k)))))
+
+(defskeleton uniqgentest
+  (vars (a name) (k skey))
+  (defstrand init 2 (a a) (k k))
+  (non-orig k)
+  (traces ((send (enc a k)) (recv (enc a a k))))
+  (label 0)
+  (unrealized (0 1))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton uniqgentest
+  (vars (a name) (k skey))
+  (defstrand init 2 (a a) (k k))
+  (defstrand doubler 1 (a a) (k k))
+  (precedes ((1 0) (0 1)))
+  (non-orig k)
+  (operation encryption-test (added-strand doubler 1) (enc a a k) (0 1))
+  (traces ((send (enc a k)) (recv (enc a a k))) ((send (enc a a k))))
+  (label 1)
+  (parent 0)
+  (unrealized)
+  (shape)
+  (maps ((0) ((k k) (a a))))
+  (origs))
+
+(defskeleton uniqgentest
+  (vars (a name) (k skey))
+  (defstrand init 2 (a a) (k k))
+  (defstrand resp 2 (a a) (k k))
+  (precedes ((1 1) (0 1)))
+  (non-orig k)
+  (operation encryption-test (added-strand resp 2) (enc a a k) (0 1))
+  (traces ((send (enc a k)) (recv (enc a a k)))
+    ((recv (enc a k)) (send (enc a a k))))
+  (label 2)
+  (parent 0)
+  (unrealized (1 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton uniqgentest
+  (vars (a name) (k skey))
+  (defstrand init 2 (a a) (k k))
+  (defstrand resp 2 (a a) (k k))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (non-orig k)
+  (operation encryption-test (displaced 2 0 init 1) (enc a k) (1 0))
+  (traces ((send (enc a k)) (recv (enc a a k)))
+    ((recv (enc a k)) (send (enc a a k))))
+  (label 3)
+  (parent 2)
+  (unrealized)
+  (shape)
+  (maps ((0) ((k k) (a a))))
+  (origs))
+
+(defskeleton uniqgentest
+  (vars (a name) (k skey))
+  (defstrand init 2 (a a) (k k))
+  (defstrand resp 2 (a a) (k k))
+  (defstrand init 1 (a a) (k k))
+  (precedes ((1 1) (0 1)) ((2 0) (1 0)))
+  (non-orig k)
+  (operation encryption-test (added-strand init 1) (enc a k) (1 0))
+  (traces ((send (enc a k)) (recv (enc a a k)))
+    ((recv (enc a k)) (send (enc a a k))) ((send (enc a k))))
+  (label 4)
+  (parent 2)
+  (unrealized)
+  (shape)
+  (maps ((0) ((k k) (a a))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol uniqgentest basic
+  (defrole init
+    (vars (a name) (k skey))
+    (trace (send (enc a k)) (recv (enc a a k))))
+  (defrole doubler (vars (a name) (k skey)) (trace (send (enc a a k))))
+  (defrole resp
+    (vars (a name) (k skey))
+    (trace (recv (enc a k)) (send (enc a a k)))))
+
+(defskeleton uniqgentest
+  (vars (a name) (k skey))
+  (defstrand init 2 (a a) (k k))
+  (uniq-gen k)
+  (traces ((send (enc a k)) (recv (enc a a k))))
+  (label 5)
+  (unrealized (0 1))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton uniqgentest
+  (vars (a name) (k skey))
+  (defstrand init 2 (a a) (k k))
+  (defstrand resp 2 (a a) (k k))
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (uniq-gen k)
+  (operation encryption-test (added-strand resp 2) (enc a a k) (0 1))
+  (traces ((send (enc a k)) (recv (enc a a k)))
+    ((recv (enc a k)) (send (enc a a k))))
+  (label 6)
+  (parent 5)
+  (unrealized)
+  (shape)
+  (maps ((0) ((k k) (a a))))
+  (origs))
+
+(defskeleton uniqgentest
+  (vars (a name) (k skey))
+  (defstrand init 2 (a a) (k k))
+  (deflistener k)
+  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
+  (uniq-gen k)
+  (operation encryption-test (added-listener k) (enc a a k) (0 1))
+  (traces ((send (enc a k)) (recv (enc a a k))) ((recv k) (send k)))
+  (label 7)
+  (parent 5)
+  (unrealized (1 0))
+  (comment "empty cohort"))
+
+(comment "Nothing left to do")
diff --git a/tst/uo.scm b/tst/uo.scm
deleted file mode 100644
--- a/tst/uo.scm
+++ /dev/null
@@ -1,25 +0,0 @@
-; uniq-orig
-;   Shows that our notion of uniquely-originating
-; does not necessarily correspond to the notion of
-; a freshly-generated nonce, because such values can
-; be used in non-carried positions before they are
-; received.  Here, the initiator originates n in its
-; message but no problem is detected with a responder
-; that sends a message encrypted under n as its first
-; message, before receiving n.
-
-(defprotocol uniq-orig basic
-  (defrole init
-    (vars (n text))
-    (trace (send n))
-    (uniq-orig n))
-  (defrole resp
-    (vars (m n text))
-    (trace
-     (send (enc m n))
-     (recv n))))
-
-(defskeleton uniq-orig
-  (vars (n text))
-  (defstrand init 1 (n n))
-  (defstrand resp 2 (n n)))
diff --git a/tst/uo.tst b/tst/uo.tst
deleted file mode 100644
--- a/tst/uo.tst
+++ /dev/null
@@ -1,33 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from uo.scm")
-
-(defprotocol uniq-orig basic
-  (defrole init (vars (n text)) (trace (send n)) (uniq-orig n))
-  (defrole resp (vars (m n text)) (trace (send (enc m n)) (recv n))))
-
-(defskeleton uniq-orig
-  (vars (n m text))
-  (defstrand init 1 (n n))
-  (defstrand resp 2 (m m) (n n))
-  (uniq-orig n)
-  (traces ((send n)) ((send (enc m n)) (recv n)))
-  (label 0)
-  (unrealized (1 1))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton uniq-orig
-  (vars (n m text))
-  (defstrand init 1 (n n))
-  (defstrand resp 2 (m m) (n n))
-  (precedes ((0 0) (1 1)))
-  (uniq-orig n)
-  (traces ((send n)) ((send (enc m n)) (recv n)))
-  (label 1)
-  (parent 0)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((n n) (m m))))
-  (origs (n (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/wang-hash.scm b/tst/wang-hash.scm
deleted file mode 100644
--- a/tst/wang-hash.scm
+++ /dev/null
@@ -1,434 +0,0 @@
-(herald "Wang's Fair Exchange Protocol" (bound 10))
-
-;; CPSA input file to represent
-;; Wang's Fair Exchange Protocol
-
-;; This macro implements the CPSA
-;; convention of regarding a hash as
-;; an asymmetric encryption.  The
-;; decryption key inverse to (pubk
-;; hash) is assumed non-originating
-;; in roles using hashing.
-
-;; (defmacro (hash x)
-;;  (enc "h" (cat "h" x)))
-
-;; Wang's encrypted format for the
-;; message payload.  Observe that m,
-;; k get their values from the
-;; like-named messages in the context
-;; where the macro is expanded.
-
-(defmacro (em)
-  (enc m k))
-
-;; The session label L as a fn of
-;; the values that *should be* the
-;; hashes of the encrypted message EM
-;; and the session key K.
-
-(defmacro (l-prime y x)
-  (cat a b t y x))
-
-;; The recipient can check that a
-;; session label has an l-prime where
-;; y is the hash of another parameter.
-;; Hence recipient roles use l-star.
-
-(defmacro (l-star e1 x)
-  (l-prime (hash e1) x))
-
-;; The Evidence of Origin is checked
-;; to be this fn of other parameters
-;; available to the recipient.
-
-(defmacro (eoo-star x e1 e2)
-  (enc (cat "eootag"
-	    (hash (l-star e1 x)) e2)
-       (privk "sign" a)))
-
-;; The Evidence of Receipt is computed
-;; as this fn of other parameters
-;; available to the recipient.
-
-(defmacro (eor-star x e1 e2)
-  (enc (cat "eortag"
-	    (hash (l-star e1 x)) e2)
-       (privk "sign" b)))
-
-;; The Recovery Request as computed by
-;; the recipient.
-
-(defmacro (rr-star x e1 e2)
-  (cat (l-star e1 x) e2
-       (eoo-star x e1 e2)
-       (eor-star x e1 e2)
-       (enc (cat "rcrq" (l-star e1 x) e2)
-            (privk "sign" b))))
-
-;; The Abort Token is checked
-;; to be this fn of other parameters
-;; available to the recipient.
-
-(defmacro (at-star e1 x)
-  (enc (enc "abrq" (l-star e1 x)
-            (privk "sign" a))
-       (privk "sign" t)))
-
-;; How the initiator computes the
-;; encrypted key package:
-
-(defmacro (ek l)
-  (enc (cat "keytag" (hash l) k r)
-       (pubk "encr" t)))
-
-;; The Initiator's computed
-;; version of L.
-
-(defmacro (l)
-  (l-prime (hash (enc m k)) (hash k)))
-
-;; The TTP can check that the session
-;; label L is this fn of other
-;; parameters available to the TTP.
-
-(defmacro (l-prime-prime y)
-  (cat a b t y (hash k)))
-
-;; The TTP can check that the EOO
-;; is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (eoo-prime-prime y)
-  (enc (cat "eootag"
-            (hash (l-prime-prime y))
-	    (ek (l-prime-prime y)))
-       (privk "sign" a)))
-
-;; The TTP can check that the EOR
-;; is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (eor-prime-prime y)
-  (enc (cat "eortag"
-	    (hash (l-prime-prime y))
-	    (ek (l-prime-prime y)))
-       (privk "sign" b)))
-
-;; The TTP can check that the RR
-;; is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (rr-prime-prime y)
-  (cat (l-prime-prime y)
-       (ek (l-prime-prime y))
-       (eoo-prime-prime y)
-       (eor-prime-prime y)
-       (enc "rcrq" (l-prime-prime y)
-	    (ek (l-prime-prime y))
-            (privk "sign" b))))
-
-;; The TTP can check that the Confirmation
-;; Request is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (cf-prime-prime y)
-  (cat (l-prime-prime y) (ek (l-prime-prime y))
-       (eoo-prime-prime y) (eor-prime-prime y)
-       (enc "cfrq" (l-prime-prime y)
-	    (ek (l-prime-prime y))
-            (privk "sign" b))))
-
-;; Defn of Wang's Fair Exchange Protocol.
-;; Closely follows the presentation in the
-;; figures in Section 3.  In the TTP roles,
-;; we have put a dummy send or receive in place
-;; of the state synchronization event to keep
-;; the indices matching the spec.
-
-(defprotocol wang basic
-
-  ;; Successful initiator run with no TTP involvement
-
-  (defrole init1
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (recv (eor-star (hash k) (enc m k) (ek (l))))
-     (send (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;; Aborted initiator run
-
-  (defrole init2
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (enc "abcf"
-                (enc "abrq" (l) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; Initiator run with abort request and forced recovery
-
-  (defrole init3
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (eor-star (hash k) (enc m k) (ek (l)))))
-    (non-orig (privk hash_id)))
-
-  ;; Aborted initiator run, but with EOR received
-
-  (defrole init4
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (recv (eor-star (hash k) (enc m k) (ek (l))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (enc "abcf"
-                (enc "abrq" (l) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; Initiator run with abort requested after EOR received,
-  ;; but recovery forced
-
-  (defrole init5
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (recv (eor-star (hash k) (enc m k) (ek (l))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (eor-star (hash k) (enc m k) (ek (l)))))
-    (non-orig (privk hash_id)))
-
-  ;; Successful responder run with no TTP involvement
-
-  (defrole resp1
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (recv (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (eor-star (hash k) (enc m k) (ek (l))))
-     (recv (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;;Responder run with recovery via TTP
-
-  (defrole resp2
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (recv (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (cat (l) (ek (l)) (eoo-star (hash k) (enc m k) (ek (l)))
-                (eor-star (hash k) (enc m k) (ek (l)))))
-     (send (cat (l) (ek (l)) (eoo-star (hash k) (enc m k) (ek (l)))
-                (eor-star (hash k) (enc m k) (ek (l)))
-                (enc "rcrq" (l) (ek (l)) (privk "sign" b))))
-     (recv (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;; Responder run with recovery request and forced abort
-
-  (defrole resp3
-    (vars (a b t hash_id name) (e1 e2 x mesg))
-    (trace
-     (recv (cat (l-star e1 x) e1 e2 (eoo-star x e1 e2)))
-     (send (cat (l-star e1 x) e2 (eoo-star x e1 e2) (eor-star x e1 e2)))
-     (send (cat (l-star e1 x) e2 (eoo-star x e1 e2) (eor-star x e1 e2)
-                (enc "rcrq" (l-star e1 x) e2 (privk "sign" b))))
-     (recv (enc "abcf"
-                (enc "abrq" (l-star e1 x) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP handles an abort
-
-  (defrole ttp-ab1
-    (vars (a b t hash_id name) (y x mesg))
-    (trace
-     (recv (enc "abrq" (l-prime y x) (privk "sign" a)))
-     (send (cat "sync-abrq"
-                (enc "abrq" (l-prime y x) (privk "sign" a))))
-     (send (enc "abcf"
-                (enc "abrq" (l-prime y x) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP forces recovery in response to an abort request
-
-  (defrole ttp-ab2
-    (vars (a b t hash_id name) (y x e mesg))
-    (trace
-     (recv (enc "abrq" (l-prime y x) (privk "sign" a)))
-     (recv (cat "sync-abrq"
-                (enc "eortag" (hash (l-prime y x)) e
-                     (privk "sign" b))))
-     (send (enc "eortag" (hash (l-prime y x)) e
-                (privk "sign" b))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP handles a recovery
-
-  (defrole ttp-rc1
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (rr-prime-prime y))
-     (send (cat "sync-rc-req"
-                (rr-prime-prime y)))
-     (send (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;; TTP forces abort in response to a recovery request
-
-  (defrole ttp-rc2
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (rr-prime-prime y))
-     (recv (cat "sync-rc-req"
-		(enc "abrq" (l-prime-prime y) (privk "sign" a))))
-     (send (enc "abcf"
-                (enc "abrq" (l-prime-prime y) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP handles a confirm request
-
-  (defrole ttp-cf1
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (cf-prime-prime y))
-     (send (cat "sync-cf-req"
-                (cf-prime-prime y)))
-     (send (enc (cf-prime-prime y) (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP replies with abort token given confirm request
-
-  (defrole ttp-cf2
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (cf-prime-prime y))
-     (recv (cat "sync-cf-req"
-                (enc "abrq"(l-prime-prime y) (privk "sign" a))))
-     (send (enc "abcf"
-                (enc "abrq"(l-prime-prime y) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id))))
-
-;; End of Wang's protocol defn.
-
-;; Two experiments to prove Lemma 4.1
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init1 1 (b b) (t t) (m m) (r r) (k k))
-  (deflistener m)
-  (non-orig
-   (privk "encr" t))
-  (uniq-orig m k)
-  (comment "Experiment 1 to prove Lemma 4.1."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init1 1 (b b) (t t) (m m) (r r) (k k))
-  (deflistener k)
-  (non-orig
-   (privk "encr" t))
-  (uniq-orig m k)
-  (comment "Experiment 2 to prove Lemma 4.1."))
-
-;; We now have three experiments
-;; to prove Lemma 4.2, clause 1.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init1 3 (b b) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" b))
-  (comment "First of three experiments to prove Lemma 4.2, clause 1."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init3 3 (b b) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" b))
-  (comment "Second of three experiments to prove Lemma 4.2, clause 1."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init5 4 (b b) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" b))
-  (comment "Third of three experiments to prove Lemma 4.2, clause 1."))
-
-;; Two experiments to prove 4.2, Clause 2.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand resp1 3 (a a) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" a))
-  (comment
-   "First of two experiments to prove Lemma 4.2, clause 2."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand resp2 4 (a a) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" a))
-  (comment
-   "Second of two experiments to prove Lemma 4.2, clause 2."))
-
-;; Experiment to prove Lemma 4.2, clause 3.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (e1 e2 x mesg))
-  (defstrand resp3 4 (a a) (t t))
-  (non-orig
-   (privk "sign" a))
-  (comment
-   "Experiments to prove Lemma 4.2, clause 3."))
-
-;; One experiment to prove Lemma 4.3, Clause 1.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (y x mesg))
-  (deflistener
-    (enc "abcf" (enc "abrq" (l-prime y x) (privk "sign" a))
-	 (privk "sign" t)))
-  (non-orig
-   (privk "sign" t))
-  (comment
-   "Experiments to prove Lemma 4.3, clause 1."))
-
-;; Three experiments to prove Lemma 4.3, Clause 2.
-
-(defskeleton wang
-  (vars (y x mesg) (a b t name))
-  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
-  (non-orig (privk "sign" a)  (privk "encr" t))
-  (comment
-   "Experiment 1 to prove Lemma 4.3, clause 2."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-  (defstrand ttp-rc2 3 (a a) (b b) (t t))
-  (non-orig (privk "sign" a)  (privk "encr" t))
-  (comment
-   "Experiment 2 to prove Lemma 4.3, clause 2."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-  (defstrand ttp-cf2 3 (a a) (b b) (t t))
-  (non-orig (privk "sign" a)  (privk "encr" t))
-  (comment
-   "Experiment 3 to prove Lemma 4.3, clause 2."))
diff --git a/tst/wang-hash.tst b/tst/wang-hash.tst
deleted file mode 100644
--- a/tst/wang-hash.tst
+++ /dev/null
@@ -1,5363 +0,0 @@
-(herald "Wang's Fair Exchange Protocol" (bound 10))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from wang-hash.scm")
-(comment "Strand count bounded at 10")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener m)
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (comment "Experiment 1 to prove Lemma 4.1.")
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))) ((recv m) (send m)))
-  (label 0)
-  (unrealized (1 0))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener m)
-  (precedes ((0 0) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))) ((recv m) (send m)))
-  (label 1)
-  (parent 0)
-  (unrealized (1 0))
-  (origs (m (0 0)) (k (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener m)
-  (deflistener k)
-  (precedes ((0 0) (2 0)) ((2 1) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation nonce-test (added-listener k) m (1 0) (enc m k))
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))) ((recv m) (send m))
-    ((recv k) (send k)))
-  (label 2)
-  (parent 1)
-  (unrealized (2 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (deflistener m)
-  (deflistener k)
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 2) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation nonce-test (displaced 0 3 init1 3) k (2 0)
-    (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-      (pubk "encr" t)))
-  (traces ((recv m) (send m)) ((recv k) (send k))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (label 3)
-  (parent 2)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener m)
-  (deflistener k)
-  (defstrand ttp-rc1 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (precedes ((0 0) (3 0)) ((2 1) (1 0)) ((3 2) (2 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation nonce-test (added-strand ttp-rc1 3) k (2 0)
-    (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-      (pubk "encr" t)))
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))) ((recv m) (send m))
-    ((recv k) (send k))
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (label 4)
-  (parent 2)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (deflistener m)
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation generalization deleted (1 0))
-  (traces ((recv m) (send m))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (label 5)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((1 0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs (m (1 0)) (k (1 0))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener m)
-  (defstrand ttp-rc1 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (precedes ((0 0) (2 0)) ((2 2) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))) ((recv m) (send m))
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (label 6)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs (m (0 0)) (k (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener k)
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (comment "Experiment 2 to prove Lemma 4.1.")
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))) ((recv k) (send k)))
-  (label 7)
-  (unrealized (1 0))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener k)
-  (precedes ((0 0) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))) ((recv k) (send k)))
-  (label 8)
-  (parent 7)
-  (unrealized (1 0))
-  (origs (m (0 0)) (k (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (deflistener k)
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation nonce-test (displaced 0 2 init1 3) k (1 0)
-    (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-      (pubk "encr" t)))
-  (traces ((recv k) (send k))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (label 9)
-  (parent 8)
-  (unrealized)
-  (shape)
-  (maps ((1 0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs (m (1 0)) (k (1 0))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener k)
-  (defstrand ttp-rc1 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (precedes ((0 0) (2 0)) ((2 2) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation nonce-test (added-strand ttp-rc1 3) k (1 0)
-    (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-      (pubk "encr" t)))
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))) ((recv k) (send k))
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (label 10)
-  (parent 8)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs (m (0 0)) (k (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (non-orig (privk "sign" b))
-  (comment "First of three experiments to prove Lemma 4.2, clause 1.")
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (label 11)
-  (unrealized (0 1))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 1)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp1 2)
-    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t)) (privk "sign" b)) (0 1))
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r)))
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (label 12)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp3 2 (e1 (enc m k))
-    (e2
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
-  (precedes ((1 1) (0 1)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp3 2)
-    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t)) (privk "sign" b)) (0 1))
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r)))
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))))
-  (label 13)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (non-orig (privk "sign" b))
-  (comment "Second of three experiments to prove Lemma 4.2, clause 1.")
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (label 14)
-  (unrealized (0 2))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 2)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp1 2)
-    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t)) (privk "sign" b)) (0 2))
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))))
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (label 15)
-  (parent 14)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp3 2 (e1 (enc m k))
-    (e2
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
-  (precedes ((1 1) (0 2)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp3 2)
-    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t)) (privk "sign" b)) (0 2))
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))))
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))))
-  (label 16)
-  (parent 14)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
-  (non-orig (privk "sign" b))
-  (comment "Third of three experiments to prove Lemma 4.2, clause 1.")
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (label 17)
-  (unrealized (0 1) (0 3))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 1)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp1 2)
-    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t)) (privk "sign" b)) (0 1))
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))))
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (label 18)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp3 2 (e1 (enc m k))
-    (e2
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
-  (precedes ((1 1) (0 1)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp3 2)
-    (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t)) (privk "sign" b)) (0 1))
-  (traces
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))))
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))))
-  (label 19)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (non-orig (privk "sign" a))
-  (comment "First of two experiments to prove Lemma 4.2, clause 2.")
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (label 20)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (added-strand init5 1)
-    (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t)) (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r)))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))))
-  (label 21)
-  (parent 20)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (t t) (m m) (r r) (k k) (b b))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (k k))
-  (non-orig (privk "sign" a))
-  (comment "Second of two experiments to prove Lemma 4.2, clause 2.")
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (label 22)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (added-strand init5 1)
-    (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t)) (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r)))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))))
-  (label 23)
-  (parent 22)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (t t) (m m) (r r) (k k) (b b))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (e1 e2 x mesg) (a t b name))
-  (defstrand resp3 4 (e1 e1) (e2 e2) (x x) (a a) (b b) (t t))
-  (non-orig (privk "sign" a))
-  (comment "Experiments to prove Lemma 4.2, clause 3.")
-  (traces
-    ((recv
-       (cat (cat a b t (hash e1) x) e1 e2
-         (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (label 24)
-  (unrealized (0 0) (0 3))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp3 4 (e1 (enc m k))
-    (e2
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (added-strand init5 1)
-    (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t)) (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))))
-  (label 25)
-  (parent 24)
-  (unrealized (0 3))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp3 4 (e1 (enc m k))
-    (e2
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
-  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 1) (0 3)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init3 2)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 3))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 26)
-  (parent 25)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (t t) (b b) (e1 (enc m k))
-        (e2
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))) (x (hash k)))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a t b name) (k skey))
-  (defstrand resp3 4 (e1 (enc m k))
-    (e2
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 1) (0 3)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (added-strand init3 2)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 3))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a)))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 27)
-  (parent 25)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (t t) (b b) (e1 (enc m k))
-        (e2
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))) (x (hash k)))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp3 4 (e1 (enc m k))
-    (e2
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
-  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 2) (0 3)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init5 3)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 3))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 28)
-  (parent 25)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (t t) (b b) (e1 (enc m k))
-        (e2
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))) (x (hash k)))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a t b name) (k skey))
-  (defstrand resp3 4 (e1 (enc m k))
-    (e2
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t))) (x (hash k)) (a a) (b b) (t t))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 2) (0 3)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (added-strand init5 3)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 3))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a)))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 29)
-  (parent 25)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (t t) (b b) (e1 (enc m k))
-        (e2
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))) (x (hash k)))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (y x mesg) (a b t name))
-  (deflistener
-    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-      (privk "sign" t)))
-  (non-orig (privk "sign" t))
-  (comment "Experiments to prove Lemma 4.3, clause 1.")
-  (traces
-    ((recv
-       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-         (privk "sign" t)))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (label 30)
-  (unrealized (0 0))
-  (origs)
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wang
-  (vars (y x mesg) (a b t name))
-  (deflistener
-    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-      (privk "sign" t)))
-  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "sign" t))
-  (operation encryption-test (added-strand ttp-ab1 3)
-    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-      (privk "sign" t)) (0 0))
-  (traces
-    ((recv
-       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-         (privk "sign" t)))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t))))
-    ((recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (label 31)
-  (parent 30)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (y y) (x x))))
-  (origs))
-
-(defskeleton wang
-  (vars (y mesg) (r text) (a b t name) (k skey))
-  (deflistener
-    (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-      (privk "sign" t)))
-  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "sign" t))
-  (operation encryption-test (added-strand ttp-rc2 3)
-    (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-      (privk "sign" t)) (0 0))
-  (traces
-    ((recv
-       (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-         (privk "sign" t)))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((recv
-       (cat (cat a b t y (hash k))
-         (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-         (enc "eootag" (hash a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag" (hash a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "rcrq" (cat a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (label 32)
-  (parent 30)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (y y) (x (hash k)))))
-  (origs))
-
-(defskeleton wang
-  (vars (y mesg) (r text) (a b t name) (k skey))
-  (deflistener
-    (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-      (privk "sign" t)))
-  (defstrand ttp-cf2 3 (y y) (r r) (a a) (b b) (t t) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "sign" t))
-  (operation encryption-test (added-strand ttp-cf2 3)
-    (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-      (privk "sign" t)) (0 0))
-  (traces
-    ((recv
-       (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-         (privk "sign" t)))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((recv
-       (cat (cat a b t y (hash k))
-         (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-         (enc "eootag" (hash a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag" (hash a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "cfrq" (cat a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (label 33)
-  (parent 30)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (y y) (x (hash k)))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (y x mesg) (a b t name))
-  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (comment "Experiment 1 to prove Lemma 4.3, clause 2.")
-  (traces
-    ((recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (label 34)
-  (unrealized (0 0))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-ab1 3 (y (hash (enc m k))) (x (hash k)) (a a) (b b)
-    (t t))
-  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init3 2)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (send
-        (cat "sync-abrq"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 35)
-  (parent 34)
-  (unrealized)
-  (shape)
-  (maps ((0) ((y (hash (enc m k))) (x (hash k)) (a a) (b b) (t t))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-ab1 3 (y (hash (enc m k))) (x (hash k)) (a a) (b b)
-    (t t))
-  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init5 3)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (send
-        (cat "sync-abrq"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 36)
-  (parent 34)
-  (unrealized)
-  (shape)
-  (maps ((0) ((y (hash (enc m k))) (x (hash k)) (a a) (b b) (t t))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (y mesg) (r text) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (k k))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (comment "Experiment 2 to prove Lemma 4.3, clause 2.")
-  (traces
-    ((recv
-       (cat (cat a b t y (hash k))
-         (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-         (enc "eootag" (hash a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag" (hash a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "rcrq" (cat a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (label 37)
-  (unrealized (0 0) (0 1))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init5 1)
-    (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t)) (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))))
-  (label 38)
-  (parent 37)
-  (unrealized (0 1))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init3 2)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 39)
-  (parent 38)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 1) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init3 2)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a)))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 40)
-  (parent 38)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 2) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init5 3)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 41)
-  (parent 38)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 2) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init5 3)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a)))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 42)
-  (parent 38)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t))
-          (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash (enc m k)) (hash k))
-            (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-              (pubk "encr" t)) (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (hash e1) x) e1 e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))))
-      (send
-        (cat (cat a b t (hash e1) x) e2
-          (enc "eootag" (hash a b t (hash e1) x) e2 (privk "sign" a))
-          (enc "eortag" (hash a b t (hash e1) x) e2 (privk "sign" b))
-          (enc "rcrq" (cat a b t (hash e1) x) e2 (privk "sign" b))))
-      (recv
-        (enc "abcf" (enc "abrq" a b t (hash e1) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (hash a b t y x) e (privk "sign" b))))
-      (send (enc "eortag" (hash a b t y x) e (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (enc (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (hash k))
-          (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-          (enc "eootag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag" (hash a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "cfrq" (cat a b t y (hash k))
-            (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (y mesg) (r text) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y y) (r r) (a a) (b b) (t t) (k k))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (comment "Experiment 3 to prove Lemma 4.3, clause 2.")
-  (traces
-    ((recv
-       (cat (cat a b t y (hash k))
-         (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-         (enc "eootag" (hash a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag" (hash a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "cfrq" (cat a b t y (hash k))
-           (enc "keytag" (hash a b t y (hash k)) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (hash k) (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y (hash k) (privk "sign" a))
-          (privk "sign" t)))))
-  (label 43)
-  (unrealized (0 0) (0 1))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init5 1)
-    (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-      (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-        (pubk "encr" t)) (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "cfrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))))
-  (label 44)
-  (parent 43)
-  (unrealized (0 1))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init3 2)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "cfrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 45)
-  (parent 44)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 1) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init3 2)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "cfrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a)))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-             (pubk "encr" t)) (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 46)
-  (parent 44)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 2) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init5 3)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "cfrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 47)
-  (parent 44)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y (hash (enc m k))) (r r) (a a) (b b) (t t)
-    (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 2) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init5 3)
-    (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat (cat a b t (hash (enc m k)) (hash k))
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "cfrq" (cat a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t (hash (enc m k)) (hash k)
-            (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a))
-          (privk "sign" t))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r
-             (pubk "encr" t)) (privk "sign" a)))))
-    ((send
-       (cat (cat a b t (hash (enc m k)) (hash k)) (enc m k)
-         (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-           (pubk "encr" t))
-         (enc "eootag" (hash a b t (hash (enc m k)) (hash k))
-           (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-             (pubk "encr" t)) (privk "sign" a))))
-      (recv
-        (enc "eortag" (hash a b t (hash (enc m k)) (hash k))
-          (enc "keytag" (hash a b t (hash (enc m k)) (hash k)) k r-0
-            (pubk "encr" t)) (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (hash (enc m k)) (hash k) (privk "sign" a)))))
-  (label 48)
-  (parent 44)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (r r) (k k) (y (hash (enc m k))))))
-  (origs))
-
-(comment "Nothing left to do")
diff --git a/tst/wang-key-hash.scm b/tst/wang-key-hash.scm
deleted file mode 100644
--- a/tst/wang-key-hash.scm
+++ /dev/null
@@ -1,434 +0,0 @@
-(herald "Wang's Fair Exchange Protocol" (bound 10))
-
-;; CPSA input file to represent
-;; Wang's Fair Exchange Protocol
-
-;; This macro implements the CPSA
-;; convention of regarding a hash as
-;; an asymmetric encryption.  The
-;; decryption key inverse to (pubk
-;; hash) is assumed non-originating
-;; in roles using hashing.
-
-(defmacro (hash x)
-  (enc "h" (cat "h" x)))
-
-;; Wang's encrypted format for the
-;; message payload.  Observe that m,
-;; k get their values from the
-;; like-named messages in the context
-;; where the macro is expanded.
-
-(defmacro (em)
-  (enc m k))
-
-;; The session label L as a fn of
-;; the values that *should be* the
-;; hashes of the encrypted message EM
-;; and the session key K.
-
-(defmacro (l-prime y x)
-  (cat a b t y x))
-
-;; The recipient can check that a
-;; session label has an l-prime where
-;; y is the hash of another parameter.
-;; Hence recipient roles use l-star.
-
-(defmacro (l-star e1 x)
-  (l-prime (hash e1) x))
-
-;; The Evidence of Origin is checked
-;; to be this fn of other parameters
-;; available to the recipient.
-
-(defmacro (eoo-star x e1 e2)
-  (enc (cat "eootag"
-	    (hash (l-star e1 x)) e2)
-       (privk "sign" a)))
-
-;; The Evidence of Receipt is computed
-;; as this fn of other parameters
-;; available to the recipient.
-
-(defmacro (eor-star x e1 e2)
-  (enc (cat "eortag"
-	    (hash (l-star e1 x)) e2)
-       (privk "sign" b)))
-
-;; The Recovery Request as computed by
-;; the recipient.
-
-(defmacro (rr-star x e1 e2)
-  (cat (l-star e1 x) e2
-       (eoo-star x e1 e2)
-       (eor-star x e1 e2)
-       (enc (cat "rcrq" (l-star e1 x) e2)
-            (privk "sign" b))))
-
-;; The Abort Token is checked
-;; to be this fn of other parameters
-;; available to the recipient.
-
-(defmacro (at-star e1 x)
-  (enc (enc "abrq" (l-star e1 x)
-            (privk "sign" a))
-       (privk "sign" t)))
-
-;; How the initiator computes the
-;; encrypted key package:
-
-(defmacro (ek l)
-  (enc (cat "keytag" (hash l) k r)
-       (pubk "encr" t)))
-
-;; The Initiator's computed
-;; version of L.
-
-(defmacro (l)
-  (l-prime (hash (enc m k)) (hash k)))
-
-;; The TTP can check that the session
-;; label L is this fn of other
-;; parameters available to the TTP.
-
-(defmacro (l-prime-prime y)
-  (cat a b t y (hash k)))
-
-;; The TTP can check that the EOO
-;; is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (eoo-prime-prime y)
-  (enc (cat "eootag"
-            (hash (l-prime-prime y))
-	    (ek (l-prime-prime y)))
-       (privk "sign" a)))
-
-;; The TTP can check that the EOR
-;; is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (eor-prime-prime y)
-  (enc (cat "eortag"
-	    (hash (l-prime-prime y))
-	    (ek (l-prime-prime y)))
-       (privk "sign" b)))
-
-;; The TTP can check that the RR
-;; is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (rr-prime-prime y)
-  (cat (l-prime-prime y)
-       (ek (l-prime-prime y))
-       (eoo-prime-prime y)
-       (eor-prime-prime y)
-       (enc "rcrq" (l-prime-prime y)
-	    (ek (l-prime-prime y))
-            (privk "sign" b))))
-
-;; The TTP can check that the Confirmation
-;; Request is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (cf-prime-prime y)
-  (cat (l-prime-prime y) (ek (l-prime-prime y))
-       (eoo-prime-prime y) (eor-prime-prime y)
-       (enc "cfrq" (l-prime-prime y)
-	    (ek (l-prime-prime y))
-            (privk "sign" b))))
-
-;; Defn of Wang's Fair Exchange Protocol.
-;; Closely follows the presentation in the
-;; figures in Section 3.  In the TTP roles,
-;; we have put a dummy send or receive in place
-;; of the state synchronization event to keep
-;; the indices matching the spec.
-
-(defprotocol wang basic
-
-  ;; Successful initiator run with no TTP involvement
-
-  (defrole init1
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (recv (eor-star (hash k) (enc m k) (ek (l))))
-     (send (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;; Aborted initiator run
-
-  (defrole init2
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (enc "abcf"
-                (enc "abrq" (l) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; Initiator run with abort request and forced recovery
-
-  (defrole init3
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (eor-star (hash k) (enc m k) (ek (l)))))
-    (non-orig (privk hash_id)))
-
-  ;; Aborted initiator run, but with EOR received
-
-  (defrole init4
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (recv (eor-star (hash k) (enc m k) (ek (l))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (enc "abcf"
-                (enc "abrq" (l) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; Initiator run with abort requested after EOR received,
-  ;; but recovery forced
-
-  (defrole init5
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (recv (eor-star (hash k) (enc m k) (ek (l))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (eor-star (hash k) (enc m k) (ek (l)))))
-    (non-orig (privk hash_id)))
-
-  ;; Successful responder run with no TTP involvement
-
-  (defrole resp1
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (recv (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (eor-star (hash k) (enc m k) (ek (l))))
-     (recv (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;;Responder run with recovery via TTP
-
-  (defrole resp2
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (recv (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (cat (l) (ek (l)) (eoo-star (hash k) (enc m k) (ek (l)))
-                (eor-star (hash k) (enc m k) (ek (l)))))
-     (send (cat (l) (ek (l)) (eoo-star (hash k) (enc m k) (ek (l)))
-                (eor-star (hash k) (enc m k) (ek (l)))
-                (enc "rcrq" (l) (ek (l)) (privk "sign" b))))
-     (recv (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;; Responder run with recovery request and forced abort
-
-  (defrole resp3
-    (vars (a b t hash_id name) (e1 e2 x mesg))
-    (trace
-     (recv (cat (l-star e1 x) e1 e2 (eoo-star x e1 e2)))
-     (send (cat (l-star e1 x) e2 (eoo-star x e1 e2) (eor-star x e1 e2)))
-     (send (cat (l-star e1 x) e2 (eoo-star x e1 e2) (eor-star x e1 e2)
-                (enc "rcrq" (l-star e1 x) e2 (privk "sign" b))))
-     (recv (enc "abcf"
-                (enc "abrq" (l-star e1 x) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP handles an abort
-
-  (defrole ttp-ab1
-    (vars (a b t hash_id name) (y x mesg))
-    (trace
-     (recv (enc "abrq" (l-prime y x) (privk "sign" a)))
-     (send (cat "sync-abrq"
-                (enc "abrq" (l-prime y x) (privk "sign" a))))
-     (send (enc "abcf"
-                (enc "abrq" (l-prime y x) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP forces recovery in response to an abort request
-
-  (defrole ttp-ab2
-    (vars (a b t hash_id name) (y x e mesg))
-    (trace
-     (recv (enc "abrq" (l-prime y x) (privk "sign" a)))
-     (recv (cat "sync-abrq"
-                (enc "eortag" (hash (l-prime y x)) e
-                     (privk "sign" b))))
-     (send (enc "eortag" (hash (l-prime y x)) e
-                (privk "sign" b))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP handles a recovery
-
-  (defrole ttp-rc1
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (rr-prime-prime y))
-     (send (cat "sync-rc-req"
-                (rr-prime-prime y)))
-     (send (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;; TTP forces abort in response to a recovery request
-
-  (defrole ttp-rc2
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (rr-prime-prime y))
-     (recv (cat "sync-rc-req"
-		(enc "abrq" (l-prime-prime y) (privk "sign" a))))
-     (send (enc "abcf"
-                (enc "abrq" (l-prime-prime y) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP handles a confirm request
-
-  (defrole ttp-cf1
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (cf-prime-prime y))
-     (send (cat "sync-cf-req"
-                (cf-prime-prime y)))
-     (send (enc (cf-prime-prime y) (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP replies with abort token given confirm request
-
-  (defrole ttp-cf2
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (cf-prime-prime y))
-     (recv (cat "sync-cf-req"
-                (enc "abrq"(l-prime-prime y) (privk "sign" a))))
-     (send (enc "abcf"
-                (enc "abrq"(l-prime-prime y) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id))))
-
-;; End of Wang's protocol defn.
-
-;; Two experiments to prove Lemma 4.1
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init1 1 (b b) (t t) (m m) (r r) (k k))
-  (deflistener m)
-  (non-orig
-   (privk "encr" t))
-  (uniq-orig m k)
-  (comment "Experiment 1 to prove Lemma 4.1."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init1 1 (b b) (t t) (m m) (r r) (k k))
-  (deflistener k)
-  (non-orig
-   (privk "encr" t))
-  (uniq-orig m k)
-  (comment "Experiment 2 to prove Lemma 4.1."))
-
-;; We now have three experiments
-;; to prove Lemma 4.2, clause 1.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init1 3 (b b) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" b))
-  (comment "First of three experiments to prove Lemma 4.2, clause 1."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init3 3 (b b) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" b))
-  (comment "Second of three experiments to prove Lemma 4.2, clause 1."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init5 4 (b b) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" b))
-  (comment "Third of three experiments to prove Lemma 4.2, clause 1."))
-
-;; Two experiments to prove 4.2, Clause 2.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand resp1 3 (a a) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" a))
-  (comment
-   "First of two experiments to prove Lemma 4.2, clause 2."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand resp2 4 (a a) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" a))
-  (comment
-   "Second of two experiments to prove Lemma 4.2, clause 2."))
-
-;; Experiment to prove Lemma 4.2, clause 3.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (e1 e2 x mesg))
-  (defstrand resp3 4 (a a) (t t))
-  (non-orig
-   (privk "sign" a))
-  (comment
-   "Experiments to prove Lemma 4.2, clause 3."))
-
-;; One experiment to prove Lemma 4.3, Clause 1.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (y x mesg))
-  (deflistener
-    (enc "abcf" (enc "abrq" (l-prime y x) (privk "sign" a))
-	 (privk "sign" t)))
-  (non-orig
-   (privk "sign" t))
-  (comment
-   "Experiments to prove Lemma 4.3, clause 1."))
-
-;; Three experiments to prove Lemma 4.3, Clause 2.
-
-(defskeleton wang
-  (vars (y x mesg) (a b t name))
-  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
-  (non-orig (privk "sign" a)  (privk "encr" t))
-  (comment
-   "Experiment 1 to prove Lemma 4.3, clause 2."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-  (defstrand ttp-rc2 3 (a a) (b b) (t t))
-  (non-orig (privk "sign" a)  (privk "encr" t))
-  (comment
-   "Experiment 2 to prove Lemma 4.3, clause 2."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-  (defstrand ttp-cf2 3 (a a) (b b) (t t))
-  (non-orig (privk "sign" a)  (privk "encr" t))
-  (comment
-   "Experiment 3 to prove Lemma 4.3, clause 2."))
diff --git a/tst/wang-key-hash.tst b/tst/wang-key-hash.tst
deleted file mode 100644
--- a/tst/wang-key-hash.tst
+++ /dev/null
@@ -1,9525 +0,0 @@
-(herald "Wang's Fair Exchange Protocol" (bound 10))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from wang-key-hash.scm")
-(comment "Strand count bounded at 10")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener m)
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (comment "Experiment 1 to prove Lemma 4.1.")
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))) ((recv m) (send m)))
-  (label 0)
-  (unrealized (1 0))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener m)
-  (precedes ((0 0) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))) ((recv m) (send m)))
-  (label 1)
-  (parent 0)
-  (unrealized (1 0))
-  (origs (m (0 0)) (k (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener m)
-  (deflistener k)
-  (precedes ((0 0) (2 0)) ((2 1) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation nonce-test (added-listener k) m (1 0) (enc m k))
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))) ((recv m) (send m)) ((recv k) (send k)))
-  (label 2)
-  (parent 1)
-  (unrealized (2 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (deflistener m)
-  (deflistener k)
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 2) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation nonce-test (displaced 0 3 init1 3) k (2 0)
-    (enc "keytag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-  (traces ((recv m) (send m)) ((recv k) (send k))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (label 3)
-  (parent 2)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener m)
-  (deflistener k)
-  (defstrand ttp-rc1 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (precedes ((0 0) (3 0)) ((2 1) (1 0)) ((3 2) (2 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation nonce-test (added-strand ttp-rc1 3) k (2 0)
-    (enc "keytag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))) ((recv m) (send m)) ((recv k) (send k))
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "rcrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (send
-        (cat "sync-rc-req"
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (label 4)
-  (parent 2)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (deflistener m)
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation generalization deleted (1 0))
-  (traces ((recv m) (send m))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (label 5)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((1 0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs (m (1 0)) (k (1 0))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener m)
-  (defstrand ttp-rc1 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (precedes ((0 0) (2 0)) ((2 2) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))) ((recv m) (send m))
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "rcrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (send
-        (cat "sync-rc-req"
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (label 6)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs (m (0 0)) (k (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener k)
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (comment "Experiment 2 to prove Lemma 4.1.")
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))) ((recv k) (send k)))
-  (label 7)
-  (unrealized (1 0))
-  (preskeleton)
-  (comment "Not a skeleton"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener k)
-  (precedes ((0 0) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))) ((recv k) (send k)))
-  (label 8)
-  (parent 7)
-  (unrealized (1 0))
-  (origs (m (0 0)) (k (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (deflistener k)
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation nonce-test (displaced 0 2 init1 3) k (1 0)
-    (enc "keytag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-  (traces ((recv k) (send k))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (label 9)
-  (parent 8)
-  (unrealized)
-  (shape)
-  (maps ((1 0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs (m (1 0)) (k (1 0))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (deflistener k)
-  (defstrand ttp-rc1 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (precedes ((0 0) (2 0)) ((2 2) (1 0)))
-  (non-orig (privk "encr" t))
-  (uniq-orig m k)
-  (operation nonce-test (added-strand ttp-rc1 3) k (1 0)
-    (enc "keytag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))) ((recv k) (send k))
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "rcrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (send
-        (cat "sync-rc-req"
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (send (cat k r))))
-  (label 10)
-  (parent 8)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs (m (0 0)) (k (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (non-orig (privk "sign" b))
-  (comment "First of three experiments to prove Lemma 4.2, clause 1.")
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (label 11)
-  (unrealized (0 1))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 1)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp1 2)
-    (enc "eortag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k))))
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-      (privk "sign" b)) (0 1))
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r)))
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (label 12)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp3 2 (e1 (enc m k))
-    (e2
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
-  (precedes ((1 1) (0 1)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp3 2)
-    (enc "eortag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k))))
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-      (privk "sign" b)) (0 1))
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r)))
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))))
-  (label 13)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (non-orig (privk "sign" b))
-  (comment "Second of three experiments to prove Lemma 4.2, clause 1.")
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (label 14)
-  (unrealized (0 2))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 2)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp1 2)
-    (enc "eortag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k))))
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-      (privk "sign" b)) (0 2))
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))))
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (label 15)
-  (parent 14)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp3 2 (e1 (enc m k))
-    (e2
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
-  (precedes ((1 1) (0 2)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp3 2)
-    (enc "eortag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k))))
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-      (privk "sign" b)) (0 2))
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))))
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))))
-  (label 16)
-  (parent 14)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
-  (non-orig (privk "sign" b))
-  (comment "Third of three experiments to prove Lemma 4.2, clause 1.")
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (label 17)
-  (unrealized (0 1) (0 3))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 1)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp1 2)
-    (enc "eortag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k))))
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-      (privk "sign" b)) (0 1))
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))))
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (label 18)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (b t a name) (k skey))
-  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand resp3 2 (e1 (enc m k))
-    (e2
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
-  (precedes ((1 1) (0 1)))
-  (non-orig (privk "sign" b))
-  (operation encryption-test (added-strand resp3 2)
-    (enc "eortag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k))))
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-      (privk "sign" b)) (0 1))
-  (traces
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))))
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))))
-  (label 19)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (non-orig (privk "sign" a))
-  (comment "First of two experiments to prove Lemma 4.2, clause 2.")
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (label 20)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (added-strand init5 1)
-    (enc "eootag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k))))
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-      (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r)))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))))
-  (label 21)
-  (parent 20)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (t t) (m m) (r r) (k k) (b b))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (k k))
-  (non-orig (privk "sign" a))
-  (comment "Second of two experiments to prove Lemma 4.2, clause 2.")
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (label 22)
-  (unrealized (0 0))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (added-strand init5 1)
-    (enc "eootag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k))))
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-      (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r)))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))))
-  (label 23)
-  (parent 22)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (t t) (m m) (r r) (k k) (b b))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (e1 e2 x mesg) (a t b name))
-  (defstrand resp3 4 (e1 e1) (e2 e2) (x x) (a a) (b b) (t t))
-  (non-orig (privk "sign" a))
-  (comment "Experiments to prove Lemma 4.2, clause 3.")
-  (traces
-    ((recv
-       (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-         (enc "eootag"
-           (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-           (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (label 24)
-  (unrealized (0 0) (0 3))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp3 4 (e1 (enc m k))
-    (e2
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (added-strand init5 1)
-    (enc "eootag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k))))
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-      (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))))
-  (label 25)
-  (parent 24)
-  (unrealized (0 3))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp3 4 (e1 (enc m k))
-    (e2
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
-  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 1) (0 3)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init3 2)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 26)
-  (parent 25)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (t t) (b b) (e1 (enc m k))
-        (e2
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-        (x (enc "h" (cat "h" k))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a t b name) (k skey))
-  (defstrand resp3 4 (e1 (enc m k))
-    (e2
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 1) (0 3)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (added-strand init3 2)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a)))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 27)
-  (parent 25)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (t t) (b b) (e1 (enc m k))
-        (e2
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-        (x (enc "h" (cat "h" k))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (a t b name) (k skey))
-  (defstrand resp3 4 (e1 (enc m k))
-    (e2
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
-  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 2) (0 3)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init5 3)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 28)
-  (parent 25)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (t t) (b b) (e1 (enc m k))
-        (e2
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-        (x (enc "h" (cat "h" k))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a t b name) (k skey))
-  (defstrand resp3 4 (e1 (enc m k))
-    (e2
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 2) (0 3)))
-  (non-orig (privk "sign" a))
-  (operation encryption-test (added-strand init5 3)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a)))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 29)
-  (parent 25)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (t t) (b b) (e1 (enc m k))
-        (e2
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
-        (x (enc "h" (cat "h" k))))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (y x mesg) (a b t name))
-  (deflistener
-    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-      (privk "sign" t)))
-  (non-orig (privk "sign" t))
-  (comment "Experiments to prove Lemma 4.3, clause 1.")
-  (traces
-    ((recv
-       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-         (privk "sign" t)))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (label 30)
-  (unrealized (0 0))
-  (origs)
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wang
-  (vars (y x mesg) (a b t name))
-  (deflistener
-    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-      (privk "sign" t)))
-  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "sign" t))
-  (operation encryption-test (added-strand ttp-ab1 3)
-    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-      (privk "sign" t)) (0 0))
-  (traces
-    ((recv
-       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-         (privk "sign" t)))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t))))
-    ((recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (label 31)
-  (parent 30)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (y y) (x x))))
-  (origs))
-
-(defskeleton wang
-  (vars (y mesg) (r text) (a b t name) (k skey))
-  (deflistener
-    (enc "abcf"
-      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-      (privk "sign" t)))
-  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "sign" t))
-  (operation encryption-test (added-strand ttp-rc2 3)
-    (enc "abcf"
-      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-      (privk "sign" t)) (0 0))
-  (traces
-    ((recv
-       (enc "abcf"
-         (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-         (privk "sign" t)))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))
-    ((recv
-       (cat (cat a b t y (enc "h" (cat "h" k)))
-         (enc "keytag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           k r (pubk "encr" t))
-         (enc "eootag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (label 32)
-  (parent 30)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (y y) (x (enc "h" (cat "h" k))))))
-  (origs))
-
-(defskeleton wang
-  (vars (y mesg) (r text) (a b t name) (k skey))
-  (deflistener
-    (enc "abcf"
-      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-      (privk "sign" t)))
-  (defstrand ttp-cf2 3 (y y) (r r) (a a) (b b) (t t) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "sign" t))
-  (operation encryption-test (added-strand ttp-cf2 3)
-    (enc "abcf"
-      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-      (privk "sign" t)) (0 0))
-  (traces
-    ((recv
-       (enc "abcf"
-         (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-         (privk "sign" t)))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))
-    ((recv
-       (cat (cat a b t y (enc "h" (cat "h" k)))
-         (enc "keytag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           k r (pubk "encr" t))
-         (enc "eootag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (label 33)
-  (parent 30)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (y y) (x (enc "h" (cat "h" k))))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (y x mesg) (a b t name))
-  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (comment "Experiment 1 to prove Lemma 4.3, clause 2.")
-  (traces
-    ((recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (label 34)
-  (unrealized (0 0))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-ab1 3 (y (enc "h" (cat "h" (enc m k))))
-    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
-  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init3 2)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-         (enc "h" (cat "h" k)) (privk "sign" a)))
-      (send
-        (cat "sync-abrq"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 35)
-  (parent 34)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((y (enc "h" (cat "h" (enc m k)))) (x (enc "h" (cat "h" k))) (a a)
-        (b b) (t t))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-ab1 3 (y (enc "h" (cat "h" (enc m k))))
-    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
-  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 2) (0 0)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init5 3)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-         (enc "h" (cat "h" k)) (privk "sign" a)))
-      (send
-        (cat "sync-abrq"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 36)
-  (parent 34)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((y (enc "h" (cat "h" (enc m k)))) (x (enc "h" (cat "h" k))) (a a)
-        (b b) (t t))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (y mesg) (r text) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (k k))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (comment "Experiment 2 to prove Lemma 4.3, clause 2.")
-  (traces
-    ((recv
-       (cat (cat a b t y (enc "h" (cat "h" k)))
-         (enc "keytag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           k r (pubk "encr" t))
-         (enc "eootag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (label 37)
-  (unrealized (0 0) (0 1))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init5 1)
-    (enc "eootag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k))))
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-      (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "rcrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))))
-  (label 38)
-  (parent 37)
-  (unrealized (0 1))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init3 2)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "rcrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 39)
-  (parent 38)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (b b) (t t) (r r) (k k)
-        (y (enc "h" (cat "h" (enc m k)))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 1) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init3 2)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "rcrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a)))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 40)
-  (parent 38)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (b b) (t t) (r r) (k k)
-        (y (enc "h" (cat "h" (enc m k)))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 2) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init5 3)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "rcrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 41)
-  (parent 38)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (b b) (t t) (r r) (k k)
-        (y (enc "h" (cat "h" (enc m k)))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a b t name) (k skey))
-  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 2) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init5 3)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "rcrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a)))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 42)
-  (parent 38)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (b b) (t t) (r r) (k k)
-        (y (enc "h" (cat "h" (enc m k)))))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wang basic
-  (defrole init1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (send (cat k r))))
-  (defrole init2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init3
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole init4
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
-  (defrole init5
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))))
-  (defrole resp1
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b))) (recv (cat k r))))
-  (defrole resp2
-    (vars (a b t name) (m data) (r text) (k skey))
-    (trace
-      (recv
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k))) (enc m k)
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))))
-      (send
-        (cat
-          (cat a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (enc "eootag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b))
-          (enc "rcrq"
-            (cat a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h"
-                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-            (privk "sign" b)))) (recv (cat k r))))
-  (defrole resp3
-    (vars (a b t name) (e1 e2 x mesg))
-    (trace
-      (recv
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))))
-      (send
-        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
-          (enc "eootag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
-            (privk "sign" b))
-          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
-            (privk "sign" b))))
-      (recv
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab1
-    (vars (a b t name) (y x mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
-      (send
-        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-ab2
-    (vars (a b t name) (y x e mesg))
-    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
-      (recv
-        (cat "sync-abrq"
-          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-            (privk "sign" b))))
-      (send
-        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
-          (privk "sign" b)))))
-  (defrole ttp-rc1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
-  (defrole ttp-rc2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-rc-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (defrole ttp-cf1
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (send
-        (enc (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
-  (defrole ttp-cf2
-    (vars (a b t name) (r text) (k skey) (y mesg))
-    (trace
-      (recv
-        (cat (cat a b t y (enc "h" (cat "h" k)))
-          (enc "keytag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-            (pubk "encr" t))
-          (enc "eootag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" a))
-          (enc "eortag"
-            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))
-          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-            (enc "keytag"
-              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-              (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t))))))
-
-(defskeleton wang
-  (vars (y mesg) (r text) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y y) (r r) (a a) (b b) (t t) (k k))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (comment "Experiment 3 to prove Lemma 4.3, clause 2.")
-  (traces
-    ((recv
-       (cat (cat a b t y (enc "h" (cat "h" k)))
-         (enc "keytag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           k r (pubk "encr" t))
-         (enc "eootag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" a))
-         (enc "eortag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" b))
-         (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
-             (pubk "encr" t)) (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
-          (privk "sign" t)))))
-  (label 43)
-  (unrealized (0 0) (0 1))
-  (origs)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init5 1)
-    (enc "eootag"
-      (enc "h"
-        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k))))
-      (enc "keytag"
-        (enc "h"
-          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-      (privk "sign" a)) (0 0))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "cfrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))))
-  (label 44)
-  (parent 43)
-  (unrealized (0 1))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init3 2)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "cfrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 45)
-  (parent 44)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (b b) (t t) (r r) (k k)
-        (y (enc "h" (cat "h" (enc m k)))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 1) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init3 2)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "cfrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a)))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-           (privk "sign" a))))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 46)
-  (parent 44)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (b b) (t t) (r r) (k k)
-        (y (enc "h" (cat "h" (enc m k)))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r text) (m data) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((1 2) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (displaced 1 2 init5 3)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "cfrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 47)
-  (parent 44)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (b b) (t t) (r r) (k k)
-        (y (enc "h" (cat "h" (enc m k)))))))
-  (origs))
-
-(defskeleton wang
-  (vars (r r-0 text) (m data) (a b t name) (k skey))
-  (defstrand ttp-cf2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
-    (b b) (t t) (k k))
-  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
-  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)) ((2 2) (0 1)))
-  (non-orig (privk "encr" t) (privk "sign" a))
-  (operation encryption-test (added-strand init5 3)
-    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
-  (traces
-    ((recv
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a))
-         (enc "eortag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))
-         (enc "cfrq"
-           (cat a b t (enc "h" (cat "h" (enc m k)))
-             (enc "h" (cat "h" k)))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" b))))
-      (recv
-        (cat "sync-cf-req"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a))))
-      (send
-        (enc "abcf"
-          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
-           (privk "sign" a)))))
-    ((send
-       (cat
-         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
-         (enc m k)
-         (enc "keytag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-         (enc "eootag"
-           (enc "h"
-             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-               (enc "h" (cat "h" k))))
-           (enc "keytag"
-             (enc "h"
-               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-           (privk "sign" a))))
-      (recv
-        (enc "eortag"
-          (enc "h"
-            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-              (enc "h" (cat "h" k))))
-          (enc "keytag"
-            (enc "h"
-              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
-                (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
-          (privk "sign" b)))
-      (send
-        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
-          (enc "h" (cat "h" k)) (privk "sign" a)))))
-  (label 48)
-  (parent 44)
-  (unrealized)
-  (shape)
-  (maps
-    ((0)
-      ((a a) (b b) (t t) (r r) (k k)
-        (y (enc "h" (cat "h" (enc m k)))))))
-  (origs))
-
-(comment "Nothing left to do")
diff --git a/tst/wang.lisp b/tst/wang.lisp
deleted file mode 100644
--- a/tst/wang.lisp
+++ /dev/null
@@ -1,434 +0,0 @@
-(herald "Wang's Fair Exchange Protocol" (bound 10))
-
-;; CPSA input file to represent
-;; Wang's Fair Exchange Protocol
-
-;; This macro implements the CPSA
-;; convention of regarding a hash as
-;; an asymmetric encryption.  The
-;; decryption key inverse to (pubk
-;; hash) is assumed non-originating
-;; in roles using hashing.
-
-(defmacro (hash x)
-  (enc x (pubk hash_id)))
-
-;; Wang's encrypted format for the
-;; message payload.  Observe that m,
-;; k get their values from the
-;; like-named messages in the context
-;; where the macro is expanded.
-
-(defmacro (em)
-  (enc m k))
-
-;; The session label L as a fn of
-;; the values that *should be* the
-;; hashes of the encrypted message EM
-;; and the session key K.
-
-(defmacro (l-prime y x)
-  (cat a b t y x))
-
-;; The recipient can check that a
-;; session label has an l-prime where
-;; y is the hash of another parameter.
-;; Hence recipient roles use l-star.
-
-(defmacro (l-star e1 x)
-  (l-prime (hash e1) x))
-
-;; The Evidence of Origin is checked
-;; to be this fn of other parameters
-;; available to the recipient.
-
-(defmacro (eoo-star x e1 e2)
-  (enc (cat "eootag"
-	    (hash (l-star e1 x)) e2)
-       (privk "sign" a)))
-
-;; The Evidence of Receipt is computed
-;; as this fn of other parameters
-;; available to the recipient.
-
-(defmacro (eor-star x e1 e2)
-  (enc (cat "eortag"
-	    (hash (l-star e1 x)) e2)
-       (privk "sign" b)))
-
-;; The Recovery Request as computed by
-;; the recipient.
-
-(defmacro (rr-star x e1 e2)
-  (cat (l-star e1 x) e2
-       (eoo-star x e1 e2)
-       (eor-star x e1 e2)
-       (enc (cat "rcrq" (l-star e1 x) e2)
-            (privk "sign" b))))
-
-;; The Abort Token is checked
-;; to be this fn of other parameters
-;; available to the recipient.
-
-(defmacro (at-star e1 x)
-  (enc (enc "abrq" (l-star e1 x)
-            (privk "sign" a))
-       (privk "sign" t)))
-
-;; How the initiator computes the
-;; encrypted key package:
-
-(defmacro (ek l)
-  (enc (cat "keytag" (hash l) k r)
-       (pubk "encr" t)))
-
-;; The Initiator's computed
-;; version of L.
-
-(defmacro (l)
-  (l-prime (hash (enc m k)) (hash k)))
-
-;; The TTP can check that the session
-;; label L is this fn of other
-;; parameters available to the TTP.
-
-(defmacro (l-prime-prime y)
-  (cat a b t y (hash k)))
-
-;; The TTP can check that the EOO
-;; is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (eoo-prime-prime y)
-  (enc (cat "eootag"
-            (hash (l-prime-prime y))
-	    (ek (l-prime-prime y)))
-       (privk "sign" a)))
-
-;; The TTP can check that the EOR
-;; is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (eor-prime-prime y)
-  (enc (cat "eortag"
-	    (hash (l-prime-prime y))
-	    (ek (l-prime-prime y)))
-       (privk "sign" b)))
-
-;; The TTP can check that the RR
-;; is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (rr-prime-prime y)
-  (cat (l-prime-prime y)
-       (ek (l-prime-prime y))
-       (eoo-prime-prime y)
-       (eor-prime-prime y)
-       (enc "rcrq" (l-prime-prime y)
-	    (ek (l-prime-prime y))
-            (privk "sign" b))))
-
-;; The TTP can check that the Confirmation
-;; Request is this fn of other parameters
-;; available to the TTP.
-
-(defmacro (cf-prime-prime y)
-  (cat (l-prime-prime y) (ek (l-prime-prime y))
-       (eoo-prime-prime y) (eor-prime-prime y)
-       (enc "cfrq" (l-prime-prime y)
-	    (ek (l-prime-prime y))
-            (privk "sign" b))))
-
-;; Defn of Wang's Fair Exchange Protocol.
-;; Closely follows the presentation in the
-;; figures in Section 3.  In the TTP roles,
-;; we have put a dummy send or receive in place
-;; of the state synchronization event to keep
-;; the indices matching the spec.
-
-(defprotocol wang basic
-
-  ;; Successful initiator run with no TTP involvement
-
-  (defrole init1
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (recv (eor-star (hash k) (enc m k) (ek (l))))
-     (send (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;; Aborted initiator run
-
-  (defrole init2
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (enc "abcf"
-                (enc "abrq" (l) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; Initiator run with abort request and forced recovery
-
-  (defrole init3
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (eor-star (hash k) (enc m k) (ek (l)))))
-    (non-orig (privk hash_id)))
-
-  ;; Aborted initiator run, but with EOR received
-
-  (defrole init4
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (recv (eor-star (hash k) (enc m k) (ek (l))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (enc "abcf"
-                (enc "abrq" (l) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; Initiator run with abort requested after EOR received,
-  ;; but recovery forced
-
-  (defrole init5
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (send (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (recv (eor-star (hash k) (enc m k) (ek (l))))
-     (send (enc "abrq" (l) (privk "sign" a)))
-     (recv (eor-star (hash k) (enc m k) (ek (l)))))
-    (non-orig (privk hash_id)))
-
-  ;; Successful responder run with no TTP involvement
-
-  (defrole resp1
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (recv (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (eor-star (hash k) (enc m k) (ek (l))))
-     (recv (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;;Responder run with recovery via TTP
-
-  (defrole resp2
-    (vars (a b t hash_id name) (m data) (r text) (k skey))
-    (trace
-     (recv (cat (l) (enc m k) (ek (l))
-                (eoo-star (hash k) (enc m k) (ek (l)))))
-     (send (cat (l) (ek (l)) (eoo-star (hash k) (enc m k) (ek (l)))
-                (eor-star (hash k) (enc m k) (ek (l)))))
-     (send (cat (l) (ek (l)) (eoo-star (hash k) (enc m k) (ek (l)))
-                (eor-star (hash k) (enc m k) (ek (l)))
-                (enc "rcrq" (l) (ek (l)) (privk "sign" b))))
-     (recv (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;; Responder run with recovery request and forced abort
-
-  (defrole resp3
-    (vars (a b t hash_id name) (e1 e2 x mesg))
-    (trace
-     (recv (cat (l-star e1 x) e1 e2 (eoo-star x e1 e2)))
-     (send (cat (l-star e1 x) e2 (eoo-star x e1 e2) (eor-star x e1 e2)))
-     (send (cat (l-star e1 x) e2 (eoo-star x e1 e2) (eor-star x e1 e2)
-                (enc "rcrq" (l-star e1 x) e2 (privk "sign" b))))
-     (recv (enc "abcf"
-                (enc "abrq" (l-star e1 x) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP handles an abort
-
-  (defrole ttp-ab1
-    (vars (a b t hash_id name) (y x mesg))
-    (trace
-     (recv (enc "abrq" (l-prime y x) (privk "sign" a)))
-     (send (cat "sync-abrq"
-                (enc "abrq" (l-prime y x) (privk "sign" a))))
-     (send (enc "abcf"
-                (enc "abrq" (l-prime y x) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP forces recovery in response to an abort request
-
-  (defrole ttp-ab2
-    (vars (a b t hash_id name) (y x e mesg))
-    (trace
-     (recv (enc "abrq" (l-prime y x) (privk "sign" a)))
-     (recv (cat "sync-abrq"
-                (enc "eortag" (hash (l-prime y x)) e
-                     (privk "sign" b))))
-     (send (enc "eortag" (hash (l-prime y x)) e
-                (privk "sign" b))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP handles a recovery
-
-  (defrole ttp-rc1
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (rr-prime-prime y))
-     (send (cat "sync-rc-req"
-                (rr-prime-prime y)))
-     (send (cat k r)))
-    (non-orig (privk hash_id)))
-
-  ;; TTP forces abort in response to a recovery request
-
-  (defrole ttp-rc2
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (rr-prime-prime y))
-     (recv (cat "sync-rc-req"
-		(enc "abrq" (l-prime-prime y) (privk "sign" a))))
-     (send (enc "abcf"
-                (enc "abrq" (l-prime-prime y) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP handles a confirm request
-
-  (defrole ttp-cf1
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (cf-prime-prime y))
-     (send (cat "sync-cf-req"
-                (cf-prime-prime y)))
-     (send (enc (cf-prime-prime y) (privk "sign" t))))
-    (non-orig (privk hash_id)))
-
-  ;; TTP replies with abort token given confirm request
-
-  (defrole ttp-cf2
-    (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-    (trace
-     (recv (cf-prime-prime y))
-     (recv (cat "sync-cf-req"
-                (enc "abrq"(l-prime-prime y) (privk "sign" a))))
-     (send (enc "abcf"
-                (enc "abrq"(l-prime-prime y) (privk "sign" a))
-                (privk "sign" t))))
-    (non-orig (privk hash_id))))
-
-;; End of Wang's protocol defn.
-
-;; Two experiments to prove Lemma 4.1
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init1 1 (b b) (t t) (m m) (r r) (k k))
-  (deflistener m)
-  (non-orig
-   (privk "encr" t))
-  (uniq-orig m k)
-  (comment "Experiment 1 to prove Lemma 4.1."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init1 1 (b b) (t t) (m m) (r r) (k k))
-  (deflistener k)
-  (non-orig
-   (privk "encr" t))
-  (uniq-orig m k)
-  (comment "Experiment 2 to prove Lemma 4.1."))
-
-;; We now have three experiments
-;; to prove Lemma 4.2, clause 1.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init1 3 (b b) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" b))
-  (comment "First of three experiments to prove Lemma 4.2, clause 1."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init3 3 (b b) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" b))
-  (comment "Second of three experiments to prove Lemma 4.2, clause 1."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand init5 4 (b b) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" b))
-  (comment "Third of three experiments to prove Lemma 4.2, clause 1."))
-
-;; Two experiments to prove 4.2, Clause 2.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand resp1 3 (a a) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" a))
-  (comment
-   "First of two experiments to prove Lemma 4.2, clause 2."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (m data) (r text) (k skey))
-  (defstrand resp2 4 (a a) (t t) (m m) (r r) (k k))
-  (non-orig
-   (privk "sign" a))
-  (comment
-   "Second of two experiments to prove Lemma 4.2, clause 2."))
-
-;; Experiment to prove Lemma 4.2, clause 3.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (e1 e2 x mesg))
-  (defstrand resp3 4 (a a) (t t))
-  (non-orig
-   (privk "sign" a))
-  (comment
-   "Experiments to prove Lemma 4.2, clause 3."))
-
-;; One experiment to prove Lemma 4.3, Clause 1.
-
-(defskeleton wang
-  (vars (a b t hash_id name) (y x mesg))
-  (deflistener
-    (enc "abcf" (enc "abrq" (l-prime y x) (privk "sign" a))
-	 (privk "sign" t)))
-  (non-orig
-   (privk "sign" t))
-  (comment
-   "Experiments to prove Lemma 4.3, clause 1."))
-
-;; Three experiments to prove Lemma 4.3, Clause 2.
-
-(defskeleton wang
-  (vars (y x mesg) (a b t name))
-  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
-  (non-orig (privk "sign" a)  (privk "encr" t))
-  (comment
-   "Experiment 1 to prove Lemma 4.3, clause 2."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-  (defstrand ttp-rc2 3 (a a) (b b) (t t))
-  (non-orig (privk "sign" a)  (privk "encr" t))
-  (comment
-   "Experiment 2 to prove Lemma 4.3, clause 2."))
-
-(defskeleton wang
-  (vars (a b t hash_id name) (r text) (k skey) (y mesg))
-  (defstrand ttp-cf2 3 (a a) (b b) (t t))
-  (non-orig (privk "sign" a)  (privk "encr" t))
-  (comment
-   "Experiment 3 to prove Lemma 4.3, clause 2."))
diff --git a/tst/wang.tst b/tst/wang.tst
new file mode 100644
--- /dev/null
+++ b/tst/wang.tst
@@ -0,0 +1,7492 @@
+(comment "CPSA 3.1.0")
+(comment "All input read from wang.scm")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (deflistener m)
+  (non-orig (privk hash) (privk "encr" t))
+  (uniq-orig m k)
+  (comment "Experiment 1 to prove Lemma 4.1.")
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((recv m) (send m)))
+  (label 0)
+  (unrealized (1 0))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (deflistener m)
+  (precedes ((0 0) (1 0)))
+  (non-orig (privk hash) (privk "encr" t))
+  (uniq-orig m k)
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((recv m) (send m)))
+  (label 1)
+  (parent 0)
+  (unrealized (1 0))
+  (origs (m (0 0)) (k (0 0)))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (deflistener m)
+  (deflistener k)
+  (precedes ((0 0) (2 0)) ((2 1) (1 0)))
+  (non-orig (privk hash) (privk "encr" t))
+  (uniq-orig m k)
+  (operation nonce-test (added-listener k) m (1 0) (enc m k)
+    (enc "keytag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash)) k r (pubk "encr" t))
+    (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (pubk hash)) (enc (enc m k) (pubk hash)))
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((recv m) (send m)) ((recv k) (send k)))
+  (label 2)
+  (parent 1)
+  (unrealized (2 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (deflistener m)
+  (deflistener k)
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 1) (0 0)) ((2 2) (1 0)))
+  (non-orig (privk hash) (privk "encr" t))
+  (uniq-orig m k)
+  (operation nonce-test (displaced 0 3 init1 3) k (2 0)
+    (enc k (pubk hash))
+    (enc "keytag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash)) k r (pubk "encr" t))
+    (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (pubk hash)))
+  (traces ((recv m) (send m)) ((recv k) (send k))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r))))
+  (label 3)
+  (parent 2)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (deflistener m)
+  (deflistener k)
+  (defstrand ttp-rc1 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (precedes ((0 0) (3 0)) ((2 1) (1 0)) ((3 2) (2 0)))
+  (non-orig (privk hash) (privk "encr" t))
+  (uniq-orig m k)
+  (operation nonce-test (added-strand ttp-rc1 3) k (2 0)
+    (enc k (pubk hash))
+    (enc "keytag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash)) k r (pubk "encr" t))
+    (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (pubk hash)))
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((recv m) (send m)) ((recv k) (send k))
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req"
+          (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send (cat k r))))
+  (label 4)
+  (parent 2)
+  (unrealized)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (deflistener m)
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk hash) (privk "encr" t))
+  (uniq-orig m k)
+  (operation generalization deleted (1 0))
+  (traces ((recv m) (send m))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r))))
+  (label 5)
+  (parent 3)
+  (unrealized)
+  (shape)
+  (maps ((1 0) ((b b) (t t) (m m) (r r) (k k) (a a) (hash hash))))
+  (origs (m (1 0)) (k (1 0))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (deflistener m)
+  (defstrand ttp-rc1 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (precedes ((0 0) (2 0)) ((2 2) (1 0)))
+  (non-orig (privk hash) (privk "encr" t))
+  (uniq-orig m k)
+  (operation generalization deleted (2 0))
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((recv m) (send m))
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req"
+          (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send (cat k r))))
+  (label 6)
+  (parent 4)
+  (unrealized)
+  (shape)
+  (maps ((0 1) ((b b) (t t) (m m) (r r) (k k) (a a) (hash hash))))
+  (origs (m (0 0)) (k (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (deflistener k)
+  (non-orig (privk hash) (privk "encr" t))
+  (uniq-orig m k)
+  (comment "Experiment 2 to prove Lemma 4.1.")
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((recv k) (send k)))
+  (label 7)
+  (unrealized (1 0))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (deflistener k)
+  (precedes ((0 0) (1 0)))
+  (non-orig (privk hash) (privk "encr" t))
+  (uniq-orig m k)
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((recv k) (send k)))
+  (label 8)
+  (parent 7)
+  (unrealized (1 0))
+  (origs (m (0 0)) (k (0 0)))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (deflistener k)
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk hash) (privk "encr" t))
+  (uniq-orig m k)
+  (operation nonce-test (displaced 0 2 init1 3) k (1 0)
+    (enc k (pubk hash))
+    (enc "keytag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash)) k r (pubk "encr" t))
+    (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (pubk hash)))
+  (traces ((recv k) (send k))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r))))
+  (label 9)
+  (parent 8)
+  (unrealized)
+  (shape)
+  (maps ((1 0) ((b b) (t t) (m m) (r r) (k k) (a a) (hash hash))))
+  (origs (m (1 0)) (k (1 0))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (deflistener k)
+  (defstrand ttp-rc1 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (precedes ((0 0) (2 0)) ((2 2) (1 0)))
+  (non-orig (privk hash) (privk "encr" t))
+  (uniq-orig m k)
+  (operation nonce-test (added-strand ttp-rc1 3) k (1 0)
+    (enc k (pubk hash))
+    (enc "keytag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash)) k r (pubk "encr" t))
+    (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (pubk hash)))
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((recv k) (send k))
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req"
+          (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send (cat k r))))
+  (label 10)
+  (parent 8)
+  (unrealized)
+  (shape)
+  (maps ((0 1) ((b b) (t t) (m m) (r r) (k k) (a a) (hash hash))))
+  (origs (m (0 0)) (k (0 0))))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (non-orig (privk hash) (privk "sign" b))
+  (comment "First of three experiments to prove Lemma 4.2, clause 1.")
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r))))
+  (label 11)
+  (unrealized (0 1))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 1) (0 1)))
+  (non-orig (privk hash) (privk "sign" b))
+  (operation encryption-test (added-strand resp1 2)
+    (enc "eortag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash))
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)) (0 1))
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))))
+  (label 12)
+  (parent 11)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a) (hash hash))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand resp3 2 (e1 (enc m k))
+    (e2
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t))) (x (enc k (pubk hash)))
+    (a a) (b b) (t t) (hash hash))
+  (precedes ((1 1) (0 1)))
+  (non-orig (privk hash) (privk "sign" b))
+  (operation encryption-test (added-strand resp3 2)
+    (enc "eortag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash))
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)) (0 1))
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))))
+  (label 13)
+  (parent 11)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a) (hash hash))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (non-orig (privk hash) (privk "sign" b))
+  (comment "Second of three experiments to prove Lemma 4.2, clause 1.")
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))))
+  (label 14)
+  (unrealized (0 2))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 1) (0 2)))
+  (non-orig (privk hash) (privk "sign" b))
+  (operation encryption-test (added-strand resp1 2)
+    (enc "eortag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash))
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)) (0 2))
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))))
+  (label 15)
+  (parent 14)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a) (hash hash))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand resp3 2 (e1 (enc m k))
+    (e2
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t))) (x (enc k (pubk hash)))
+    (a a) (b b) (t t) (hash hash))
+  (precedes ((1 1) (0 2)))
+  (non-orig (privk hash) (privk "sign" b))
+  (operation encryption-test (added-strand resp3 2)
+    (enc "eortag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash))
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)) (0 2))
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))))
+  (label 16)
+  (parent 14)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a) (hash hash))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (non-orig (privk hash) (privk "sign" b))
+  (comment "Third of three experiments to prove Lemma 4.2, clause 1.")
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))))
+  (label 17)
+  (unrealized (0 1) (0 3))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 1) (0 1)))
+  (non-orig (privk hash) (privk "sign" b))
+  (operation encryption-test (added-strand resp1 2)
+    (enc "eortag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash))
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)) (0 1))
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))))
+  (label 18)
+  (parent 17)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a) (hash hash))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (b t a hash name) (k skey))
+  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand resp3 2 (e1 (enc m k))
+    (e2
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t))) (x (enc k (pubk hash)))
+    (a a) (b b) (t t) (hash hash))
+  (precedes ((1 1) (0 1)))
+  (non-orig (privk hash) (privk "sign" b))
+  (operation encryption-test (added-strand resp3 2)
+    (enc "eortag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash))
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)) (0 1))
+  (traces
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))))
+  (label 19)
+  (parent 17)
+  (unrealized)
+  (shape)
+  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a) (hash hash))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b hash name) (k skey))
+  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (non-orig (privk hash) (privk "sign" a))
+  (comment "First of two experiments to prove Lemma 4.2, clause 2.")
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r))))
+  (label 20)
+  (unrealized (0 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b hash name) (k skey))
+  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)))
+  (non-orig (privk hash) (privk "sign" a))
+  (operation encryption-test (added-strand init5 1)
+    (enc "eootag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash))
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))))
+  (label 21)
+  (parent 20)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (t t) (m m) (r r) (k k) (b b) (hash hash))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b hash name) (k skey))
+  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (non-orig (privk hash) (privk "sign" a))
+  (comment "Second of two experiments to prove Lemma 4.2, clause 2.")
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r))))
+  (label 22)
+  (unrealized (0 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b hash name) (k skey))
+  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)))
+  (non-orig (privk hash) (privk "sign" a))
+  (operation encryption-test (added-strand init5 1)
+    (enc "eootag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash))
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))))
+  (label 23)
+  (parent 22)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (t t) (m m) (r r) (k k) (b b) (hash hash))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (e1 e2 x mesg) (a t b hash name))
+  (defstrand resp3 4 (e1 e1) (e2 e2) (x x) (a a) (b b) (t t)
+    (hash hash))
+  (non-orig (privk hash) (privk "sign" a))
+  (comment "Experiments to prove Lemma 4.2, clause 3.")
+  (traces
+    ((recv
+       (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+         (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash)) e2
+           (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t)))))
+  (label 24)
+  (unrealized (0 0) (0 3))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b hash name) (k skey))
+  (defstrand resp3 4 (e1 (enc m k))
+    (e2
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t))) (x (enc k (pubk hash)))
+    (a a) (b b) (t t) (hash hash))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)))
+  (non-orig (privk hash) (privk "sign" a))
+  (operation encryption-test (added-strand init5 1)
+    (enc "eootag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash))
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))))
+  (label 25)
+  (parent 24)
+  (unrealized (0 3))
+  (comment "4 in cohort - 4 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b hash name) (k skey))
+  (defstrand resp3 4 (e1 (enc m k))
+    (e2
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t))) (x (enc k (pubk hash)))
+    (a a) (b b) (t t) (hash hash))
+  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((1 1) (0 3)))
+  (non-orig (privk hash) (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init3 2)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 3))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 26)
+  (parent 25)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (t t) (b b) (hash hash) (e1 (enc m k))
+        (e2
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)))
+        (x (enc k (pubk hash))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a t b hash name) (k skey))
+  (defstrand resp3 4 (e1 (enc m k))
+    (e2
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t))) (x (enc k (pubk hash)))
+    (a a) (b b) (t t) (hash hash))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((2 1) (0 3)))
+  (non-orig (privk hash) (privk "sign" a))
+  (operation encryption-test (added-strand init3 2)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 3))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r-0 (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r-0 (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 27)
+  (parent 25)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (t t) (b b) (hash hash) (e1 (enc m k))
+        (e2
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)))
+        (x (enc k (pubk hash))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (a t b hash name) (k skey))
+  (defstrand resp3 4 (e1 (enc m k))
+    (e2
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t))) (x (enc k (pubk hash)))
+    (a a) (b b) (t t) (hash hash))
+  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((1 2) (0 3)))
+  (non-orig (privk hash) (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init5 3)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 3))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 28)
+  (parent 25)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (t t) (b b) (hash hash) (e1 (enc m k))
+        (e2
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)))
+        (x (enc k (pubk hash))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a t b hash name) (k skey))
+  (defstrand resp3 4 (e1 (enc m k))
+    (e2
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t))) (x (enc k (pubk hash)))
+    (a a) (b b) (t t) (hash hash))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((2 2) (0 3)))
+  (non-orig (privk hash) (privk "sign" a))
+  (operation encryption-test (added-strand init5 3)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 3))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r-0 (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r-0 (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r-0 (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 29)
+  (parent 25)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (t t) (b b) (hash hash) (e1 (enc m k))
+        (e2
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)))
+        (x (enc k (pubk hash))))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (y x mesg) (a b t name))
+  (deflistener
+    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+      (privk "sign" t)))
+  (non-orig (privk "sign" t))
+  (comment "Experiments to prove Lemma 4.3, clause 1.")
+  (traces
+    ((recv
+       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+         (privk "sign" t)))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (label 30)
+  (unrealized (0 0))
+  (origs)
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton wang
+  (vars (y x mesg) (a b t name))
+  (deflistener
+    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+      (privk "sign" t)))
+  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk "sign" t))
+  (operation encryption-test (added-strand ttp-ab1 3)
+    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+      (privk "sign" t)) (0 0))
+  (traces
+    ((recv
+       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+         (privk "sign" t)))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t))))
+    ((recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (label 31)
+  (parent 30)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (y y) (x x))))
+  (origs))
+
+(defskeleton wang
+  (vars (y mesg) (r text) (a b t hash name) (k skey))
+  (deflistener
+    (enc "abcf"
+      (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+      (privk "sign" t)))
+  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk hash) (privk "sign" t))
+  (operation encryption-test (added-strand ttp-rc2 3)
+    (enc "abcf"
+      (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+      (privk "sign" t)) (0 0))
+  (traces
+    ((recv
+       (enc "abcf"
+         (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+         (privk "sign" t)))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    ((recv
+       (cat (cat a b t y (enc k (pubk hash)))
+         (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k r
+           (pubk "encr" t))
+         (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t)))))
+  (label 32)
+  (parent 30)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (y y) (x (enc k (pubk hash))))))
+  (origs))
+
+(defskeleton wang
+  (vars (y mesg) (r text) (a b t hash name) (k skey))
+  (deflistener
+    (enc "abcf"
+      (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+      (privk "sign" t)))
+  (defstrand ttp-cf2 3 (y y) (r r) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk hash) (privk "sign" t))
+  (operation encryption-test (added-strand ttp-cf2 3)
+    (enc "abcf"
+      (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+      (privk "sign" t)) (0 0))
+  (traces
+    ((recv
+       (enc "abcf"
+         (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+         (privk "sign" t)))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    ((recv
+       (cat (cat a b t y (enc k (pubk hash)))
+         (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k r
+           (pubk "encr" t))
+         (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t)))))
+  (label 33)
+  (parent 30)
+  (unrealized)
+  (shape)
+  (maps ((0) ((a a) (b b) (t t) (y y) (x (enc k (pubk hash))))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (y x mesg) (a b t name))
+  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
+  (non-orig (privk "encr" t) (privk "sign" a))
+  (comment "Experiment 1 to prove Lemma 4.3, clause 2.")
+  (traces
+    ((recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (label 34)
+  (unrealized (0 0))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-ab1 3 (y (enc (enc m k) (pubk hash)))
+    (x (enc k (pubk hash))) (a a) (b b) (t t))
+  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 1) (0 0)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init3 2)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+         (privk "sign" a)))
+      (send
+        (cat "sync-abrq"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 35)
+  (parent 34)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((y (enc (enc m k) (pubk hash))) (x (enc k (pubk hash))) (a a)
+        (b b) (t t))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-ab1 3 (y (enc (enc m k) (pubk hash)))
+    (x (enc k (pubk hash))) (a a) (b b) (t t))
+  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 2) (0 0)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init5 3)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+         (privk "sign" a)))
+      (send
+        (cat "sync-abrq"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 36)
+  (parent 34)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((y (enc (enc m k) (pubk hash))) (x (enc k (pubk hash))) (a a)
+        (b b) (t t))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (y mesg) (r text) (a b t hash name) (k skey))
+  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (hash hash) (k k))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (comment "Experiment 2 to prove Lemma 4.3, clause 2.")
+  (traces
+    ((recv
+       (cat (cat a b t y (enc k (pubk hash)))
+         (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k r
+           (pubk "encr" t))
+         (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t)))))
+  (label 37)
+  (unrealized (0 0) (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-rc2 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init5 1)
+    (enc "eootag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash))
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))))
+  (label 38)
+  (parent 37)
+  (unrealized (0 1))
+  (comment "4 in cohort - 4 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-rc2 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init3 2)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 39)
+  (parent 38)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (t t) (hash hash) (r r) (k k)
+        (y (enc (enc m k) (pubk hash))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-rc2 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((2 1) (0 1)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init3 2)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r-0 (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r-0 (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 40)
+  (parent 38)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (t t) (hash hash) (r r) (k k)
+        (y (enc (enc m k) (pubk hash))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-rc2 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((1 2) (0 1)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init5 3)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 41)
+  (parent 38)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (t t) (hash hash) (r r) (k k)
+        (y (enc (enc m k) (pubk hash))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-rc2 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((2 2) (0 1)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init5 3)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "rcrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r-0 (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r-0 (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r-0 (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 42)
+  (parent 38)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (t t) (hash hash) (r r) (k k)
+        (y (enc (enc m k) (pubk hash))))))
+  (origs))
+
+(comment "Nothing left to do")
+
+(defprotocol wang basic
+  (defrole init1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole init2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init3
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole init4
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole init5
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole resp1
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp2
+    (vars (a b t hash name) (m data) (r text) (k skey))
+    (trace
+      (recv
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc m k)
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t))
+          (enc "eootag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq"
+            (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+            (enc "keytag"
+              (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+                (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv (cat k r)))
+    (non-orig (privk hash)))
+  (defrole resp3
+    (vars (a b t hash name) (e1 e2 x mesg))
+    (trace
+      (recv
+        (cat (cat a b t (enc e1 (pubk hash)) x) e1 e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))))
+      (send
+        (cat (cat a b t (enc e1 (pubk hash)) x) e2
+          (enc "eootag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" a))
+          (enc "eortag" (enc a b t (enc e1 (pubk hash)) x (pubk hash))
+            e2 (privk "sign" b))
+          (enc "rcrq" (cat a b t (enc e1 (pubk hash)) x) e2
+            (privk "sign" b))))
+      (recv
+        (enc "abcf"
+          (enc "abrq" a b t (enc e1 (pubk hash)) x (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-ab1
+    (vars (a b t name) (y x mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
+      (send
+        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
+          (privk "sign" t)))))
+  (defrole ttp-ab2
+    (vars (a b t hash name) (y x e mesg))
+    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
+      (recv
+        (cat "sync-abrq"
+          (enc "eortag" (enc a b t y x (pubk hash)) e
+            (privk "sign" b))))
+      (send
+        (enc "eortag" (enc a b t y x (pubk hash)) e (privk "sign" b))))
+    (non-orig (privk hash)))
+  (defrole ttp-rc1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-rc-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)))) (send (cat k r)))
+    (non-orig (privk hash)))
+  (defrole ttp-rc2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "rcrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-rc-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf1
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (cat "sync-cf-req" (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (send
+        (enc (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b)) (privk "sign" t))))
+    (non-orig (privk hash)))
+  (defrole ttp-cf2
+    (vars (a b t hash name) (r text) (k skey) (y mesg))
+    (trace
+      (recv
+        (cat (cat a b t y (enc k (pubk hash)))
+          (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+            r (pubk "encr" t))
+          (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" a))
+          (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))
+          (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+            (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+              k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t))))
+    (non-orig (privk hash))))
+
+(defskeleton wang
+  (vars (y mesg) (r text) (a b t hash name) (k skey))
+  (defstrand ttp-cf2 3 (y y) (r r) (a a) (b b) (t t) (hash hash) (k k))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (comment "Experiment 3 to prove Lemma 4.3, clause 2.")
+  (traces
+    ((recv
+       (cat (cat a b t y (enc k (pubk hash)))
+         (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k r
+           (pubk "encr" t))
+         (enc "eootag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag" (enc a b t y (enc k (pubk hash)) (pubk hash))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq" (cat a b t y (enc k (pubk hash)))
+           (enc "keytag" (enc a b t y (enc k (pubk hash)) (pubk hash)) k
+             r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t y (enc k (pubk hash)) (privk "sign" a))
+          (privk "sign" t)))))
+  (label 43)
+  (unrealized (0 0) (0 1))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-cf2 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init5 1)
+    (enc "eootag"
+      (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+        (pubk hash))
+      (enc "keytag"
+        (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+          (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)) (0 0))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))))
+  (label 44)
+  (parent 43)
+  (unrealized (0 1))
+  (comment "4 in cohort - 4 not yet seen"))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-cf2 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init3 2)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 45)
+  (parent 44)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (t t) (hash hash) (r r) (k k)
+        (y (enc (enc m k) (pubk hash))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-cf2 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((2 1) (0 1)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init3 2)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r-0 (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r-0 (pubk "encr" t)) (privk "sign" a))))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 46)
+  (parent 44)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (t t) (hash hash) (r r) (k k)
+        (y (enc (enc m k) (pubk hash))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-cf2 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((1 2) (0 1)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (displaced 1 2 init5 3)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 47)
+  (parent 44)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (t t) (hash hash) (r r) (k k)
+        (y (enc (enc m k) (pubk hash))))))
+  (origs))
+
+(defskeleton wang
+  (vars (r r-0 text) (m data) (a b t hash name) (k skey))
+  (defstrand ttp-cf2 3 (y (enc (enc m k) (pubk hash))) (r r) (a a) (b b)
+    (t t) (hash hash) (k k))
+  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (hash hash) (k k))
+  (precedes ((1 0) (0 0)) ((2 2) (0 1)))
+  (non-orig (privk hash) (privk "encr" t) (privk "sign" a))
+  (operation encryption-test (added-strand init5 3)
+    (enc "abrq" a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+      (privk "sign" a)) (0 1))
+  (traces
+    ((recv
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a))
+         (enc "eortag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))
+         (enc "cfrq"
+           (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" b))))
+      (recv
+        (cat "sync-cf-req"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a))))
+      (send
+        (enc "abcf"
+          (enc "abrq" a b t (enc (enc m k) (pubk hash))
+            (enc k (pubk hash)) (privk "sign" a)) (privk "sign" t))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r (pubk "encr" t)) (privk "sign" a)))))
+    ((send
+       (cat (cat a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash)))
+         (enc m k)
+         (enc "keytag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash)) k r-0 (pubk "encr" t))
+         (enc "eootag"
+           (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+             (pubk hash))
+           (enc "keytag"
+             (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+               (pubk hash)) k r-0 (pubk "encr" t)) (privk "sign" a))))
+      (recv
+        (enc "eortag"
+          (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+            (pubk hash))
+          (enc "keytag"
+            (enc a b t (enc (enc m k) (pubk hash)) (enc k (pubk hash))
+              (pubk hash)) k r-0 (pubk "encr" t)) (privk "sign" b)))
+      (send
+        (enc "abrq" a b t (enc (enc m k) (pubk hash))
+          (enc k (pubk hash)) (privk "sign" a)))))
+  (label 48)
+  (parent 44)
+  (unrealized)
+  (shape)
+  (maps
+    ((0)
+      ((a a) (b b) (t t) (hash hash) (r r) (k k)
+        (y (enc (enc m k) (pubk hash))))))
+  (origs))
+
+(comment "Nothing left to do")
diff --git a/tst/weird.scm b/tst/weird.scm
deleted file mode 100644
--- a/tst/weird.scm
+++ /dev/null
@@ -1,24 +0,0 @@
-(defprotocol weird basic
-  (defrole originator
-    (vars (k skey))
-    (trace (send k))
-    (uniq-orig k))
-  (defrole guesser
-    (vars (k skey) (a name))
-    (trace (send (enc a k))))
-  (defrole encryptor
-    (vars (k skey) (a name))
-    (trace (recv (enc a k)))))
-
-;;; CPSA mistakenly concludes this is a skeleton.
-(defskeleton weird
-  (vars (k skey))
-  (defstrand originator 1 (k k))
-  (defstrand guesser 1 (k k)))
-
-;;; CPSA mistakenly concludes it is possible for the encryptor to
-;;; acquire k.
-(defskeleton weird
-  (vars (k skey))
-  (defstrand originator 1 (k k))
-  (defstrand encryptor 1 (k k)))
diff --git a/tst/weird.tst b/tst/weird.tst
deleted file mode 100644
--- a/tst/weird.tst
+++ /dev/null
@@ -1,84 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from weird.scm")
-
-(defprotocol weird basic
-  (defrole originator (vars (k skey)) (trace (send k)) (uniq-orig k))
-  (defrole guesser (vars (k skey) (a name)) (trace (send (enc a k))))
-  (defrole encryptor (vars (k skey) (a name)) (trace (recv (enc a k)))))
-
-(defskeleton weird
-  (vars (a name) (k skey))
-  (defstrand originator 1 (k k))
-  (defstrand guesser 1 (a a) (k k))
-  (uniq-orig k)
-  (traces ((send k)) ((send (enc a k))))
-  (label 0)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((k k) (a a))))
-  (origs (k (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol weird basic
-  (defrole originator (vars (k skey)) (trace (send k)) (uniq-orig k))
-  (defrole guesser (vars (k skey) (a name)) (trace (send (enc a k))))
-  (defrole encryptor (vars (k skey) (a name)) (trace (recv (enc a k)))))
-
-(defskeleton weird
-  (vars (a name) (k skey))
-  (defstrand originator 1 (k k))
-  (defstrand encryptor 1 (a a) (k k))
-  (uniq-orig k)
-  (traces ((send k)) ((recv (enc a k))))
-  (label 1)
-  (unrealized (1 0))
-  (origs (k (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton weird
-  (vars (a name) (k skey))
-  (defstrand originator 1 (k k))
-  (defstrand encryptor 1 (a a) (k k))
-  (defstrand guesser 1 (a a) (k k))
-  (precedes ((2 0) (1 0)))
-  (uniq-orig k)
-  (operation encryption-test (added-strand guesser 1) (enc a k) (1 0))
-  (traces ((send k)) ((recv (enc a k))) ((send (enc a k))))
-  (label 2)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((k k) (a a))))
-  (origs (k (0 0))))
-
-(defskeleton weird
-  (vars (a name) (k skey))
-  (defstrand originator 1 (k k))
-  (defstrand encryptor 1 (a a) (k k))
-  (deflistener k)
-  (precedes ((0 0) (2 0)) ((2 1) (1 0)))
-  (uniq-orig k)
-  (operation encryption-test (added-listener k) (enc a k) (1 0))
-  (traces ((send k)) ((recv (enc a k))) ((recv k) (send k)))
-  (label 3)
-  (parent 1)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton weird
-  (vars (a name) (k skey))
-  (defstrand originator 1 (k k))
-  (defstrand encryptor 1 (a a) (k k))
-  (precedes ((0 0) (1 0)))
-  (uniq-orig k)
-  (operation generalization deleted (2 0))
-  (traces ((send k)) ((recv (enc a k))))
-  (label 4)
-  (parent 3)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((k k) (a a))))
-  (origs (k (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/wide-mouth-frog-scyther.lsp b/tst/wide-mouth-frog-scyther.lsp
deleted file mode 100644
--- a/tst/wide-mouth-frog-scyther.lsp
+++ /dev/null
@@ -1,29 +0,0 @@
-(herald "Wide-Mouth Frog Protocol from Scyther"
-  (comment "This protocol has an infinite number of shapes"))
-
-(defprotocol wide-mouth-frog basic
-  (defrole init (vars (a b t name) (ta text) (k skey))
-    (trace (send (cat a (enc a ta b k (ltk a t))))))
-  (defrole resp (vars (a b t name) (k skey) (tb text))
-    (trace (recv (enc t tb a k (ltk b t)))))
-  (defrole ks (vars (a b t name) (k skey) (ta tb text))
-    (trace (recv (cat a (enc a ta b k (ltk a t))))
-	   (send (enc t tb a k (ltk b t))))))
-
-(defskeleton wide-mouth-frog
-  (vars (a t name) (k skey))
-  (defstrand init 1 (a a) (t t) (k k))
-  (non-orig (ltk a t))
-  (uniq-orig k))
-
-(defskeleton wide-mouth-frog
-  (vars (b t name) (k skey))
-  (defstrand resp 1 (b b) (t t) (k k))
-  (non-orig (ltk b t))
-  (uniq-orig k))
-
-(defskeleton wide-mouth-frog
-  (vars (a b t name) (k skey))
-  (defstrand ks 2 (a a) (b b) (t t) (k k))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k))
diff --git a/tst/wide-mouth-frog-scyther.tst b/tst/wide-mouth-frog-scyther.tst
deleted file mode 100644
--- a/tst/wide-mouth-frog-scyther.tst
+++ /dev/null
@@ -1,524 +0,0 @@
-(herald "Wide-Mouth Frog Protocol from Scyther"
-  (comment "This protocol has an infinite number of shapes"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from wide-mouth-frog-scyther.lsp")
-
-(defprotocol wide-mouth-frog basic
-  (defrole init
-    (vars (a b t name) (ta text) (k skey))
-    (trace (send (cat a (enc a ta b k (ltk a t))))))
-  (defrole resp
-    (vars (a b t name) (k skey) (tb text))
-    (trace (recv (enc t tb a k (ltk b t)))))
-  (defrole ks
-    (vars (a b t name) (k skey) (ta tb text))
-    (trace (recv (cat a (enc a ta b k (ltk a t))))
-      (send (enc t tb a k (ltk b t))))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta text) (a t b name) (k skey))
-  (defstrand init 1 (ta ta) (a a) (b b) (t t) (k k))
-  (non-orig (ltk a t))
-  (uniq-orig k)
-  (traces ((send (cat a (enc a ta b k (ltk a t))))))
-  (label 0)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (t t) (k k) (b b) (ta ta))))
-  (origs (k (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol wide-mouth-frog basic
-  (defrole init
-    (vars (a b t name) (ta text) (k skey))
-    (trace (send (cat a (enc a ta b k (ltk a t))))))
-  (defrole resp
-    (vars (a b t name) (k skey) (tb text))
-    (trace (recv (enc t tb a k (ltk b t)))))
-  (defrole ks
-    (vars (a b t name) (k skey) (ta tb text))
-    (trace (recv (cat a (enc a ta b k (ltk a t))))
-      (send (enc t tb a k (ltk b t))))))
-
-(defskeleton wide-mouth-frog
-  (vars (tb text) (b t a name) (k skey))
-  (defstrand resp 1 (tb tb) (a a) (b b) (t t) (k k))
-  (non-orig (ltk b t))
-  (uniq-orig k)
-  (traces ((recv (enc t tb a k (ltk b t)))))
-  (label 1)
-  (unrealized (0 0))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (tb text) (b a name) (k skey))
-  (defstrand resp 1 (tb tb) (a a) (b b) (t b) (k k))
-  (defstrand init 1 (ta tb) (a b) (b a) (t b) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (ltk b b))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc b tb a k (ltk b b)) (0 0))
-  (traces ((recv (enc b tb a k (ltk b b))))
-    ((send (cat b (enc b tb a k (ltk b b))))))
-  (label 2)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t b) (k k) (a a) (tb tb))))
-  (origs (k (1 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (tb ta text) (b t a name) (k skey))
-  (defstrand resp 1 (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)))
-  (non-orig (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc t tb a k (ltk b t)) (0 0))
-  (traces ((recv (enc t tb a k (ltk b t))))
-    ((recv (cat a (enc a ta b k (ltk a t))))
-      (send (enc t tb a k (ltk b t)))))
-  (label 3)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (k k) (a a) (tb tb))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wide-mouth-frog basic
-  (defrole init
-    (vars (a b t name) (ta text) (k skey))
-    (trace (send (cat a (enc a ta b k (ltk a t))))))
-  (defrole resp
-    (vars (a b t name) (k skey) (tb text))
-    (trace (recv (enc t tb a k (ltk b t)))))
-  (defrole ks
-    (vars (a b t name) (k skey) (ta tb text))
-    (trace (recv (cat a (enc a ta b k (ltk a t))))
-      (send (enc t tb a k (ltk b t))))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (traces
-    ((recv (cat a (enc a ta b k (ltk a t))))
-      (send (enc t tb a k (ltk b t)))))
-  (label 4)
-  (unrealized (0 0))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand init 1 (ta ta) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc a ta b k (ltk a t)) (0 0))
-  (traces
-    ((recv (cat a (enc a ta b k (ltk a t))))
-      (send (enc t tb a k (ltk b t))))
-    ((send (cat a (enc a ta b k (ltk a t))))))
-  (label 5)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (1 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 text) (b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)))
-  (non-orig (ltk b t) (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc t ta b k (ltk t t)) (0 0))
-  (traces
-    ((recv (cat t (enc t ta b k (ltk t t))))
-      (send (enc t tb t k (ltk b t))))
-    ((recv (cat b (enc b ta-0 t k (ltk b t))))
-      (send (enc t ta b k (ltk t t)))))
-  (label 6)
-  (parent 4)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 text) (b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b t) (t t) (k k))
-  (defstrand init 1 (ta ta-0) (a b) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)))
-  (non-orig (ltk b t) (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc b ta-0 t k (ltk b t)) (1 0))
-  (traces
-    ((recv (cat t (enc t ta b k (ltk t t))))
-      (send (enc t tb t k (ltk b t))))
-    ((recv (cat b (enc b ta-0 t k (ltk b t))))
-      (send (enc t ta b k (ltk t t))))
-    ((send (cat b (enc b ta-0 t k (ltk b t))))))
-  (label 7)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a t) (b b) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (2 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 text) (t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a t) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)))
-  (non-orig (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc t ta-0 t k (ltk t t)) (1 0))
-  (traces
-    ((recv (cat t (enc t ta t k (ltk t t))))
-      (send (enc t tb t k (ltk t t))))
-    ((recv (cat t (enc t ta-0 t k (ltk t t))))
-      (send (enc t ta t k (ltk t t))))
-    ((recv (cat t (enc t ta-1 t k (ltk t t))))
-      (send (enc t ta-0 t k (ltk t t)))))
-  (label 8)
-  (parent 6)
-  (unrealized (2 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 text) (t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a t) (b t) (t t) (k k))
-  (defstrand init 1 (ta ta-1) (a t) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 0) (2 0)))
-  (non-orig (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc t ta-1 t k (ltk t t)) (2 0))
-  (traces
-    ((recv (cat t (enc t ta t k (ltk t t))))
-      (send (enc t tb t k (ltk t t))))
-    ((recv (cat t (enc t ta-0 t k (ltk t t))))
-      (send (enc t ta t k (ltk t t))))
-    ((recv (cat t (enc t ta-1 t k (ltk t t))))
-      (send (enc t ta-0 t k (ltk t t))))
-    ((send (cat t (enc t ta-1 t k (ltk t t))))))
-  (label 9)
-  (parent 8)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a t) (b t) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (3 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 text) (t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a t) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)))
-  (non-orig (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc t ta-1 t k (ltk t t)) (2 0))
-  (traces
-    ((recv (cat t (enc t ta t k (ltk t t))))
-      (send (enc t tb t k (ltk t t))))
-    ((recv (cat t (enc t ta-0 t k (ltk t t))))
-      (send (enc t ta t k (ltk t t))))
-    ((recv (cat t (enc t ta-1 t k (ltk t t))))
-      (send (enc t ta-0 t k (ltk t t))))
-    ((recv (cat t (enc t ta-2 t k (ltk t t))))
-      (send (enc t ta-1 t k (ltk t t)))))
-  (label 10)
-  (parent 8)
-  (unrealized (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 text) (t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a t) (b t) (t t) (k k))
-  (defstrand init 1 (ta ta-2) (a t) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 0) (3 0)))
-  (non-orig (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc t ta-2 t k (ltk t t)) (3 0))
-  (traces
-    ((recv (cat t (enc t ta t k (ltk t t))))
-      (send (enc t tb t k (ltk t t))))
-    ((recv (cat t (enc t ta-0 t k (ltk t t))))
-      (send (enc t ta t k (ltk t t))))
-    ((recv (cat t (enc t ta-1 t k (ltk t t))))
-      (send (enc t ta-0 t k (ltk t t))))
-    ((recv (cat t (enc t ta-2 t k (ltk t t))))
-      (send (enc t ta-1 t k (ltk t t))))
-    ((send (cat t (enc t ta-2 t k (ltk t t))))))
-  (label 11)
-  (parent 10)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a t) (b t) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (4 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 text) (t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a t) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0)))
-  (non-orig (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc t ta-2 t k (ltk t t)) (3 0))
-  (traces
-    ((recv (cat t (enc t ta t k (ltk t t))))
-      (send (enc t tb t k (ltk t t))))
-    ((recv (cat t (enc t ta-0 t k (ltk t t))))
-      (send (enc t ta t k (ltk t t))))
-    ((recv (cat t (enc t ta-1 t k (ltk t t))))
-      (send (enc t ta-0 t k (ltk t t))))
-    ((recv (cat t (enc t ta-2 t k (ltk t t))))
-      (send (enc t ta-1 t k (ltk t t))))
-    ((recv (cat t (enc t ta-3 t k (ltk t t))))
-      (send (enc t ta-2 t k (ltk t t)))))
-  (label 12)
-  (parent 10)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 text) (t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a t) (b t) (t t) (k k))
-  (defstrand init 1 (ta ta-3) (a t) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 0) (4 0)))
-  (non-orig (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc t ta-3 t k (ltk t t)) (4 0))
-  (traces
-    ((recv (cat t (enc t ta t k (ltk t t))))
-      (send (enc t tb t k (ltk t t))))
-    ((recv (cat t (enc t ta-0 t k (ltk t t))))
-      (send (enc t ta t k (ltk t t))))
-    ((recv (cat t (enc t ta-1 t k (ltk t t))))
-      (send (enc t ta-0 t k (ltk t t))))
-    ((recv (cat t (enc t ta-2 t k (ltk t t))))
-      (send (enc t ta-1 t k (ltk t t))))
-    ((recv (cat t (enc t ta-3 t k (ltk t t))))
-      (send (enc t ta-2 t k (ltk t t))))
-    ((send (cat t (enc t ta-3 t k (ltk t t))))))
-  (label 13)
-  (parent 12)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a t) (b t) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (5 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 ta-4 text) (t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-4) (tb ta-3) (a t) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 1) (4 0)))
-  (non-orig (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc t ta-3 t k (ltk t t)) (4 0))
-  (traces
-    ((recv (cat t (enc t ta t k (ltk t t))))
-      (send (enc t tb t k (ltk t t))))
-    ((recv (cat t (enc t ta-0 t k (ltk t t))))
-      (send (enc t ta t k (ltk t t))))
-    ((recv (cat t (enc t ta-1 t k (ltk t t))))
-      (send (enc t ta-0 t k (ltk t t))))
-    ((recv (cat t (enc t ta-2 t k (ltk t t))))
-      (send (enc t ta-1 t k (ltk t t))))
-    ((recv (cat t (enc t ta-3 t k (ltk t t))))
-      (send (enc t ta-2 t k (ltk t t))))
-    ((recv (cat t (enc t ta-4 t k (ltk t t))))
-      (send (enc t ta-3 t k (ltk t t)))))
-  (label 14)
-  (parent 12)
-  (unrealized (5 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 ta-4 text) (t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-4) (tb ta-3) (a t) (b t) (t t) (k k))
-  (defstrand init 1 (ta ta-4) (a t) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 1) (4 0)) ((6 0) (5 0)))
-  (non-orig (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc t ta-4 t k (ltk t t)) (5 0))
-  (traces
-    ((recv (cat t (enc t ta t k (ltk t t))))
-      (send (enc t tb t k (ltk t t))))
-    ((recv (cat t (enc t ta-0 t k (ltk t t))))
-      (send (enc t ta t k (ltk t t))))
-    ((recv (cat t (enc t ta-1 t k (ltk t t))))
-      (send (enc t ta-0 t k (ltk t t))))
-    ((recv (cat t (enc t ta-2 t k (ltk t t))))
-      (send (enc t ta-1 t k (ltk t t))))
-    ((recv (cat t (enc t ta-3 t k (ltk t t))))
-      (send (enc t ta-2 t k (ltk t t))))
-    ((recv (cat t (enc t ta-4 t k (ltk t t))))
-      (send (enc t ta-3 t k (ltk t t))))
-    ((send (cat t (enc t ta-4 t k (ltk t t))))))
-  (label 15)
-  (parent 14)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a t) (b t) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (6 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 ta-4 ta-5 text) (t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-4) (tb ta-3) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-5) (tb ta-4) (a t) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 1) (4 0)) ((6 1) (5 0)))
-  (non-orig (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc t ta-4 t k (ltk t t)) (5 0))
-  (traces
-    ((recv (cat t (enc t ta t k (ltk t t))))
-      (send (enc t tb t k (ltk t t))))
-    ((recv (cat t (enc t ta-0 t k (ltk t t))))
-      (send (enc t ta t k (ltk t t))))
-    ((recv (cat t (enc t ta-1 t k (ltk t t))))
-      (send (enc t ta-0 t k (ltk t t))))
-    ((recv (cat t (enc t ta-2 t k (ltk t t))))
-      (send (enc t ta-1 t k (ltk t t))))
-    ((recv (cat t (enc t ta-3 t k (ltk t t))))
-      (send (enc t ta-2 t k (ltk t t))))
-    ((recv (cat t (enc t ta-4 t k (ltk t t))))
-      (send (enc t ta-3 t k (ltk t t))))
-    ((recv (cat t (enc t ta-5 t k (ltk t t))))
-      (send (enc t ta-4 t k (ltk t t)))))
-  (label 16)
-  (parent 14)
-  (unrealized (6 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(comment "Strand bound exceeded--aborting run")
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 ta-4 ta-5 text) (t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-4) (tb ta-3) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-5) (tb ta-4) (a t) (b t) (t t) (k k))
-  (defstrand init 1 (ta ta-5) (a t) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 1) (4 0)) ((6 1) (5 0)) ((7 0) (6 0)))
-  (non-orig (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc t ta-5 t k (ltk t t)) (6 0))
-  (traces
-    ((recv (cat t (enc t ta t k (ltk t t))))
-      (send (enc t tb t k (ltk t t))))
-    ((recv (cat t (enc t ta-0 t k (ltk t t))))
-      (send (enc t ta t k (ltk t t))))
-    ((recv (cat t (enc t ta-1 t k (ltk t t))))
-      (send (enc t ta-0 t k (ltk t t))))
-    ((recv (cat t (enc t ta-2 t k (ltk t t))))
-      (send (enc t ta-1 t k (ltk t t))))
-    ((recv (cat t (enc t ta-3 t k (ltk t t))))
-      (send (enc t ta-2 t k (ltk t t))))
-    ((recv (cat t (enc t ta-4 t k (ltk t t))))
-      (send (enc t ta-3 t k (ltk t t))))
-    ((recv (cat t (enc t ta-5 t k (ltk t t))))
-      (send (enc t ta-4 t k (ltk t t))))
-    ((send (cat t (enc t ta-5 t k (ltk t t))))))
-  (label 17)
-  (parent 16)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 ta-4 ta-5 ta-6 text) (t name)
-    (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-4) (tb ta-3) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-5) (tb ta-4) (a t) (b t) (t t) (k k))
-  (defstrand ks 2 (ta ta-6) (tb ta-5) (a t) (b t) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (ltk t t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc t ta-5 t k (ltk t t)) (6 0))
-  (traces
-    ((recv (cat t (enc t ta t k (ltk t t))))
-      (send (enc t tb t k (ltk t t))))
-    ((recv (cat t (enc t ta-0 t k (ltk t t))))
-      (send (enc t ta t k (ltk t t))))
-    ((recv (cat t (enc t ta-1 t k (ltk t t))))
-      (send (enc t ta-0 t k (ltk t t))))
-    ((recv (cat t (enc t ta-2 t k (ltk t t))))
-      (send (enc t ta-1 t k (ltk t t))))
-    ((recv (cat t (enc t ta-3 t k (ltk t t))))
-      (send (enc t ta-2 t k (ltk t t))))
-    ((recv (cat t (enc t ta-4 t k (ltk t t))))
-      (send (enc t ta-3 t k (ltk t t))))
-    ((recv (cat t (enc t ta-5 t k (ltk t t))))
-      (send (enc t ta-4 t k (ltk t t))))
-    ((recv (cat t (enc t ta-6 t k (ltk t t))))
-      (send (enc t ta-5 t k (ltk t t)))))
-  (label 18)
-  (parent 16)
-  (unrealized (7 0))
-  (comment "aborted"))
diff --git a/tst/wide-mouth-frog.lsp b/tst/wide-mouth-frog.lsp
deleted file mode 100644
--- a/tst/wide-mouth-frog.lsp
+++ /dev/null
@@ -1,29 +0,0 @@
-(herald "Wide-Mouth Frog Protocol"
-  (comment "This protocol has an infinite number of shapes"))
-
-(defprotocol wide-mouth-frog basic
-  (defrole init (vars (a b t name) (ta text) (k skey))
-    (trace (send (cat a (enc ta b k (ltk a t))))))
-  (defrole resp (vars (a b t name) (k skey) (tb text))
-    (trace (recv (enc tb a k (ltk b t)))))
-  (defrole ks (vars (a b t name) (k skey) (ta tb text))
-    (trace (recv (cat a (enc ta b k (ltk a t))))
-	   (send (enc tb a k (ltk b t))))))
-
-(defskeleton wide-mouth-frog
-  (vars (a t name) (k skey))
-  (defstrand init 1 (a a) (t t) (k k))
-  (non-orig (ltk a t))
-  (uniq-orig k))
-
-(defskeleton wide-mouth-frog
-  (vars (b t name) (k skey))
-  (defstrand resp 1 (b b) (t t) (k k))
-  (non-orig (ltk b t))
-  (uniq-orig k))
-
-(defskeleton wide-mouth-frog
-  (vars (a b t name) (k skey))
-  (defstrand ks 2 (a a) (b b) (t t) (k k))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k))
diff --git a/tst/wide-mouth-frog.tst b/tst/wide-mouth-frog.tst
deleted file mode 100644
--- a/tst/wide-mouth-frog.tst
+++ /dev/null
@@ -1,526 +0,0 @@
-(herald "Wide-Mouth Frog Protocol"
-  (comment "This protocol has an infinite number of shapes"))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from wide-mouth-frog.lsp")
-
-(defprotocol wide-mouth-frog basic
-  (defrole init
-    (vars (a b t name) (ta text) (k skey))
-    (trace (send (cat a (enc ta b k (ltk a t))))))
-  (defrole resp
-    (vars (a b t name) (k skey) (tb text))
-    (trace (recv (enc tb a k (ltk b t)))))
-  (defrole ks
-    (vars (a b t name) (k skey) (ta tb text))
-    (trace (recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta text) (a t b name) (k skey))
-  (defstrand init 1 (ta ta) (a a) (b b) (t t) (k k))
-  (non-orig (ltk a t))
-  (uniq-orig k)
-  (traces ((send (cat a (enc ta b k (ltk a t))))))
-  (label 0)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (t t) (k k) (b b) (ta ta))))
-  (origs (k (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol wide-mouth-frog basic
-  (defrole init
-    (vars (a b t name) (ta text) (k skey))
-    (trace (send (cat a (enc ta b k (ltk a t))))))
-  (defrole resp
-    (vars (a b t name) (k skey) (tb text))
-    (trace (recv (enc tb a k (ltk b t)))))
-  (defrole ks
-    (vars (a b t name) (k skey) (ta tb text))
-    (trace (recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))))
-
-(defskeleton wide-mouth-frog
-  (vars (tb text) (b t a name) (k skey))
-  (defstrand resp 1 (tb tb) (a a) (b b) (t t) (k k))
-  (non-orig (ltk b t))
-  (uniq-orig k)
-  (traces ((recv (enc tb a k (ltk b t)))))
-  (label 1)
-  (unrealized (0 0))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (tb text) (b t a name) (k skey))
-  (defstrand resp 1 (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand init 1 (ta tb) (a b) (b a) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc tb a k (ltk b t)) (0 0))
-  (traces ((recv (enc tb a k (ltk b t))))
-    ((send (cat b (enc tb a k (ltk b t))))))
-  (label 2)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (k k) (a a) (tb tb))))
-  (origs (k (1 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (tb ta text) (b t a name) (k skey))
-  (defstrand resp 1 (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)))
-  (non-orig (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2) (enc tb a k (ltk b t))
-    (0 0))
-  (traces ((recv (enc tb a k (ltk b t))))
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t)))))
-  (label 3)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((b b) (t t) (k k) (a a) (tb tb))))
-  (origs))
-
-(comment "Nothing left to do")
-
-(defprotocol wide-mouth-frog basic
-  (defrole init
-    (vars (a b t name) (ta text) (k skey))
-    (trace (send (cat a (enc ta b k (ltk a t))))))
-  (defrole resp
-    (vars (a b t name) (k skey) (tb text))
-    (trace (recv (enc tb a k (ltk b t)))))
-  (defrole ks
-    (vars (a b t name) (k skey) (ta tb text))
-    (trace (recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t)))))
-  (label 4)
-  (unrealized (0 0))
-  (origs)
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand init 1 (ta ta) (a a) (b b) (t t) (k k))
-  (precedes ((1 0) (0 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc ta b k (ltk a t)) (0 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((send (cat a (enc ta b k (ltk a t))))))
-  (label 5)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (1 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (precedes ((1 1) (0 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2) (enc ta b k (ltk a t))
-    (0 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t)))))
-  (label 6)
-  (parent 4)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand init 1 (ta ta-0) (a b) (b a) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 0) (1 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc ta-0 a k (ltk b t)) (1 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((send (cat b (enc ta-0 a k (ltk b t))))))
-  (label 7)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (2 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc ta-0 a k (ltk b t)) (1 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((recv (cat a (enc ta-1 b k (ltk a t))))
-      (send (enc ta-0 a k (ltk b t)))))
-  (label 8)
-  (parent 6)
-  (unrealized (2 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a a) (b b) (t t) (k k))
-  (defstrand init 1 (ta ta-1) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 0) (2 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc ta-1 b k (ltk a t)) (2 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((recv (cat a (enc ta-1 b k (ltk a t))))
-      (send (enc ta-0 a k (ltk b t))))
-    ((send (cat a (enc ta-1 b k (ltk a t))))))
-  (label 9)
-  (parent 8)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (3 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a b) (b a) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc ta-1 b k (ltk a t)) (2 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((recv (cat a (enc ta-1 b k (ltk a t))))
-      (send (enc ta-0 a k (ltk b t))))
-    ((recv (cat b (enc ta-2 a k (ltk b t))))
-      (send (enc ta-1 b k (ltk a t)))))
-  (label 10)
-  (parent 8)
-  (unrealized (3 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a b) (b a) (t t) (k k))
-  (defstrand init 1 (ta ta-2) (a b) (b a) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 0) (3 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc ta-2 a k (ltk b t)) (3 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((recv (cat a (enc ta-1 b k (ltk a t))))
-      (send (enc ta-0 a k (ltk b t))))
-    ((recv (cat b (enc ta-2 a k (ltk b t))))
-      (send (enc ta-1 b k (ltk a t))))
-    ((send (cat b (enc ta-2 a k (ltk b t))))))
-  (label 11)
-  (parent 10)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (4 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc ta-2 a k (ltk b t)) (3 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((recv (cat a (enc ta-1 b k (ltk a t))))
-      (send (enc ta-0 a k (ltk b t))))
-    ((recv (cat b (enc ta-2 a k (ltk b t))))
-      (send (enc ta-1 b k (ltk a t))))
-    ((recv (cat a (enc ta-3 b k (ltk a t))))
-      (send (enc ta-2 a k (ltk b t)))))
-  (label 12)
-  (parent 10)
-  (unrealized (4 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a a) (b b) (t t) (k k))
-  (defstrand init 1 (ta ta-3) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 0) (4 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc ta-3 b k (ltk a t)) (4 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((recv (cat a (enc ta-1 b k (ltk a t))))
-      (send (enc ta-0 a k (ltk b t))))
-    ((recv (cat b (enc ta-2 a k (ltk b t))))
-      (send (enc ta-1 b k (ltk a t))))
-    ((recv (cat a (enc ta-3 b k (ltk a t))))
-      (send (enc ta-2 a k (ltk b t))))
-    ((send (cat a (enc ta-3 b k (ltk a t))))))
-  (label 13)
-  (parent 12)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (5 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 ta-4 text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-4) (tb ta-3) (a b) (b a) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 1) (4 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc ta-3 b k (ltk a t)) (4 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((recv (cat a (enc ta-1 b k (ltk a t))))
-      (send (enc ta-0 a k (ltk b t))))
-    ((recv (cat b (enc ta-2 a k (ltk b t))))
-      (send (enc ta-1 b k (ltk a t))))
-    ((recv (cat a (enc ta-3 b k (ltk a t))))
-      (send (enc ta-2 a k (ltk b t))))
-    ((recv (cat b (enc ta-4 a k (ltk b t))))
-      (send (enc ta-3 b k (ltk a t)))))
-  (label 14)
-  (parent 12)
-  (unrealized (5 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 ta-4 text) (a b t name) (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-4) (tb ta-3) (a b) (b a) (t t) (k k))
-  (defstrand init 1 (ta ta-4) (a b) (b a) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 1) (4 0)) ((6 0) (5 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc ta-4 a k (ltk b t)) (5 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((recv (cat a (enc ta-1 b k (ltk a t))))
-      (send (enc ta-0 a k (ltk b t))))
-    ((recv (cat b (enc ta-2 a k (ltk b t))))
-      (send (enc ta-1 b k (ltk a t))))
-    ((recv (cat a (enc ta-3 b k (ltk a t))))
-      (send (enc ta-2 a k (ltk b t))))
-    ((recv (cat b (enc ta-4 a k (ltk b t))))
-      (send (enc ta-3 b k (ltk a t))))
-    ((send (cat b (enc ta-4 a k (ltk b t))))))
-  (label 15)
-  (parent 14)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (t t) (k k) (ta ta) (tb tb))))
-  (origs (k (6 0))))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 ta-4 ta-5 text) (a b t name)
-    (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-4) (tb ta-3) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-5) (tb ta-4) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 1) (4 0)) ((6 1) (5 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc ta-4 a k (ltk b t)) (5 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((recv (cat a (enc ta-1 b k (ltk a t))))
-      (send (enc ta-0 a k (ltk b t))))
-    ((recv (cat b (enc ta-2 a k (ltk b t))))
-      (send (enc ta-1 b k (ltk a t))))
-    ((recv (cat a (enc ta-3 b k (ltk a t))))
-      (send (enc ta-2 a k (ltk b t))))
-    ((recv (cat b (enc ta-4 a k (ltk b t))))
-      (send (enc ta-3 b k (ltk a t))))
-    ((recv (cat a (enc ta-5 b k (ltk a t))))
-      (send (enc ta-4 a k (ltk b t)))))
-  (label 16)
-  (parent 14)
-  (unrealized (6 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(comment "Strand bound exceeded--aborting run")
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 ta-4 ta-5 text) (a b t name)
-    (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-4) (tb ta-3) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-5) (tb ta-4) (a a) (b b) (t t) (k k))
-  (defstrand init 1 (ta ta-5) (a a) (b b) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 1) (4 0)) ((6 1) (5 0)) ((7 0) (6 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand init 1)
-    (enc ta-5 b k (ltk a t)) (6 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((recv (cat a (enc ta-1 b k (ltk a t))))
-      (send (enc ta-0 a k (ltk b t))))
-    ((recv (cat b (enc ta-2 a k (ltk b t))))
-      (send (enc ta-1 b k (ltk a t))))
-    ((recv (cat a (enc ta-3 b k (ltk a t))))
-      (send (enc ta-2 a k (ltk b t))))
-    ((recv (cat b (enc ta-4 a k (ltk b t))))
-      (send (enc ta-3 b k (ltk a t))))
-    ((recv (cat a (enc ta-5 b k (ltk a t))))
-      (send (enc ta-4 a k (ltk b t))))
-    ((send (cat a (enc ta-5 b k (ltk a t))))))
-  (label 17)
-  (parent 16)
-  (unrealized)
-  (comment "aborted"))
-
-(defskeleton wide-mouth-frog
-  (vars (ta tb ta-0 ta-1 ta-2 ta-3 ta-4 ta-5 ta-6 text) (a b t name)
-    (k skey))
-  (defstrand ks 2 (ta ta) (tb tb) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-0) (tb ta) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-1) (tb ta-0) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-2) (tb ta-1) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-3) (tb ta-2) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-4) (tb ta-3) (a b) (b a) (t t) (k k))
-  (defstrand ks 2 (ta ta-5) (tb ta-4) (a a) (b b) (t t) (k k))
-  (defstrand ks 2 (ta ta-6) (tb ta-5) (a b) (b a) (t t) (k k))
-  (precedes ((1 1) (0 0)) ((2 1) (1 0)) ((3 1) (2 0)) ((4 1) (3 0))
-    ((5 1) (4 0)) ((6 1) (5 0)) ((7 1) (6 0)))
-  (non-orig (ltk a t) (ltk b t))
-  (uniq-orig k)
-  (operation encryption-test (added-strand ks 2)
-    (enc ta-5 b k (ltk a t)) (6 0))
-  (traces
-    ((recv (cat a (enc ta b k (ltk a t))))
-      (send (enc tb a k (ltk b t))))
-    ((recv (cat b (enc ta-0 a k (ltk b t))))
-      (send (enc ta b k (ltk a t))))
-    ((recv (cat a (enc ta-1 b k (ltk a t))))
-      (send (enc ta-0 a k (ltk b t))))
-    ((recv (cat b (enc ta-2 a k (ltk b t))))
-      (send (enc ta-1 b k (ltk a t))))
-    ((recv (cat a (enc ta-3 b k (ltk a t))))
-      (send (enc ta-2 a k (ltk b t))))
-    ((recv (cat b (enc ta-4 a k (ltk b t))))
-      (send (enc ta-3 b k (ltk a t))))
-    ((recv (cat a (enc ta-5 b k (ltk a t))))
-      (send (enc ta-4 a k (ltk b t))))
-    ((recv (cat b (enc ta-6 a k (ltk b t))))
-      (send (enc ta-5 b k (ltk a t)))))
-  (label 18)
-  (parent 16)
-  (unrealized (7 0))
-  (comment "aborted"))
diff --git a/tst/wonthull.scm b/tst/wonthull.scm
deleted file mode 100644
--- a/tst/wonthull.scm
+++ /dev/null
@@ -1,39 +0,0 @@
-(herald wonthull (bound 9))
-
-;;;  Wonthull:  Demonstrates a subtle incompleteness.
-;;;
-;;;  The second POV skeleton given is a shape not produced
-;;;   or covered in the first search.  The problem is that an
-;;;   augmentation is attempted only with the most general
-;;;   version of the responder strand that uses x3 as y1, not
-;;;   the more specific version in which this does not lead to
-;;;   x3 being originated in more than one place.)
-
-(defprotocol wonthull basic
-  (defrole init (vars (a name) (x1 x2 x3 x4 text))
-    (trace
-      (send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-	(recv (enc "okay" x3 x4 (pubk a)))
-    )
-    (uniq-orig x1 x2 x3)
-    (non-orig (privk a))
-  )
-  (defrole resp (vars (a name) (y1 y2 y3 text))
-     (trace
-       (recv (enc y1 y2 (pubk a)) )
-       (send (enc "okay" y3 y1 (pubk a)) )
-     )
-  )
-)
-
-(defskeleton wonthull
-  (vars)
-  (defstrand init 2)
-)
-
-(defskeleton wonthull
-  (vars (a name) (n text) (x1 x2 x3 x4 text))
-  (defstrand init 2 (a a) (x1 x1) (x2 x3) (x3 x3) (x4 x1))
-  (defstrand resp 2 (a a) (y1 x1) (y2 x3) (y3 x3))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-)
diff --git a/tst/wonthull.tst b/tst/wonthull.tst
deleted file mode 100644
--- a/tst/wonthull.tst
+++ /dev/null
@@ -1,199 +0,0 @@
-(herald wonthull (bound 9))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from wonthull.scm")
-(comment "Strand count bounded at 9")
-
-(defprotocol wonthull basic
-  (defrole init
-    (vars (a name) (x1 x2 x3 x4 text))
-    (trace (send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    (non-orig (privk a))
-    (uniq-orig x1 x2 x3))
-  (defrole resp
-    (vars (a name) (y1 y2 y3 text))
-    (trace (recv (enc y1 y2 (pubk a)))
-      (send (enc "okay" y3 y1 (pubk a))))))
-
-(defskeleton wonthull
-  (vars (x1 x2 x3 x4 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x3) (x4 x4) (a a))
-  (non-orig (privk a))
-  (uniq-orig x1 x2 x3)
-  (traces
-    ((send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a)))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (x3 (0 0)) (x2 (0 0)) (x1 (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull
-  (vars (x1 x2 x4 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x2) (x4 x4) (a a))
-  (non-orig (privk a))
-  (uniq-orig x1 x2)
-  (operation nonce-test (displaced 1 0 init 1) x3 (0 1)
-    (enc x3 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x2 (pubk a)) (enc x2 x2 (pubk a))))
-      (recv (enc "okay" x2 x4 (pubk a)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1))
-  (origs (x1 (0 0)) (x2 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull
-  (vars (x1 x2 x3 x4 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x3) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x2) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1 x2 x3)
-  (operation nonce-test (added-strand resp 2) x3 (0 1)
-    (enc x3 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    ((recv (enc x3 x2 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 2)
-  (parent 0)
-  (seen 3)
-  (unrealized (0 1))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull
-  (vars (x1 x2 x4 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x2) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x2) (y2 x2) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1 x2)
-  (operation nonce-test (added-strand resp 2) x2 (0 1)
-    (enc x1 x2 (pubk a)) (enc x2 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x2 (pubk a)) (enc x2 x2 (pubk a))))
-      (recv (enc "okay" x2 x4 (pubk a))))
-    ((recv (enc x2 x2 (pubk a))) (send (enc "okay" y3 x2 (pubk a)))))
-  (label 3)
-  (parent 1)
-  (unrealized (0 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull
-  (vars (x1 x2 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x2) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1 x2 y3)
-  (operation nonce-test (contracted (x3 y3) (x4 y3)) y3 (0 1)
-    (enc "okay" y3 y3 (pubk a)) (enc y3 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x2 (pubk a)) (enc y3 x2 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x2 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 4)
-  (parent 2)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (x1 x1) (x2 x2) (x3 y3) (x4 y3))))
-  (origs (y3 (0 0)) (x2 (0 0)) (x1 (0 0))))
-
-(defskeleton wonthull
-  (vars (x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 y3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1 y3)
-  (operation nonce-test (contracted (x2 y3) (x4 y3)) y3 (0 1)
-    (enc "okay" y3 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 y3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 5)
-  (parent 3)
-  (seen 4)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull
-  (vars (x1 x2 x4 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x2) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x2) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x2) (y2 x2) (y3 x2) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1 x2)
-  (operation nonce-test (added-strand resp 2) x2 (0 1)
-    (enc "okay" y3 x2 (pubk a)) (enc x1 x2 (pubk a))
-    (enc x2 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x2 (pubk a)) (enc x2 x2 (pubk a))))
-      (recv (enc "okay" x2 x4 (pubk a))))
-    ((recv (enc x2 x2 (pubk a))) (send (enc "okay" y3 x2 (pubk a))))
-    ((recv (enc x2 x2 (pubk a))) (send (enc "okay" x2 x2 (pubk a)))))
-  (label 6)
-  (parent 3)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull
-  (vars (x1 x2 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x2) (x4 x2) (a a))
-  (defstrand resp 2 (y1 x2) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x2) (y2 x2) (y3 x2) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1 x2)
-  (operation nonce-test (contracted (x4 x2)) x2 (0 1)
-    (enc "okay" x2 x2 (pubk a)) (enc "okay" y3 x2 (pubk a))
-    (enc x1 x2 (pubk a)) (enc x2 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x2 (pubk a)) (enc x2 x2 (pubk a))))
-      (recv (enc "okay" x2 x2 (pubk a))))
-    ((recv (enc x2 x2 (pubk a))) (send (enc "okay" y3 x2 (pubk a))))
-    ((recv (enc x2 x2 (pubk a))) (send (enc "okay" x2 x2 (pubk a)))))
-  (label 7)
-  (parent 6)
-  (seen 5)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
-
-(defprotocol wonthull basic
-  (defrole init
-    (vars (a name) (x1 x2 x3 x4 text))
-    (trace (send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    (non-orig (privk a))
-    (uniq-orig x1 x2 x3))
-  (defrole resp
-    (vars (a name) (y1 y2 y3 text))
-    (trace (recv (enc y1 y2 (pubk a)))
-      (send (enc "okay" y3 y1 (pubk a))))))
-
-(defskeleton wonthull
-  (vars (x1 x3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1 x3)
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a)))))
-  (label 8)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((a a) (x1 x1) (x3 x3))))
-  (origs (x3 (0 0)) (x1 (0 0))))
-
-(comment "Nothing left to do")
diff --git a/tst/wonthull2.scm b/tst/wonthull2.scm
deleted file mode 100644
--- a/tst/wonthull2.scm
+++ /dev/null
@@ -1,38 +0,0 @@
-(herald wonthull2 (bound 9))
-;;;  Wonthull 2:  Demonstrates a subtle incompleteness.
-;;;
-;;;  From Wonthull 1, the difference here is that
-;;; Wonthull 2 should be able to do augmentation with
-;;; non-trivial deorigination immediately after the POV.
-;;;  Interestingly, Wonthull 2 (without deorigination)
-;;; actually finds the missing shape, but via variable
-;;; separation.
-
-(defprotocol wonthull2 basic
-  (defrole init (vars (a name) (x1 x2 x3 x4 text))
-    (trace
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x2 (pubk a))))
-	(recv (enc "okay" x3 x4 (pubk a)))
-    )
-    (uniq-orig x3)
-    (non-orig (privk a))
-  )
-  (defrole resp (vars (a name) (y1 y2 y3 text))
-     (trace
-       (recv (enc y1 y2 (pubk a)) )
-       (send (enc "okay" y3 y1 (pubk a)) )
-     )
-  )
-)
-
-(defskeleton wonthull2
-  (vars (a name) (n text) (x1 x2 x3 x4 text))
-  (defstrand init 2)
-)
-
-(defskeleton wonthull2
-  (vars (a name) (n text) (x1 x2 x3 x4 text))
-  (defstrand init 2 (x2 x3) (x4 x1))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-)
diff --git a/tst/wonthull2.tst b/tst/wonthull2.tst
deleted file mode 100644
--- a/tst/wonthull2.tst
+++ /dev/null
@@ -1,9700 +0,0 @@
-(herald wonthull2 (bound 9))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from wonthull2.scm")
-(comment "Strand count bounded at 9")
-
-(defprotocol wonthull2 basic
-  (defrole init
-    (vars (a name) (x1 x2 x3 x4 text))
-    (trace (send (cat (enc x1 x3 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    (non-orig (privk a))
-    (uniq-orig x3))
-  (defrole resp
-    (vars (a name) (y1 y2 y3 text))
-    (trace (recv (enc y1 y2 (pubk a)))
-      (send (enc "okay" y3 y1 (pubk a))))))
-
-(defskeleton wonthull2
-  (vars (x1 x2 x3 x4 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x3) (x4 x4) (a a))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a)))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (x3 (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 x3 x4 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x3) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x2) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (0 1)
-    (enc x1 x3 (pubk a)) (enc x3 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    ((recv (enc x3 x2 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 x4 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x1) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a))))
-      (recv (enc "okay" x1 x4 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 2)
-  (parent 0)
-  (seen 5)
-  (unrealized (0 1))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x2) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x3 y3) (x4 y3)) y3 (0 1)
-    (enc "okay" y3 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x2 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x2 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 3)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (x1 x1) (x2 x2) (x3 y3) (x4 y3))))
-  (origs (y3 (0 0))))
-
-(defskeleton wonthull2
-  (vars (x1 x2 x3 x4 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x3) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x2) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (0 1)
-    (enc "okay" y3 x3 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x3 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    ((recv (enc x3 x2 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x2 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 4)
-  (parent 1)
-  (unrealized (0 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 x4 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x1) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc "okay" y3 x1 (pubk a)) (enc x1 x1 (pubk a))
-    (enc x1 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a))))
-      (recv (enc "okay" x1 x4 (pubk a))))
-    ((recv (enc x1 x2 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 5)
-  (parent 1)
-  (seen 10)
-  (unrealized (0 1))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x2 y3 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x2) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x1 y3) (x4 y3)) y3 (0 1)
-    (enc "okay" y3 y3 (pubk a)) (enc y3 x2 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x2 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 6)
-  (parent 2)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 x4 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x1) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc "okay" y3 x1 (pubk a)) (enc x1 x1 (pubk a))
-    (enc x1 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a))))
-      (recv (enc "okay" x1 x4 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 7)
-  (parent 2)
-  (seen 13)
-  (unrealized (0 1))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x2) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x3 x1) (x4 x1)) x1 (0 1)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x2 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x2 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 8)
-  (parent 4)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x2) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x3 y3) (x4 y3)) y3 (0 1)
-    (enc "okay" x1 y3 (pubk a)) (enc "okay" y3 y3 (pubk a))
-    (enc x1 y3 (pubk a)) (enc y3 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x2 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x2 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x2 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 9)
-  (parent 4)
-  (seen 3)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 x4 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x1) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x2) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a))))
-      (recv (enc "okay" x1 x4 (pubk a))))
-    ((recv (enc x1 x2 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x2 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 10)
-  (parent 4)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x2 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x2) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x1 y3) (x4 y3)) y3 (0 1)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc y3 x2 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x2 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x2 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 11)
-  (parent 5)
-  (seen 16)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x2 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x2) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (x1 y3-0) (x4 y3-0)) y3-0 (0 1)
-    (enc "okay" y3 y3-0 (pubk a)) (enc "okay" y3-0 y3-0 (pubk a))
-    (enc y3-0 x2 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x2 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x2 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a)))))
-  (label 12)
-  (parent 5)
-  (seen 6)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 x4 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x1) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc "okay" y3 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a))))
-      (recv (enc "okay" x1 x4 (pubk a))))
-    ((recv (enc x1 x2 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 13)
-  (parent 5)
-  (unrealized (0 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x2 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x2) (x3 y3-0) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3 y3-0)
-  (operation generalization separated y3-0)
-  (traces
-    ((send (cat (enc y3 y3-0 (pubk a)) (enc y3-0 x2 (pubk a))))
-      (recv (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 14)
-  (parent 6)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x4 x1)) x1 (0 1)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 15)
-  (parent 7)
-  (seen 6)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x2) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation generalization deleted (1 0))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x2 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 16)
-  (parent 8)
-  (seen 3)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x2) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x4 x1)) x1 (0 1)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x1 (pubk a))
-    (enc x1 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x2 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x2 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 17)
-  (parent 10)
-  (seen 11)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x2 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x2) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x4 x1)) x1 (0 1)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x1 (pubk a))
-    (enc x1 x2 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x2 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x2 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 18)
-  (parent 13)
-  (seen 15)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x2 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x2) (x3 y3-0) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation generalization forgot y3)
-  (traces
-    ((send (cat (enc y3 y3-0 (pubk a)) (enc y3-0 x2 (pubk a))))
-      (recv (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 19)
-  (parent 14)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (x1 y3) (x2 x2) (x3 y3-0) (x4 y3))))
-  (origs (y3 (0 0)) (y3-0 (0 0))))
-
-(comment "Nothing left to do")
-
-(defprotocol wonthull2 basic
-  (defrole init
-    (vars (a name) (x1 x2 x3 x4 text))
-    (trace (send (cat (enc x1 x3 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    (non-orig (privk a))
-    (uniq-orig x3))
-  (defrole resp
-    (vars (a name) (y1 y2 y3 text))
-    (trace (recv (enc y1 y2 (pubk a)))
-      (send (enc "okay" y3 y1 (pubk a))))))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 x3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3-0)
-  (traces
-    ((send (cat (enc x1-0 x3-0 (pubk a)) (enc x3-0 x3 (pubk a))))
-      (recv (enc "okay" x3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0)))
-      (send (enc "okay" x3 x1 (pubk a-0)))))
-  (label 20)
-  (unrealized (0 1))
-  (origs (x3-0 (0 0)))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 2 1 resp 2) x3-0 (0 1)
-    (enc x1-0 x3-0 (pubk a)) (enc x3-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0)))
-      (send (enc "okay" x3 x1 (pubk a-0)))))
-  (label 21)
-  (parent 20)
-  (unrealized (1 0))
-  (origs (x3 (0 0)))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 text) (a name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 2 1 resp 2) x3-0 (0 1)
-    (enc x1-0 x3-0 (pubk a-0)) (enc x3-0 x3 (pubk a-0)))
-  (traces
-    ((send (cat (enc x1-0 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a)))))
-  (label 22)
-  (parent 20)
-  (seen 25)
-  (unrealized (0 1))
-  (origs (x1 (0 0)))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 x3-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3-0) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3-0)
-  (operation nonce-test (added-strand resp 2) x3-0 (0 1)
-    (enc x1-0 x3-0 (pubk a)) (enc x3-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3-0 (pubk a)) (enc x3-0 x3 (pubk a))))
-      (recv (enc "okay" x3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3-0 x3 (pubk a)))
-      (send (enc "okay" y3 x3-0 (pubk a)))))
-  (label 23)
-  (parent 20)
-  (seen 29)
-  (unrealized (0 1))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (added-strand resp 2) x1-0 (0 1)
-    (enc x1-0 x3 (pubk a)) (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x3 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a)))))
-  (label 24)
-  (parent 20)
-  (seen 28 33)
-  (unrealized (0 1))
-  (comment "5 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 25)
-  (parent 21)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((x1 x3) (x3 x3) (a a) (x1-0 x1) (x3-0 x3) (a-0 a))))
-  (origs (x3 (0 0))))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a)))))
-  (label 26)
-  (parent 21)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((x1 x1) (x3 x3) (a a) (x1-0 x1) (x3-0 x3) (a-0 a))))
-  (origs (x3 (0 0))))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc x3 x3 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 27)
-  (parent 21)
-  (unrealized (1 0))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc "okay" x3 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 28)
-  (parent 22)
-  (unrealized (0 1))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc "okay" x3 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1-0 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 29)
-  (parent 22)
-  (seen 44)
-  (unrealized (0 1))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x1-0 y3) (x3-0 y3)) y3 (0 1)
-    (enc "okay" y3 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 30)
-  (parent 23)
-  (seen 47)
-  (unrealized (1 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 x3-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3-0) (y2 x3) (y3 x1-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3-0)
-  (operation nonce-test (added-strand resp 2) x3-0 (0 1)
-    (enc "okay" y3 x3-0 (pubk a)) (enc x1-0 x3-0 (pubk a))
-    (enc x3-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3-0 (pubk a)) (enc x3-0 x3 (pubk a))))
-      (recv (enc "okay" x3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3-0 x3 (pubk a))) (send (enc "okay" y3 x3-0 (pubk a))))
-    ((recv (enc x3-0 x3 (pubk a)))
-      (send (enc "okay" x1-0 x3-0 (pubk a)))))
-  (label 31)
-  (parent 23)
-  (seen 45)
-  (unrealized (0 1))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 3 1 resp 2) x3-0 (0 1)
-    (enc "okay" y3 x3-0 (pubk a)) (enc x1-0 x3-0 (pubk a))
-    (enc x3-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 32)
-  (parent 23)
-  (seen 27 46)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (added-strand resp 2) x1-0 (0 1)
-    (enc "okay" y3 x1-0 (pubk a)) (enc x1-0 x3 (pubk a))
-    (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x3 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1-0 x3 (pubk a))) (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3-0 x1-0 (pubk a)))))
-  (label 33)
-  (parent 23)
-  (seen 36 44 54)
-  (unrealized (0 1))
-  (comment "6 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x1 y3) (x1-0 y3)) y3 (0 1)
-    (enc "okay" y3 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 34)
-  (parent 24)
-  (seen 42)
-  (unrealized (1 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (added-strand resp 2) x1-0 (0 1)
-    (enc "okay" y3 x1-0 (pubk a)) (enc x1-0 x3 (pubk a))
-    (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x3 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a)))))
-  (label 35)
-  (parent 24)
-  (seen 59)
-  (unrealized (0 1))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x1-0) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1-0) (y3 x1-0) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (displaced 3 2 resp 2) x1-0 (0 1)
-    (enc "okay" y3 x1-0 (pubk a)) (enc x1-0 x3 (pubk a))
-    (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x1-0 (pubk a-0)))
-      (send (enc "okay" x1-0 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a)))))
-  (label 36)
-  (parent 24)
-  (seen 43)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 37)
-  (parent 27)
-  (seen 25)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 38)
-  (parent 27)
-  (seen 26)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a)))))
-  (label 39)
-  (parent 27)
-  (unrealized (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 40)
-  (parent 27)
-  (seen 69)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc "okay" x3 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 41)
-  (parent 28)
-  (seen 42)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 3 2 resp 2) x1 (0 1)
-    (enc "okay" x3 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 42)
-  (parent 28)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 3 2 resp 2) x1 (0 1)
-    (enc "okay" x3 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 43)
-  (parent 28)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc "okay" x3 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 44)
-  (parent 28)
-  (seen 43)
-  (unrealized (0 1))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc "okay" x3 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1-0 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1-0 x1 (pubk a)))))
-  (label 45)
-  (parent 29)
-  (unrealized (0 1))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 3 1 resp 2) x1-0 (0 1)
-    (enc "okay" x3 x1-0 (pubk a)) (enc "okay" y3 x1-0 (pubk a))
-    (enc x1-0 x3 (pubk a)) (enc x1 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 46)
-  (parent 29)
-  (seen 25)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 3 2 resp 2) x1-0 (0 1)
-    (enc "okay" x3 x1-0 (pubk a)) (enc "okay" y3 x1-0 (pubk a))
-    (enc x1-0 x3 (pubk a)) (enc x1 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 47)
-  (parent 29)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((x1 y3) (x3 x3) (a a) (x1-0 x1) (x3-0 y3) (a-0 a))))
-  (origs (y3 (0 0))))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 3 2 resp 2) y3 (1 0)
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 48)
-  (parent 30)
-  (unrealized (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 49)
-  (parent 30)
-  (seen 82)
-  (unrealized (1 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 50)
-  (parent 30)
-  (seen 83 86)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1) (x3-0 x1)) x1 (0 1)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 51)
-  (parent 31)
-  (seen 80)
-  (unrealized (1 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x1-0 y3) (x3-0 y3)) y3 (0 1)
-    (enc "okay" x1 y3 (pubk a)) (enc "okay" y3 y3 (pubk a))
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 52)
-  (parent 31)
-  (seen 50 79)
-  (unrealized (1 0))
-  (comment "5 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 4 1 resp 2) x3-0 (0 1)
-    (enc "okay" x1-0 x3-0 (pubk a)) (enc "okay" y3 x3-0 (pubk a))
-    (enc x1-0 x3-0 (pubk a)) (enc x3-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a)))))
-  (label 53)
-  (parent 31)
-  (seen 78)
-  (unrealized (1 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (added-strand resp 2) x1-0 (0 1)
-    (enc "okay" x1-0 x1-0 (pubk a)) (enc "okay" y3 x1-0 (pubk a))
-    (enc x1-0 x3 (pubk a)) (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x3 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1-0 x3 (pubk a))) (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x3 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3-0 x1-0 (pubk a)))))
-  (label 54)
-  (parent 31)
-  (seen 64)
-  (unrealized (0 1))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 55)
-  (parent 32)
-  (seen 26)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc x3 x3 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 56)
-  (parent 32)
-  (seen 40)
-  (unrealized (1 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x1 y3) (x1-0 y3)) y3 (0 1)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 57)
-  (parent 33)
-  (seen 50 77)
-  (unrealized (1 0))
-  (comment "5 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (x1 y3-0) (x1-0 y3-0)) y3-0 (0 1)
-    (enc "okay" y3 y3-0 (pubk a)) (enc "okay" y3-0 y3-0 (pubk a))
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a)))))
-  (label 58)
-  (parent 33)
-  (seen 62 76)
-  (unrealized (1 0))
-  (comment "5 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (added-strand resp 2) x1-0 (0 1)
-    (enc "okay" y3 x1-0 (pubk a)) (enc "okay" y3-0 x1-0 (pubk a))
-    (enc x1-0 x3 (pubk a)) (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x3 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1-0 x3 (pubk a))) (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3-0 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a)))))
-  (label 59)
-  (parent 33)
-  (seen 64)
-  (unrealized (0 1))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 3 2 resp 2) y3 (1 0)
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 60)
-  (parent 34)
-  (unrealized (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 61)
-  (parent 34)
-  (seen 113)
-  (unrealized (1 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 62)
-  (parent 34)
-  (seen 114 117)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1)) x1 (0 1)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 63)
-  (parent 35)
-  (seen 41 61)
-  (unrealized (1 0))
-  (comment "5 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x1-0) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1-0) (y3 x1-0) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (displaced 4 3 resp 2) x1-0 (0 1)
-    (enc "okay" x1-0 x1-0 (pubk a)) (enc "okay" y3 x1-0 (pubk a))
-    (enc x1-0 x3 (pubk a)) (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x1-0 (pubk a-0)))
-      (send (enc "okay" x1-0 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a)))))
-  (label 64)
-  (parent 35)
-  (unrealized (1 0))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x1-0) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1-0) (y3 x1-0) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (displaced 3 2 resp 2) x1-0 (1 0)
-    (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x1-0 (pubk a-0)))
-      (send (enc "okay" x1-0 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a)))))
-  (label 65)
-  (parent 36)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x1-0) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1-0) (y3 x1-0) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (added-strand resp 2) x1-0 (1 0)
-    (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x1-0 (pubk a-0)))
-      (send (enc "okay" x1-0 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3-0 x1-0 (pubk a)))))
-  (label 66)
-  (parent 36)
-  (seen 128)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x1 x3 (pubk a)) (enc "okay" y3 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 67)
-  (parent 39)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x1 x3 (pubk a)) (enc "okay" y3 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 68)
-  (parent 39)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" x1-0 x3 (pubk a)) (enc "okay" y3 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 69)
-  (parent 39)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" y3 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 70)
-  (parent 40)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" y3 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 71)
-  (parent 40)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3-0) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation generalization separated y3-0)
-  (traces
-    ((send (cat (enc y3 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 72)
-  (parent 42)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 73)
-  (parent 43)
-  (seen 25)
-  (unrealized)
-  (origs (x1 (0 0)))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc "okay" x3 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 74)
-  (parent 44)
-  (seen 76)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 1)
-    (enc "okay" x3 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 75)
-  (parent 44)
-  (seen 80)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 4 2 resp 2) x1 (0 1)
-    (enc "okay" x3 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 76)
-  (parent 44)
-  (seen 42)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (displaced 4 3 resp 2) x1 (0 1)
-    (enc "okay" x3 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a)))))
-  (label 77)
-  (parent 44)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 4 1 resp 2) x1-0 (0 1)
-    (enc "okay" x3 x1-0 (pubk a)) (enc "okay" x1 x1-0 (pubk a))
-    (enc "okay" y3 x1-0 (pubk a)) (enc x1-0 x3 (pubk a))
-    (enc x1 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 78)
-  (parent 45)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 4 2 resp 2) x1-0 (0 1)
-    (enc "okay" x3 x1-0 (pubk a)) (enc "okay" x1 x1-0 (pubk a))
-    (enc "okay" y3 x1-0 (pubk a)) (enc x1-0 x3 (pubk a))
-    (enc x1 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 79)
-  (parent 45)
-  (seen 47)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 4 3 resp 2) x1-0 (0 1)
-    (enc "okay" x3 x1-0 (pubk a)) (enc "okay" x1 x1-0 (pubk a))
-    (enc "okay" y3 x1-0 (pubk a)) (enc x1-0 x3 (pubk a))
-    (enc x1 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 80)
-  (parent 45)
-  (seen 138)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 81)
-  (parent 48)
-  (seen 47)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 82)
-  (parent 48)
-  (unrealized (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 83)
-  (parent 48)
-  (seen 142)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3-0 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 84)
-  (parent 49)
-  (seen 47)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3-0 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 85)
-  (parent 49)
-  (seen 141)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 86)
-  (parent 49)
-  (seen 142 145)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 87)
-  (parent 50)
-  (seen 138)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 88)
-  (parent 50)
-  (seen 147)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 89)
-  (parent 51)
-  (seen 86)
-  (unrealized (1 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 4 2 resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 90)
-  (parent 51)
-  (seen 86)
-  (unrealized (1 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 4 3 resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 91)
-  (parent 51)
-  (seen 151 155)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 92)
-  (parent 51)
-  (seen 152 154 157)
-  (unrealized (1 0))
-  (comment "5 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 4 2 resp 2) y3 (1 0)
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 93)
-  (parent 52)
-  (unrealized (1 0))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 4 3 resp 2) y3 (1 0)
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 94)
-  (parent 52)
-  (seen 161 163)
-  (unrealized (1 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 95)
-  (parent 52)
-  (seen 86 154 162)
-  (unrealized (1 0))
-  (comment "5 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 96)
-  (parent 53)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 4 2 resp 2) x3 (1 0)
-    (enc x3 x3 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a)))))
-  (label 97)
-  (parent 53)
-  (seen 39)
-  (unrealized (1 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 4 3 resp 2) x3 (1 0)
-    (enc x3 x3 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a)))))
-  (label 98)
-  (parent 53)
-  (seen 39 130)
-  (unrealized (1 0))
-  (comment "5 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc x3 x3 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 99)
-  (parent 53)
-  (seen 130 171)
-  (unrealized (1 0))
-  (comment "6 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1)) x1 (0 1)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 100)
-  (parent 54)
-  (seen 75 89 107)
-  (unrealized (1 0))
-  (comment "6 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 101)
-  (parent 56)
-  (seen 37)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 102)
-  (parent 56)
-  (seen 38)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a)))))
-  (label 103)
-  (parent 56)
-  (seen 69)
-  (unrealized (1 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 104)
-  (parent 56)
-  (seen 184)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 105)
-  (parent 57)
-  (seen 88)
-  (unrealized (1 0))
-  (comment "5 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 4 2 resp 2) y3 (1 0)
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 106)
-  (parent 57)
-  (seen 83 189)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 107)
-  (parent 57)
-  (seen 86 190 192)
-  (unrealized (1 0))
-  (comment "5 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (displaced 4 3 resp 2) y3-0 (1 0)
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a)))))
-  (label 108)
-  (parent 58)
-  (seen 114)
-  (unrealized (1 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (added-strand resp 2) y3-0 (1 0)
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a)))))
-  (label 109)
-  (parent 58)
-  (seen 117 196)
-  (unrealized (1 0))
-  (comment "5 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (added-strand resp 2) y3-0 (1 0)
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a)))))
-  (label 110)
-  (parent 58)
-  (seen 119 197 200)
-  (unrealized (1 0))
-  (comment "5 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1)) x1 (0 1)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 111)
-  (parent 59)
-  (seen 74 109 122)
-  (unrealized (1 0))
-  (comment "6 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 112)
-  (parent 60)
-  (seen 42)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 113)
-  (parent 60)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 114)
-  (parent 60)
-  (seen 207)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3-0 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 115)
-  (parent 61)
-  (seen 42)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3-0 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 116)
-  (parent 61)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3-0 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 117)
-  (parent 61)
-  (seen 207 210)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3-0 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 118)
-  (parent 62)
-  (seen 42)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3-0 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 119)
-  (parent 62)
-  (seen 212)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 4 3 resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 120)
-  (parent 63)
-  (seen 113)
-  (unrealized (1 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 121)
-  (parent 63)
-  (seen 116 215)
-  (unrealized (1 0))
-  (comment "5 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 122)
-  (parent 63)
-  (seen 117 216 219)
-  (unrealized (1 0))
-  (comment "5 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x1 (1 0)
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 123)
-  (parent 64)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x1-0) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1-0) (y3 x1-0) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (displaced 4 2 resp 2) x1-0 (1 0)
-    (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x1-0 (pubk a-0)))
-      (send (enc "okay" x1-0 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a)))))
-  (label 124)
-  (parent 64)
-  (seen 128)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x1-0) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1-0) (y3 x1-0) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (displaced 4 3 resp 2) x1-0 (1 0)
-    (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x1-0 (pubk a-0)))
-      (send (enc "okay" x1-0 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a)))))
-  (label 125)
-  (parent 64)
-  (seen 128 130)
-  (unrealized (1 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x1-0) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1-0) (y3 x1-0) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (added-strand resp 2) x1-0 (1 0)
-    (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x1-0 (pubk a-0)))
-      (send (enc "okay" x1-0 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3-0 x1-0 (pubk a)))))
-  (label 126)
-  (parent 64)
-  (seen 130 224)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x1 (1 0)
-    (enc "okay" y3 x1 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 127)
-  (parent 65)
-  (seen 73)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x1-0) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1-0) (y3 x1-0) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (added-strand resp 2) x1-0 (1 0)
-    (enc "okay" y3 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x1-0 (pubk a-0)))
-      (send (enc "okay" x1-0 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a)))))
-  (label 128)
-  (parent 65)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 129)
-  (parent 66)
-  (seen 127)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x1-0) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1-0) (y3 x1-0) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (added-strand resp 2) x1-0 (1 0)
-    (enc "okay" y3-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x1-0 (pubk a-0)))
-      (send (enc "okay" x1-0 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3-0 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a)))))
-  (label 130)
-  (parent 66)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 131)
-  (parent 67)
-  (seen 25)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 132)
-  (parent 68)
-  (seen 26)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" x1 x3 (pubk a))
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 133)
-  (parent 69)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" x1 x3 (pubk a))
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 134)
-  (parent 69)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 135)
-  (parent 70)
-  (seen 25)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 136)
-  (parent 71)
-  (seen 26)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3-0) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a) (privk a-0))
-  (uniq-orig y3-0)
-  (operation generalization separated a-0)
-  (traces
-    ((send (cat (enc y3 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 137)
-  (parent 72)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 138)
-  (parent 77)
-  (seen 47)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 139)
-  (parent 78)
-  (seen 25)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 140)
-  (parent 82)
-  (seen 81)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 141)
-  (parent 82)
-  (seen 142)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 142)
-  (parent 82)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 143)
-  (parent 83)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" x1 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 144)
-  (parent 85)
-  (seen 164)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 145)
-  (parent 85)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 146)
-  (parent 86)
-  (seen 87)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 147)
-  (parent 86)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 148)
-  (parent 88)
-  (seen 206)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 149)
-  (parent 89)
-  (seen 87)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 150)
-  (parent 89)
-  (seen 147)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 5 3 resp 2) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 151)
-  (parent 89)
-  (seen 142)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 152)
-  (parent 89)
-  (seen 145 239 241)
-  (unrealized (1 0))
-  (comment "5 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 153)
-  (parent 90)
-  (seen 138)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 154)
-  (parent 90)
-  (seen 145)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 4 3 resp 2) x1 (1 0)
-    (enc "okay" y3 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 155)
-  (parent 90)
-  (seen 142)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 156)
-  (parent 91)
-  (seen 235)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 157)
-  (parent 91)
-  (seen 241)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 158)
-  (parent 92)
-  (seen 153)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 159)
-  (parent 92)
-  (seen 243)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 160)
-  (parent 93)
-  (seen 81)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 4 3 resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 161)
-  (parent 93)
-  (seen 83)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 162)
-  (parent 93)
-  (seen 145)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 163)
-  (parent 93)
-  (seen 145)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" x1 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 164)
-  (parent 94)
-  (seen 47)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3-0 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 165)
-  (parent 95)
-  (seen 84)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3-0 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 166)
-  (parent 95)
-  (seen 145 250)
-  (unrealized (1 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 167)
-  (parent 96)
-  (seen 26)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 168)
-  (parent 97)
-  (seen 139)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 169)
-  (parent 97)
-  (seen 167)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a)))))
-  (label 170)
-  (parent 97)
-  (unrealized (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 171)
-  (parent 97)
-  (seen 69 255)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x1 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 172)
-  (parent 98)
-  (seen 131)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x1 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 173)
-  (parent 98)
-  (seen 132)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 174)
-  (parent 98)
-  (seen 69 130)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 175)
-  (parent 99)
-  (seen 168)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 176)
-  (parent 99)
-  (seen 169)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a)))))
-  (label 177)
-  (parent 99)
-  (seen 255)
-  (unrealized (1 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 178)
-  (parent 99)
-  (seen 262)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 179)
-  (parent 100)
-  (seen 150 190)
-  (unrealized (1 0))
-  (comment "6 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 5 3 resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 180)
-  (parent 100)
-  (seen 151 192 267)
-  (unrealized (1 0))
-  (comment "5 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 181)
-  (parent 100)
-  (seen 152 194 268 270)
-  (unrealized (1 0))
-  (comment "6 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x1 x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 182)
-  (parent 103)
-  (seen 67)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x1 x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 183)
-  (parent 103)
-  (seen 68)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" x1-0 x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 184)
-  (parent 103)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 185)
-  (parent 104)
-  (seen 70)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 186)
-  (parent 104)
-  (seen 71)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3-1 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 187)
-  (parent 105)
-  (seen 87)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3-1 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 188)
-  (parent 105)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 5 2 resp 2) y3 (1 0)
-    (enc "okay" y3-1 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 189)
-  (parent 105)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3-1 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-2 y3 (pubk a)))))
-  (label 190)
-  (parent 105)
-  (seen 147 276 278)
-  (unrealized (1 0))
-  (comment "5 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 191)
-  (parent 106)
-  (seen 235)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 192)
-  (parent 106)
-  (seen 142 278)
-  (unrealized (1 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3-1 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 193)
-  (parent 107)
-  (seen 153)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3-1 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 194)
-  (parent 107)
-  (seen 145 280)
-  (unrealized (1 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (a-0 a)) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))
-    (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a)))))
-  (label 195)
-  (parent 108)
-  (seen 112)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (added-strand resp 2) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))
-    (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a)))))
-  (label 196)
-  (parent 108)
-  (seen 207)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (added-strand resp 2) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))
-    (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a)))))
-  (label 197)
-  (parent 108)
-  (seen 284)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (a-0 a)) y3-0 (1 0)
-    (enc "okay" y3-1 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))
-    (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a)))))
-  (label 198)
-  (parent 109)
-  (seen 115)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (added-strand resp 2) y3-0 (1 0)
-    (enc "okay" y3-1 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))
-    (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a)))))
-  (label 199)
-  (parent 109)
-  (seen 210)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (added-strand resp 2) y3-0 (1 0)
-    (enc "okay" y3-1 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))
-    (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-2 y3-0 (pubk a)))))
-  (label 200)
-  (parent 109)
-  (seen 212 284 287)
-  (unrealized (1 0))
-  (comment "5 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (a-0 a)) y3-0 (1 0)
-    (enc "okay" y3-1 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))
-    (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a)))))
-  (label 201)
-  (parent 110)
-  (seen 118)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (added-strand resp 2) y3-0 (1 0)
-    (enc "okay" y3-1 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))
-    (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a)))))
-  (label 202)
-  (parent 110)
-  (seen 289)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 5 4 resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 203)
-  (parent 111)
-  (seen 196 216)
-  (unrealized (1 0))
-  (comment "5 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 204)
-  (parent 111)
-  (seen 199 219 292)
-  (unrealized (1 0))
-  (comment "6 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 205)
-  (parent 111)
-  (seen 200 221 293 296)
-  (unrealized (1 0))
-  (comment "6 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 206)
-  (parent 113)
-  (seen 112)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 207)
-  (parent 113)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 208)
-  (parent 114)
-  (seen 112)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 209)
-  (parent 116)
-  (seen 206)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 210)
-  (parent 116)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3-0 y3 (pubk a)) (enc "okay" y3-1 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 211)
-  (parent 117)
-  (seen 118)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3-0 y3 (pubk a)) (enc "okay" y3-1 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 212)
-  (parent 117)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 213)
-  (parent 119)
-  (seen 245)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 214)
-  (parent 120)
-  (seen 112)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 215)
-  (parent 120)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 216)
-  (parent 120)
-  (seen 207 303)
-  (unrealized (1 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 217)
-  (parent 121)
-  (seen 115)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 218)
-  (parent 121)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 219)
-  (parent 121)
-  (seen 210 303 306)
-  (unrealized (1 0))
-  (comment "5 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 220)
-  (parent 122)
-  (seen 118)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 221)
-  (parent 122)
-  (seen 212 308)
-  (unrealized (1 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 222)
-  (parent 123)
-  (seen 73)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x1 (1 0)
-    (enc "okay" y3 x1 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 223)
-  (parent 124)
-  (seen 222)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x1-0) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1-0) (y3 x1-0) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (added-strand resp 2) x1-0 (1 0)
-    (enc "okay" y3 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x1-0 (pubk a-0)))
-      (send (enc "okay" x1-0 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a)))))
-  (label 224)
-  (parent 124)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 225)
-  (parent 125)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 226)
-  (parent 126)
-  (seen 223)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x1-0) (x3 x1-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1-0) (y3 x1-0) (a a-0))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1-0) (y2 x1-0) (y3 x1-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1-0)
-  (operation nonce-test (added-strand resp 2) x1-0 (1 0)
-    (enc "okay" y3-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x1-0 (pubk a)) (enc x1-0 x1-0 (pubk a))))
-      (recv (enc "okay" x1-0 x1 (pubk a))))
-    ((recv (enc x1 x1-0 (pubk a-0)))
-      (send (enc "okay" x1-0 x1 (pubk a-0))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" y3-0 x1-0 (pubk a))))
-    ((recv (enc x1-0 x1-0 (pubk a)))
-      (send (enc "okay" x1-0 x1-0 (pubk a)))))
-  (label 227)
-  (parent 126)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 228)
-  (parent 128)
-  (seen 311)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 229)
-  (parent 130)
-  (seen 228)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 230)
-  (parent 133)
-  (seen 135)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 231)
-  (parent 134)
-  (seen 136)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3-0) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (1 0)) ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation generalization forgot (privk a-0))
-  (traces
-    ((send (cat (enc y3 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 232)
-  (parent 137)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((x1 y3) (x3 x3) (a a) (x1-0 y3) (x3-0 y3-0) (a-0 a-0))))
-  (origs (y3-0 (0 0))))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" x1 y3 (pubk a)) (enc "okay" y3 y3 (pubk a))
-    (enc "okay" y3-0 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 233)
-  (parent 141)
-  (seen 248)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 234)
-  (parent 142)
-  (seen 143)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation generalization deleted (3 0))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 235)
-  (parent 143)
-  (seen 138)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 236)
-  (parent 145)
-  (seen 234)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc "okay" y3-0 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 237)
-  (parent 147)
-  (seen 299)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 238)
-  (parent 150)
-  (seen 148)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 239)
-  (parent 150)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 240)
-  (parent 151)
-  (seen 143)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 241)
-  (parent 151)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 242)
-  (parent 152)
-  (seen 146)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 243)
-  (parent 152)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 244)
-  (parent 154)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 245)
-  (parent 155)
-  (seen 235)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 246)
-  (parent 157)
-  (seen 245)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 247)
-  (parent 159)
-  (seen 244)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" x1 y3 (pubk a)) (enc "okay" y3 y3 (pubk a))
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 248)
-  (parent 161)
-  (seen 81)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 249)
-  (parent 162)
-  (seen 140)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 250)
-  (parent 162)
-  (seen 145)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 251)
-  (parent 163)
-  (seen 87)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" x1 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 252)
-  (parent 166)
-  (seen 144)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x1 x3 (pubk a)) (enc "okay" y3 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 253)
-  (parent 170)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x1 x3 (pubk a)) (enc "okay" y3 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 254)
-  (parent 170)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" x1-0 x3 (pubk a)) (enc "okay" y3 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 255)
-  (parent 170)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" y3 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 256)
-  (parent 171)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" y3 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 257)
-  (parent 171)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" x1 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 258)
-  (parent 174)
-  (seen 230)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" x1 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 259)
-  (parent 174)
-  (seen 231)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x1 x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 260)
-  (parent 177)
-  (seen 253)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x1 x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 261)
-  (parent 177)
-  (seen 254)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 2 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0)
-    (enc "okay" x1-0 x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 262)
-  (parent 177)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 263)
-  (parent 178)
-  (seen 256)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 264)
-  (parent 178)
-  (seen 257)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 265)
-  (parent 179)
-  (seen 187)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 266)
-  (parent 179)
-  (seen 276)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 6 3 resp 2) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 267)
-  (parent 179)
-  (seen 278)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 268)
-  (parent 179)
-  (seen 239 280 327 329)
-  (unrealized (1 0))
-  (comment "6 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (0 1)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 269)
-  (parent 180)
-  (seen 191)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 270)
-  (parent 180)
-  (seen 241 329)
-  (unrealized (1 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 271)
-  (parent 181)
-  (seen 193)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 272)
-  (parent 181)
-  (seen 243 331)
-  (unrealized (1 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" x1 x3 (pubk a))
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 273)
-  (parent 184)
-  (seen 133)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" x1 x3 (pubk a))
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 274)
-  (parent 184)
-  (seen 134)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-1 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 275)
-  (parent 188)
-  (seen 302)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-1 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-2 y3 (pubk a)))))
-  (label 276)
-  (parent 188)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-1 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 277)
-  (parent 189)
-  (seen 143)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-1 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-2 y3 (pubk a)))))
-  (label 278)
-  (parent 189)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3-1 y3 (pubk a)) (enc "okay" y3-2 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-2 y3 (pubk a)))))
-  (label 279)
-  (parent 190)
-  (seen 146)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-2) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0)
-    (enc "okay" y3-1 y3 (pubk a)) (enc "okay" y3-2 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-2 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 280)
-  (parent 190)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-1 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 281)
-  (parent 192)
-  (seen 245)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-1 y3 (pubk a))
-    (enc y3 x3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 282)
-  (parent 194)
-  (seen 281)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (a-0 a)) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc "okay" y3-1 y3-0 (pubk a))
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a)))))
-  (label 283)
-  (parent 196)
-  (seen 206)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (added-strand resp 2) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc "okay" y3-1 y3-0 (pubk a))
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-2 y3-0 (pubk a)))))
-  (label 284)
-  (parent 196)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (a-0 a)) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc "okay" y3-1 y3-0 (pubk a))
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a)))))
-  (label 285)
-  (parent 197)
-  (seen 208)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (a-0 a)) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc "okay" y3-1 y3-0 (pubk a))
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a)))))
-  (label 286)
-  (parent 199)
-  (seen 209)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (added-strand resp 2) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc "okay" y3-1 y3-0 (pubk a))
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-2 y3-0 (pubk a)))))
-  (label 287)
-  (parent 199)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (a-0 a)) y3-0 (1 0)
-    (enc "okay" y3-1 y3-0 (pubk a)) (enc "okay" y3-2 y3-0 (pubk a))
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-2 y3-0 (pubk a)))))
-  (label 288)
-  (parent 200)
-  (seen 211)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-2) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (added-strand resp 2) y3-0 (1 0)
-    (enc "okay" y3-1 y3-0 (pubk a)) (enc "okay" y3-2 y3-0 (pubk a))
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a-0)))
-      (send (enc "okay" x3 y3-0 (pubk a-0))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-2 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a)))))
-  (label 289)
-  (parent 200)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (a-0 a)) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc "okay" y3-1 y3-0 (pubk a))
-    (enc y3-0 x3 (pubk a)) (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a)))))
-  (label 290)
-  (parent 202)
-  (seen 213)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 291)
-  (parent 203)
-  (seen 214)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 292)
-  (parent 203)
-  (seen 303)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 293)
-  (parent 203)
-  (seen 284 341)
-  (unrealized (1 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 294)
-  (parent 204)
-  (seen 217)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 295)
-  (parent 204)
-  (seen 306)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 296)
-  (parent 204)
-  (seen 287 308 341 344)
-  (unrealized (1 0))
-  (comment "6 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 297)
-  (parent 205)
-  (seen 220)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 298)
-  (parent 205)
-  (seen 289 346)
-  (unrealized (1 0))
-  (comment "3 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc "okay" y3-1 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 299)
-  (parent 207)
-  (seen 208)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc "okay" y3-1 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 300)
-  (parent 210)
-  (seen 299)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc "okay" y3-1 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 301)
-  (parent 212)
-  (seen 234)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 302)
-  (parent 215)
-  (seen 206)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 303)
-  (parent 215)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 304)
-  (parent 216)
-  (seen 208)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 305)
-  (parent 218)
-  (seen 209)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 306)
-  (parent 218)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 307)
-  (parent 219)
-  (seen 211)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-0 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 308)
-  (parent 219)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 309)
-  (parent 221)
-  (seen 213)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 310)
-  (parent 224)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 311)
-  (parent 225)
-  (seen 73)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 312)
-  (parent 227)
-  (seen 310)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 313)
-  (parent 239)
-  (seen 237)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 314)
-  (parent 241)
-  (seen 234)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 315)
-  (parent 243)
-  (seen 236)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 316)
-  (parent 244)
-  (seen 235)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" x1 y3 (pubk a)) (enc "okay" y3 y3 (pubk a))
-    (enc "okay" y3-0 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x1 y3 (pubk a)))))
-  (label 317)
-  (parent 250)
-  (seen 233)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 318)
-  (parent 253)
-  (seen 131)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a)))))
-  (label 319)
-  (parent 254)
-  (seen 132)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" x1 x3 (pubk a))
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 320)
-  (parent 255)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" x1 x3 (pubk a))
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 321)
-  (parent 255)
-  (unrealized)
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 322)
-  (parent 256)
-  (seen 135)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 323)
-  (parent 257)
-  (seen 136)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" x1 x3 (pubk a))
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 324)
-  (parent 262)
-  (seen 320)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" x1 x3 (pubk a))
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 325)
-  (parent 262)
-  (seen 321)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 326)
-  (parent 266)
-  (seen 275)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((0 0) (7 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 327)
-  (parent 266)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 328)
-  (parent 267)
-  (seen 277)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 329)
-  (parent 267)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc "okay" y3-2 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 330)
-  (parent 268)
-  (seen 279)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((0 0) (7 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc "okay" y3-2 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 331)
-  (parent 268)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (0 1))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 332)
-  (parent 270)
-  (seen 281)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 333)
-  (parent 272)
-  (seen 282)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-1 y3 (pubk a))
-    (enc "okay" y3-2 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-2 y3 (pubk a)))))
-  (label 334)
-  (parent 276)
-  (seen 348)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (1 0)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-1 y3 (pubk a))
-    (enc "okay" y3-2 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-2 y3 (pubk a)))))
-  (label 335)
-  (parent 278)
-  (seen 234)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 y3) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-2) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0)
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-1 y3 (pubk a))
-    (enc "okay" y3-2 y3 (pubk a)) (enc y3 x3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (cat (enc y3 y3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-2 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 336)
-  (parent 280)
-  (seen 335)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (a-0 a)) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc "okay" y3-1 y3-0 (pubk a))
-    (enc "okay" y3-2 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))
-    (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-2 y3-0 (pubk a)))))
-  (label 337)
-  (parent 284)
-  (seen 299)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (a-0 a)) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc "okay" y3-1 y3-0 (pubk a))
-    (enc "okay" y3-2 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))
-    (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-2 y3-0 (pubk a)))))
-  (label 338)
-  (parent 287)
-  (seen 300)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 y3-0) (x2 x3) (x3 y3-0) (x4 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 y3-0) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-2) (a a))
-  (defstrand resp 2 (y1 y3-0) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3-0)
-  (operation nonce-test (contracted (a-0 a)) y3-0 (1 0)
-    (enc "okay" y3-0 y3-0 (pubk a)) (enc "okay" y3-1 y3-0 (pubk a))
-    (enc "okay" y3-2 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))
-    (enc y3-0 y3-0 (pubk a)))
-  (traces
-    ((send (cat (enc y3-0 y3-0 (pubk a)) (enc y3-0 x3 (pubk a))))
-      (recv (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" x3 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a))) (send (enc "okay" y3 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a))))
-    ((recv (enc y3-0 y3-0 (pubk a)))
-      (send (enc "okay" y3-1 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-2 y3-0 (pubk a))))
-    ((recv (enc y3-0 x3 (pubk a)))
-      (send (enc "okay" y3-0 y3-0 (pubk a)))))
-  (label 339)
-  (parent 289)
-  (seen 301)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 340)
-  (parent 292)
-  (seen 302)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 341)
-  (parent 292)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 342)
-  (parent 293)
-  (seen 304)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 343)
-  (parent 295)
-  (seen 305)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((0 0) (7 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 344)
-  (parent 295)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc "okay" y3-2 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 345)
-  (parent 296)
-  (seen 307)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a a-0 name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((0 0) (7 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (1 0)
-    (enc "okay" y3-1 x1 (pubk a)) (enc "okay" y3-2 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 346)
-  (parent 296)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc x1 x3 (pubk a)) (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 347)
-  (parent 298)
-  (seen 309)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0))
-    ((5 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 348)
-  (parent 303)
-  (seen 299)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a)))))
-  (label 349)
-  (parent 306)
-  (seen 300)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-0 x1 (pubk a))
-    (enc "okay" y3-1 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 350)
-  (parent 308)
-  (seen 301)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x1) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x1 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 351)
-  (parent 310)
-  (seen 311)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 352)
-  (parent 320)
-  (seen 230)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((1 1) (0 1))
-    ((2 1) (0 1)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation generalization deleted (2 0))
-  (traces
-    ((send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x1 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 353)
-  (parent 321)
-  (seen 231)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((0 0) (7 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc "okay" y3-2 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 354)
-  (parent 327)
-  (seen 334)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (1 0))
-    ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc "okay" y3-2 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 355)
-  (parent 329)
-  (seen 335)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((0 0) (7 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc "okay" y3-2 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 356)
-  (parent 331)
-  (seen 336)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((1 1) (0 1)) ((2 1) (0 1)) ((3 1) (0 1))
-    ((4 1) (1 0)) ((5 1) (1 0)) ((6 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc "okay" y3-2 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 357)
-  (parent 341)
-  (seen 348)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((0 0) (7 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc "okay" y3-2 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a)))))
-  (label 358)
-  (parent 344)
-  (seen 349)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull2
-  (vars (x3 x1 y3 y3-0 y3-1 y3-2 text) (a name))
-  (defstrand init 2 (x1 x1) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x1) (y3 y3-1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-2) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x1) (a a))
-  (precedes ((0 0) (2 0)) ((0 0) (3 0)) ((0 0) (4 0)) ((0 0) (5 0))
-    ((0 0) (6 0)) ((0 0) (7 0)) ((1 1) (0 1)) ((2 1) (0 1))
-    ((3 1) (0 1)) ((4 1) (0 1)) ((5 1) (1 0)) ((6 1) (1 0))
-    ((7 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (contracted (a-0 a)) x1 (1 0)
-    (enc "okay" x1 x1 (pubk a)) (enc "okay" y3-1 x1 (pubk a))
-    (enc "okay" y3-2 x1 (pubk a)) (enc x1 x3 (pubk a))
-    (enc x1 x1 (pubk a)))
-  (traces
-    ((send (cat (enc x1 x1 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x1 (pubk a))) (send (enc "okay" y3-1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-2 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x1 x1 (pubk a)))))
-  (label 359)
-  (parent 346)
-  (seen 350)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
diff --git a/tst/wonthull3.scm b/tst/wonthull3.scm
deleted file mode 100644
--- a/tst/wonthull3.scm
+++ /dev/null
@@ -1,35 +0,0 @@
-;;;  Wonthull 3:  Demonstrates a subtle incompleteness.
-;;;
-;;;  Demonstrates that the deorigination incompleteness
-;;; is not inherently linked to point and position of
-;;; origination.
-
-(defprotocol wonthull3 basic
-  (defrole init (vars (a name) (x1 x2 x3 x4 text))
-    (trace
-      (send (enc x3 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-	(recv (enc "okay" x3 x4 (pubk a)))
-    )
-    (uniq-orig x3)
-    (non-orig (privk a))
-  )
-  (defrole resp (vars (a name) (y1 y2 y3 text))
-     (trace
-       (recv (enc y1 y2 (pubk a)) )
-       (send (enc "okay" y3 y1 (pubk a)) )
-     )
-  )
-)
-
-(defskeleton wonthull3
-  (vars (a name) (n text) (x1 x2 x3 x4 text))
-  (defstrand init 3)
-)
-
-(defskeleton wonthull3
-  (vars (a name) (n text) (x1 x2 x3 x4 text))
-  (defstrand init 3 (x2 x3) (x4 x1))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-)
diff --git a/tst/wonthull3.tst b/tst/wonthull3.tst
deleted file mode 100644
--- a/tst/wonthull3.tst
+++ /dev/null
@@ -1,1448 +0,0 @@
-(comment "CPSA 2.5.4")
-(comment "All input read from wonthull3.scm")
-
-(defprotocol wonthull3 basic
-  (defrole init
-    (vars (a name) (x1 x2 x3 x4 text))
-    (trace (send (enc x3 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    (non-orig (privk a))
-    (uniq-orig x3))
-  (defrole resp
-    (vars (a name) (y1 y2 y3 text))
-    (trace (recv (enc y1 y2 (pubk a)))
-      (send (enc "okay" y3 y1 (pubk a))))))
-
-(defskeleton wonthull3
-  (vars (x1 x2 x3 x4 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x2) (x3 x3) (x4 x4) (a a))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a)))))
-  (label 0)
-  (unrealized (0 2))
-  (origs (x3 (0 0)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x2 x4 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x2) (x3 x2) (x4 x4) (a a))
-  (non-orig (privk a))
-  (uniq-orig x2)
-  (operation nonce-test (displaced 1 0 init 2) x3 (0 2)
-    (enc x3 (pubk a)) (enc x3 x2 (pubk a)))
-  (traces
-    ((send (enc x2 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc x2 x2 (pubk a))))
-      (recv (enc "okay" x2 x4 (pubk a)))))
-  (label 1)
-  (parent 0)
-  (unrealized (0 2))
-  (origs (x2 (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x2 x3 x4 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x2) (x3 x3) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x2) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (0 2) (enc x3 (pubk a))
-    (enc x3 x2 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    ((recv (enc x3 x2 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 2)
-  (parent 0)
-  (unrealized (0 2) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x2 x4 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x2) (x3 x2) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x2) (y2 x2) (y3 y3) (a a))
-  (precedes ((0 0) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x2)
-  (operation nonce-test (added-strand resp 2) x2 (0 2) (enc x2 (pubk a))
-    (enc x1 x2 (pubk a)) (enc x2 x2 (pubk a)))
-  (traces
-    ((send (enc x2 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc x2 x2 (pubk a))))
-      (recv (enc "okay" x2 x4 (pubk a))))
-    ((recv (enc x2 x2 (pubk a))) (send (enc "okay" y3 x2 (pubk a)))))
-  (label 3)
-  (parent 1)
-  (unrealized (0 2) (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x2 x3 x4 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x2) (x3 x3) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x2) (y3 y3) (a a))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 2 0 init 2) x3 (1 0)
-    (enc x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    ((recv (enc x3 x2 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 4)
-  (parent 2)
-  (seen 5)
-  (unrealized (0 2))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x2 x4 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x2) (x3 x2) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x2) (y2 x2) (y3 y3) (a a))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x2)
-  (operation nonce-test (displaced 2 0 init 2) x2 (1 0)
-    (enc x2 (pubk a)))
-  (traces
-    ((send (enc x2 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc x2 x2 (pubk a))))
-      (recv (enc "okay" x2 x4 (pubk a))))
-    ((recv (enc x2 x2 (pubk a))) (send (enc "okay" y3 x2 (pubk a)))))
-  (label 5)
-  (parent 3)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x2 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x2) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x2) (y3 y3) (a a))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x3 y3) (x4 y3)) y3 (0 2)
-    (enc y3 (pubk a)) (enc "okay" y3 y3 (pubk a)) (enc y3 x2 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc y3 x2 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x2 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 6)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (x1 x1) (x2 x2) (x3 y3) (x4 y3))))
-  (origs (y3 (0 0))))
-
-(defskeleton wonthull3
-  (vars (x1 x2 x3 x4 y3 y3-0 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x2) (x3 x3) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x2) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 1) (1 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (0 2) (enc x3 (pubk a))
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x2 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    ((recv (enc x3 x2 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x2 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 7)
-  (parent 4)
-  (seen 4)
-  (unrealized (0 2) (2 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 y3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x2 y3) (x4 y3)) y3 (0 2)
-    (enc y3 (pubk a)) (enc "okay" y3 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 y3 (pubk a)) (enc y3 y3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 8)
-  (parent 5)
-  (seen 6)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x2 x4 y3 y3-0 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x2) (x3 x2) (x4 x4) (a a))
-  (defstrand resp 2 (y1 x2) (y2 x2) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x2) (y2 x2) (y3 y3-0) (a a))
-  (precedes ((0 0) (2 0)) ((0 1) (1 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x2)
-  (operation nonce-test (added-strand resp 2) x2 (0 2) (enc x2 (pubk a))
-    (enc "okay" y3 x2 (pubk a)) (enc x1 x2 (pubk a))
-    (enc x2 x2 (pubk a)))
-  (traces
-    ((send (enc x2 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc x2 x2 (pubk a))))
-      (recv (enc "okay" x2 x4 (pubk a))))
-    ((recv (enc x2 x2 (pubk a))) (send (enc "okay" y3 x2 (pubk a))))
-    ((recv (enc x2 x2 (pubk a))) (send (enc "okay" y3-0 x2 (pubk a)))))
-  (label 9)
-  (parent 5)
-  (seen 5)
-  (unrealized (0 2) (2 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
-
-(defprotocol wonthull3 basic
-  (defrole init
-    (vars (a name) (x1 x2 x3 x4 text))
-    (trace (send (enc x3 (pubk a)))
-      (send (cat (enc x1 x2 (pubk a)) (enc x3 x2 (pubk a))))
-      (recv (enc "okay" x3 x4 (pubk a))))
-    (non-orig (privk a))
-    (uniq-orig x3))
-  (defrole resp
-    (vars (a name) (y1 y2 y3 text))
-    (trace (recv (enc y1 y2 (pubk a)))
-      (send (enc "okay" y3 y1 (pubk a))))))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 x3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3-0)
-  (traces
-    ((send (enc x3-0 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3-0 x3 (pubk a))))
-      (recv (enc "okay" x3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0)))
-      (send (enc "okay" x3 x1 (pubk a-0)))))
-  (label 10)
-  (unrealized (0 2))
-  (origs (x3-0 (0 0)))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 2 1 resp 2) x3-0 (0 2)
-    (enc x3-0 (pubk a)) (enc x3-0 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0)))
-      (send (enc "okay" x3 x1 (pubk a-0)))))
-  (label 11)
-  (parent 10)
-  (unrealized (1 0))
-  (origs (x3 (0 0)))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 text) (a name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 2 1 resp 2) x3-0 (0 2)
-    (enc x3-0 (pubk a-0)) (enc x3-0 x3 (pubk a-0)))
-  (traces
-    ((send (enc x1 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a)))))
-  (label 12)
-  (parent 10)
-  (seen 14)
-  (unrealized (0 2))
-  (origs (x1 (0 0)))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 x3-0 y3 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3-0) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 1) (1 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3-0)
-  (operation nonce-test (added-strand resp 2) x3-0 (0 2)
-    (enc x3-0 (pubk a)) (enc x3-0 x3 (pubk a)))
-  (traces
-    ((send (enc x3-0 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3-0 x3 (pubk a))))
-      (recv (enc "okay" x3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3-0 x3 (pubk a)))
-      (send (enc "okay" y3 x3-0 (pubk a)))))
-  (label 13)
-  (parent 10)
-  (unrealized (0 2) (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc x3 (pubk a)) (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 14)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((x1 x3) (x3 x3) (a a) (x1-0 x1) (x3-0 x3) (a-0 a))))
-  (origs (x3 (0 0))))
-
-(defskeleton wonthull3
-  (vars (x3 x1 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc x3 (pubk a)) (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a)))))
-  (label 15)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((x1 x1) (x3 x3) (a a) (x1-0 x1) (x3-0 x3) (a-0 a))))
-  (origs (x3 (0 0))))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 1) (1 0)) ((1 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0) (enc x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 16)
-  (parent 11)
-  (unrealized (1 0) (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 y3 text) (a name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (2 0)) ((0 1) (1 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 2) (enc x1 (pubk a))
-    (enc "okay" x3 x1 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x1 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 17)
-  (parent 12)
-  (unrealized (0 2) (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 x3-0 y3 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3-0) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3-0)
-  (operation nonce-test (displaced 3 0 init 2) x3-0 (2 0)
-    (enc x3-0 (pubk a)))
-  (traces
-    ((send (enc x3-0 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3-0 x3 (pubk a))))
-      (recv (enc "okay" x3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3-0 x3 (pubk a)))
-      (send (enc "okay" y3 x3-0 (pubk a)))))
-  (label 18)
-  (parent 13)
-  (seen 20)
-  (unrealized (0 2))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 3 0 init 2) x3 (2 0)
-    (enc x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 19)
-  (parent 16)
-  (unrealized (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 y3 text) (a name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (displaced 3 0 init 2) x1 (2 0)
-    (enc x1 (pubk a)))
-  (traces
-    ((send (enc x1 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a)))))
-  (label 20)
-  (parent 17)
-  (unrealized (0 2))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x1-0 y3) (x3-0 y3)) y3 (0 2)
-    (enc y3 (pubk a)) (enc "okay" y3 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 21)
-  (parent 18)
-  (seen 28)
-  (unrealized (1 0))
-  (comment "4 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 y3 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 3 1 resp 2) x3-0 (0 2)
-    (enc x3-0 (pubk a)) (enc "okay" y3 x3-0 (pubk a))
-    (enc x3-0 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 22)
-  (parent 18)
-  (seen 19 27)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 x3-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3-0) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3-0) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3-0) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (3 0)) ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2))
-    ((2 1) (0 2)) ((3 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3-0)
-  (operation nonce-test (added-strand resp 2) x3-0 (0 2)
-    (enc x3-0 (pubk a)) (enc "okay" y3 x3-0 (pubk a))
-    (enc x3-0 x3 (pubk a)))
-  (traces
-    ((send (enc x3-0 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3-0 x3 (pubk a))))
-      (recv (enc "okay" x3-0 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3-0 x3 (pubk a))) (send (enc "okay" y3 x3-0 (pubk a))))
-    ((recv (enc x3-0 x3 (pubk a)))
-      (send (enc "okay" y3-0 x3-0 (pubk a)))))
-  (label 23)
-  (parent 18)
-  (seen 18)
-  (unrealized (0 2) (3 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc x3 (pubk a)) (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 24)
-  (parent 19)
-  (seen 14)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc x3 (pubk a)) (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 25)
-  (parent 19)
-  (seen 15)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (3 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0) (enc x3 (pubk a))
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 26)
-  (parent 19)
-  (seen 19)
-  (unrealized (1 0) (3 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 3 1 resp 2) x1-0 (0 2)
-    (enc x1-0 (pubk a)) (enc "okay" x3 x1-0 (pubk a))
-    (enc "okay" y3 x1-0 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 27)
-  (parent 20)
-  (seen 14)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 3 2 resp 2) x1-0 (0 2)
-    (enc x1-0 (pubk a)) (enc "okay" x3 x1-0 (pubk a))
-    (enc "okay" y3 x1-0 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 28)
-  (parent 20)
-  (unrealized)
-  (shape)
-  (maps ((0 1) ((x1 y3) (x3 x3) (a a) (x1-0 x1) (x3-0 y3) (a-0 a))))
-  (origs (y3 (0 0))))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x1) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (3 0)) ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2))
-    ((2 1) (0 2)) ((3 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x1)
-  (operation nonce-test (added-strand resp 2) x1 (0 2) (enc x1 (pubk a))
-    (enc "okay" x3 x1 (pubk a)) (enc "okay" y3 x1 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x1 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x1 x3 (pubk a))))
-      (recv (enc "okay" x1 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" y3-0 x1 (pubk a)))))
-  (label 29)
-  (parent 20)
-  (seen 20)
-  (unrealized (0 2) (3 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 3 0 init 2) y3 (1 0)
-    (enc y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a-0))) (send (enc "okay" x3 x3 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 30)
-  (parent 21)
-  (unrealized (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 3 2 resp 2) y3 (1 0)
-    (enc y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 31)
-  (parent 21)
-  (seen 36)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (3 0)) ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2))
-    ((2 1) (0 2)) ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0) (enc y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 32)
-  (parent 21)
-  (unrealized (1 0) (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc x3 (pubk a)) (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 33)
-  (parent 22)
-  (seen 15)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (3 0)) ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2))
-    ((2 1) (0 2)) ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0) (enc x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 34)
-  (parent 22)
-  (unrealized (1 0) (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (0 2)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (a-0 a)) x3 (1 0) (enc x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 35)
-  (parent 30)
-  (seen 14)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 3 2 resp 2) x3 (1 0)
-    (enc x3 (pubk a)) (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a-0))) (send (enc "okay" x3 x3 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 36)
-  (parent 30)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (3 0)) ((0 1) (1 0)) ((0 1) (2 0)) ((1 1) (0 2))
-    ((2 1) (0 2)) ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0) (enc x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a-0))) (send (enc "okay" x3 x3 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 37)
-  (parent 30)
-  (unrealized (1 0) (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0) (enc y3 (pubk a))
-    (enc "okay" y3 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a)))))
-  (label 38)
-  (parent 31)
-  (seen 28)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (3 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0) (enc y3 (pubk a))
-    (enc "okay" y3 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 39)
-  (parent 31)
-  (unrealized (1 0) (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (0 2))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 4 0 init 2) y3 (3 0)
-    (enc y3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 40)
-  (parent 32)
-  (seen 44 45)
-  (unrealized (1 0))
-  (comment "4 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (0 2))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 4 0 init 2) x3 (3 0)
-    (enc x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 41)
-  (parent 34)
-  (unrealized (1 0))
-  (comment "4 in cohort - 4 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (precedes ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (a-0 a)) x3 (1 0) (enc x3 (pubk a))
-    (enc "okay" x3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a)))))
-  (label 42)
-  (parent 36)
-  (seen 14)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 0) (3 0)) ((0 1) (2 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0) (enc x3 (pubk a))
-    (enc "okay" x3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a-0))) (send (enc "okay" x3 x3 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 43)
-  (parent 36)
-  (unrealized (1 0) (3 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (0 2))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 4 0 init 2) x3 (3 0)
-    (enc x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a-0))) (send (enc "okay" x3 x3 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 44)
-  (parent 37)
-  (seen 52)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 4 0 init 2) y3 (3 0)
-    (enc y3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 45)
-  (parent 39)
-  (seen 36)
-  (unrealized (1 0))
-  (comment "3 in cohort - 2 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (0 2))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0) (enc y3 (pubk a))
-    (enc "okay" y3-0 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 46)
-  (parent 40)
-  (seen 28)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (4 0)) ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2))
-    ((2 1) (0 2)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0) (enc y3 (pubk a))
-    (enc "okay" y3-0 y3 (pubk a)) (enc y3 x3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 47)
-  (parent 40)
-  (seen 40)
-  (unrealized (1 0) (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (0 2))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x3) (a-0 a)) x3 (1 0)
-    (enc x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 48)
-  (parent 41)
-  (seen 24)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (0 2))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) x3 (1 0)
-    (enc x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a))) (send (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 49)
-  (parent 41)
-  (seen 25)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x1-0 y3 y3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 y3) (x3 y3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 y3) (y3 y3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (displaced 4 2 resp 2) x3 (1 0)
-    (enc x3 (pubk a)) (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1-0 y3 (pubk a)) (enc y3 y3 (pubk a))))
-      (recv (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 y3 (pubk a-0))) (send (enc "okay" y3 x1 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 50)
-  (parent 41)
-  (unrealized (1 0))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x3 x1-0 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 x3) (x3 x3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (4 0)) ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2))
-    ((2 1) (0 2)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0) (enc x3 (pubk a))
-    (enc "okay" y3-0 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1-0 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1-0 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x1 (pubk a))))
-    ((recv (enc x1 x3 (pubk a-0))) (send (enc "okay" x3 x1 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-1 x3 (pubk a)))))
-  (label 51)
-  (parent 41)
-  (seen 41)
-  (unrealized (1 0) (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (displaced 4 0 init 2) x3 (3 0)
-    (enc x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a-0))) (send (enc "okay" x3 x3 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 52)
-  (parent 43)
-  (seen 58)
-  (unrealized (1 0))
-  (comment "2 in cohort - 1 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (0 2))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (contracted (a-0 a)) x3 (1 0) (enc x3 (pubk a))
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a)))))
-  (label 53)
-  (parent 44)
-  (seen 24)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (4 0)) ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2))
-    ((2 1) (0 2)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0) (enc x3 (pubk a))
-    (enc "okay" y3 x3 (pubk a)) (enc x3 x3 (pubk a))
-    (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a-0))) (send (enc "okay" x3 x3 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 54)
-  (parent 44)
-  (seen 44)
-  (unrealized (1 0) (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (a-0 a)) y3 (1 0) (enc y3 (pubk a))
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" x3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 55)
-  (parent 45)
-  (seen 38)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 x3) (y3 y3-1) (a a))
-  (precedes ((0 0) (4 0)) ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0) (enc y3 (pubk a))
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc y3 x3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc y3 x3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a-0))) (send (enc "okay" x3 y3 (pubk a-0))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 x3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 56)
-  (parent 45)
-  (seen 45)
-  (unrealized (1 0) (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 y3 y3-0 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 y3) (x3 y3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x1-0 x1) (a-0 a)) y3 (1 0)
-    (enc y3 (pubk a)) (enc "okay" y3 y3 (pubk a))
-    (enc "okay" y3-0 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 y3 (pubk a)) (enc y3 y3 (pubk a))))
-      (recv (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 y3 (pubk a))) (send (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 57)
-  (parent 50)
-  (seen 25)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 y3 y3-0 text) (a name))
-  (defstrand init 3 (x1 x1) (x2 y3) (x3 y3) (x4 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (precedes ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2)) ((2 1) (1 0))
-    ((3 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (contracted (x1-0 y3) (a-0 a)) y3 (1 0)
-    (enc y3 (pubk a)) (enc "okay" y3 y3 (pubk a))
-    (enc "okay" y3-0 y3 (pubk a)) (enc x1 y3 (pubk a))
-    (enc y3 y3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1 y3 (pubk a)) (enc y3 y3 (pubk a))))
-      (recv (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a)))))
-  (label 58)
-  (parent 50)
-  (seen 24)
-  (unrealized)
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x1 x1-0 y3 y3-0 y3-1 text) (a a-0 name))
-  (defstrand init 3 (x1 x1-0) (x2 y3) (x3 y3) (x4 x1) (a a))
-  (defstrand resp 2 (y1 x1) (y2 y3) (y3 y3) (a a-0))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-0) (a a))
-  (defstrand resp 2 (y1 y3) (y2 y3) (y3 y3-1) (a a))
-  (precedes ((0 0) (4 0)) ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig y3)
-  (operation nonce-test (added-strand resp 2) y3 (1 0) (enc y3 (pubk a))
-    (enc "okay" y3 y3 (pubk a)) (enc "okay" y3-0 y3 (pubk a))
-    (enc x1-0 y3 (pubk a)) (enc y3 y3 (pubk a)))
-  (traces
-    ((send (enc y3 (pubk a)))
-      (send (cat (enc x1-0 y3 (pubk a)) (enc y3 y3 (pubk a))))
-      (recv (enc "okay" y3 x1 (pubk a))))
-    ((recv (enc x1 y3 (pubk a-0))) (send (enc "okay" y3 x1 (pubk a-0))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-0 y3 (pubk a))))
-    ((recv (enc y3 y3 (pubk a))) (send (enc "okay" y3-1 y3 (pubk a)))))
-  (label 59)
-  (parent 50)
-  (seen 50)
-  (unrealized (1 0) (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(defskeleton wonthull3
-  (vars (x3 x1 y3 y3-0 text) (a a-0 name))
-  (defstrand init 3 (x1 x1) (x2 x3) (x3 x3) (x4 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a-0))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 x3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3) (a a))
-  (defstrand resp 2 (y1 x3) (y2 x3) (y3 y3-0) (a a))
-  (precedes ((0 0) (4 0)) ((0 1) (2 0)) ((0 1) (3 0)) ((1 1) (0 2))
-    ((2 1) (1 0)) ((3 1) (1 0)) ((4 1) (1 0)))
-  (non-orig (privk a))
-  (uniq-orig x3)
-  (operation nonce-test (added-strand resp 2) x3 (1 0) (enc x3 (pubk a))
-    (enc "okay" x3 x3 (pubk a)) (enc "okay" y3 x3 (pubk a))
-    (enc x3 x3 (pubk a)) (enc x1 x3 (pubk a)))
-  (traces
-    ((send (enc x3 (pubk a)))
-      (send (cat (enc x1 x3 (pubk a)) (enc x3 x3 (pubk a))))
-      (recv (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a-0))) (send (enc "okay" x3 x3 (pubk a-0))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" x3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3 x3 (pubk a))))
-    ((recv (enc x3 x3 (pubk a))) (send (enc "okay" y3-0 x3 (pubk a)))))
-  (label 60)
-  (parent 52)
-  (seen 52)
-  (unrealized (1 0) (4 0))
-  (comment "1 in cohort - 0 not yet seen"))
-
-(comment "Nothing left to do")
diff --git a/tst/woolam.scm b/tst/woolam.scm
--- a/tst/woolam.scm
+++ b/tst/woolam.scm
@@ -24,54 +24,3 @@
 (defskeleton woolam (vars (n text) (a s name))
   (defstrand resp 5 (a a) (s s))
   (non-orig (ltk a s)))
-
-
-(defprotocol woolam-msg basic
-  (defrole init (vars (a s name) (n text))
-    (trace
-     (send a)
-     (recv n)
-     (send (enc n (ltk a s))))
-    (non-orig (ltk a s)))
-  (defrole resp (vars (a s b name) (n text) (m mesg))
-    (trace
-     (recv a)
-     (send n)
-     (recv m)
-     (send (enc a m (ltk b s)))
-     (recv (enc n (ltk b s))))
-    (non-orig (ltk b s))
-    (uniq-orig n))
-  (defrole serv (vars (a s b name) (n text))
-    (trace
-     (recv (enc a (enc n (ltk a s)) (ltk b s)))
-     (send (enc n (ltk b s))))))
-
-(defskeleton woolam-msg (vars (a s name))
-  (defstrand resp 5 (a a) (s s))
-  (non-orig (ltk a s)))
-
-(defprotocol woolam-msg1 basic
-  (defrole init (vars (a s name) (n text))
-    (trace
-     (send a)
-     (recv n)
-     (send (enc n (ltk a s))))
-    (non-orig (ltk a s)))
-  (defrole resp (vars (a s b name) (n text) (m mesg))
-    (trace
-     (recv a)
-     (send n)
-     (recv m)
-     (send (cat a b (enc m (ltk b s))))
-     (recv (enc a n (ltk b s))))
-    (non-orig (ltk b s))
-    (uniq-orig n))
-  (defrole serv (vars (a s b name) (n text))
-    (trace
-     (recv (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-     (send (enc a n (ltk b s))))))
-
-(defskeleton woolam-msg1 (vars (a s name))
-  (defstrand resp 5 (a a) (s s))
-  (non-orig (ltk a s)))
diff --git a/tst/woolam.tst b/tst/woolam.tst
--- a/tst/woolam.tst
+++ b/tst/woolam.tst
@@ -1,6 +1,6 @@
 (herald "Woo-Lam Protocol")
 
-(comment "CPSA 2.5.4")
+(comment "CPSA 3.2.2")
 (comment "All input read from woolam.scm")
 
 (defprotocol woolam basic
@@ -98,451 +98,5 @@
   (shape)
   (maps ((0) ((a a) (s s) (b b) (n n))))
   (origs (n (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol woolam-msg basic
-  (defrole init
-    (vars (a s name) (n text))
-    (trace (send a) (recv n) (send (enc n (ltk a s))))
-    (non-orig (ltk a s)))
-  (defrole resp
-    (vars (a s b name) (n text) (m mesg))
-    (trace (recv a) (send n) (recv m) (send (enc a m (ltk b s)))
-      (recv (enc n (ltk b s))))
-    (non-orig (ltk b s))
-    (uniq-orig n))
-  (defrole serv
-    (vars (a s b name) (n text))
-    (trace (recv (enc a (enc n (ltk a s)) (ltk b s)))
-      (send (enc n (ltk b s))))))
-
-(defskeleton woolam-msg
-  (vars (m mesg) (n text) (a s b name))
-  (defstrand resp 5 (m m) (n n) (a a) (s s) (b b))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n)
-  (traces
-    ((recv a) (send n) (recv m) (send (enc a m (ltk b s)))
-      (recv (enc n (ltk b s)))))
-  (label 4)
-  (unrealized (0 4))
-  (origs (n (0 1)))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton woolam-msg
-  (vars (m mesg) (n text) (a s b name))
-  (defstrand resp 5 (m m) (n n) (a a) (s s) (b b))
-  (defstrand init 3 (n n) (a b) (s s))
-  (precedes ((0 1) (1 1)) ((1 2) (0 4)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n)
-  (operation encryption-test (added-strand init 3) (enc n (ltk b s))
-    (0 4))
-  (traces
-    ((recv a) (send n) (recv m) (send (enc a m (ltk b s)))
-      (recv (enc n (ltk b s))))
-    ((send b) (recv n) (send (enc n (ltk b s)))))
-  (label 5)
-  (parent 4)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (s s) (b b) (n n) (m m))))
-  (origs (n (0 1))))
-
-(defskeleton woolam-msg
-  (vars (m mesg) (n text) (a s b a-0 name))
-  (defstrand resp 5 (m m) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a-0) (s s) (b b))
-  (precedes ((0 1) (1 0)) ((1 1) (0 4)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n)
-  (operation encryption-test (added-strand serv 2) (enc n (ltk b s))
-    (0 4))
-  (traces
-    ((recv a) (send n) (recv m) (send (enc a m (ltk b s)))
-      (recv (enc n (ltk b s))))
-    ((recv (enc a-0 (enc n (ltk a-0 s)) (ltk b s)))
-      (send (enc n (ltk b s)))))
-  (label 6)
-  (parent 4)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton woolam-msg
-  (vars (n text) (a s b name))
-  (defstrand resp 5 (m (enc n (ltk a s))) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a) (s s) (b b))
-  (precedes ((0 3) (1 0)) ((1 1) (0 4)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n)
-  (operation encryption-test (displaced 2 0 resp 4)
-    (enc a-0 (enc n (ltk a-0 s)) (ltk b s)) (1 0))
-  (traces
-    ((recv a) (send n) (recv (enc n (ltk a s)))
-      (send (enc a (enc n (ltk a s)) (ltk b s)))
-      (recv (enc n (ltk b s))))
-    ((recv (enc a (enc n (ltk a s)) (ltk b s)))
-      (send (enc n (ltk b s)))))
-  (label 7)
-  (parent 6)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton woolam-msg
-  (vars (m mesg) (n n-0 text) (a s b a-0 name))
-  (defstrand resp 5 (m m) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a-0) (s s) (b b))
-  (defstrand resp 4 (m (enc n (ltk a-0 s))) (n n-0) (a a-0) (s s) (b b))
-  (precedes ((0 1) (2 2)) ((1 1) (0 4)) ((2 3) (1 0)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n n-0)
-  (operation encryption-test (added-strand resp 4)
-    (enc a-0 (enc n (ltk a-0 s)) (ltk b s)) (1 0))
-  (traces
-    ((recv a) (send n) (recv m) (send (enc a m (ltk b s)))
-      (recv (enc n (ltk b s))))
-    ((recv (enc a-0 (enc n (ltk a-0 s)) (ltk b s)))
-      (send (enc n (ltk b s))))
-    ((recv a-0) (send n-0) (recv (enc n (ltk a-0 s)))
-      (send (enc a-0 (enc n (ltk a-0 s)) (ltk b s)))))
-  (label 8)
-  (parent 6)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (s s) (b b) (n n) (m m))))
-  (origs (n-0 (2 1)) (n (0 1))))
-
-(defskeleton woolam-msg
-  (vars (n text) (a s b name))
-  (defstrand resp 5 (m (enc n (ltk a s))) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a) (s s) (b b))
-  (defstrand init 3 (n n) (a a) (s s))
-  (precedes ((0 1) (2 1)) ((0 3) (1 0)) ((1 1) (0 4)) ((2 2) (0 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n)
-  (operation encryption-test (added-strand init 3) (enc n (ltk a s))
-    (0 2))
-  (traces
-    ((recv a) (send n) (recv (enc n (ltk a s)))
-      (send (enc a (enc n (ltk a s)) (ltk b s)))
-      (recv (enc n (ltk b s))))
-    ((recv (enc a (enc n (ltk a s)) (ltk b s)))
-      (send (enc n (ltk b s))))
-    ((send a) (recv n) (send (enc n (ltk a s)))))
-  (label 9)
-  (parent 7)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (s s) (b b) (n n) (m (enc n (ltk a s))))))
-  (origs (n (0 1))))
-
-(defskeleton woolam-msg
-  (vars (n text) (a s b a-0 name))
-  (defstrand resp 5 (m (enc n (ltk a s))) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a-0) (s s) (b a))
-  (precedes ((0 1) (2 0)) ((0 3) (1 0)) ((1 1) (0 4)) ((2 1) (0 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n)
-  (operation encryption-test (added-strand serv 2) (enc n (ltk a s))
-    (0 2))
-  (traces
-    ((recv a) (send n) (recv (enc n (ltk a s)))
-      (send (enc a (enc n (ltk a s)) (ltk b s)))
-      (recv (enc n (ltk b s))))
-    ((recv (enc a (enc n (ltk a s)) (ltk b s)))
-      (send (enc n (ltk b s))))
-    ((recv (enc a-0 (enc n (ltk a-0 s)) (ltk a s)))
-      (send (enc n (ltk a s)))))
-  (label 10)
-  (parent 7)
-  (unrealized (2 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton woolam-msg
-  (vars (n n-0 text) (a s b a-0 name))
-  (defstrand resp 5 (m (enc n (ltk a s))) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a-0) (s s) (b a))
-  (defstrand resp 4 (m (enc n (ltk a-0 s))) (n n-0) (a a-0) (s s) (b a))
-  (precedes ((0 1) (3 2)) ((0 3) (1 0)) ((1 1) (0 4)) ((2 1) (0 2))
-    ((3 3) (2 0)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n n-0)
-  (operation encryption-test (added-strand resp 4)
-    (enc a-0 (enc n (ltk a-0 s)) (ltk a s)) (2 0))
-  (traces
-    ((recv a) (send n) (recv (enc n (ltk a s)))
-      (send (enc a (enc n (ltk a s)) (ltk b s)))
-      (recv (enc n (ltk b s))))
-    ((recv (enc a (enc n (ltk a s)) (ltk b s)))
-      (send (enc n (ltk b s))))
-    ((recv (enc a-0 (enc n (ltk a-0 s)) (ltk a s)))
-      (send (enc n (ltk a s))))
-    ((recv a-0) (send n-0) (recv (enc n (ltk a-0 s)))
-      (send (enc a-0 (enc n (ltk a-0 s)) (ltk a s)))))
-  (label 11)
-  (parent 10)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (s s) (b b) (n n) (m (enc n (ltk a s))))))
-  (origs (n-0 (3 1)) (n (0 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol woolam-msg1 basic
-  (defrole init
-    (vars (a s name) (n text))
-    (trace (send a) (recv n) (send (enc n (ltk a s))))
-    (non-orig (ltk a s)))
-  (defrole resp
-    (vars (a s b name) (n text) (m mesg))
-    (trace (recv a) (send n) (recv m) (send (cat a b (enc m (ltk b s))))
-      (recv (enc a n (ltk b s))))
-    (non-orig (ltk b s))
-    (uniq-orig n))
-  (defrole serv
-    (vars (a s b name) (n text))
-    (trace (recv (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-      (send (enc a n (ltk b s))))))
-
-(defskeleton woolam-msg1
-  (vars (m mesg) (n text) (a s b name))
-  (defstrand resp 5 (m m) (n n) (a a) (s s) (b b))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n)
-  (traces
-    ((recv a) (send n) (recv m) (send (cat a b (enc m (ltk b s))))
-      (recv (enc a n (ltk b s)))))
-  (label 12)
-  (unrealized (0 4))
-  (origs (n (0 1)))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton woolam-msg1
-  (vars (n text) (a s b name))
-  (defstrand resp 5 (m (cat a n)) (n n) (a a) (s s) (b b))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n)
-  (operation encryption-test (displaced 1 0 resp 4) (enc a n (ltk b s))
-    (0 4))
-  (traces
-    ((recv a) (send n) (recv (cat a n))
-      (send (cat a b (enc a n (ltk b s)))) (recv (enc a n (ltk b s)))))
-  (label 13)
-  (parent 12)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (s s) (b b) (n n) (m (cat a n)))))
-  (origs (n (0 1))))
-
-(defskeleton woolam-msg1
-  (vars (m mesg) (n n-0 text) (a s b a-0 name))
-  (defstrand resp 5 (m m) (n n) (a a) (s s) (b b))
-  (defstrand resp 4 (m (cat a n)) (n n-0) (a a-0) (s s) (b b))
-  (precedes ((0 1) (1 2)) ((1 3) (0 4)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n n-0)
-  (operation encryption-test (added-strand resp 4) (enc a n (ltk b s))
-    (0 4))
-  (traces
-    ((recv a) (send n) (recv m) (send (cat a b (enc m (ltk b s))))
-      (recv (enc a n (ltk b s))))
-    ((recv a-0) (send n-0) (recv (cat a n))
-      (send (cat a-0 b (enc a n (ltk b s))))))
-  (label 14)
-  (parent 12)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (s s) (b b) (n n) (m m))))
-  (origs (n-0 (1 1)) (n (0 1))))
-
-(defskeleton woolam-msg1
-  (vars (m mesg) (n text) (a s b name))
-  (defstrand resp 5 (m m) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a) (s s) (b b))
-  (precedes ((0 1) (1 0)) ((1 1) (0 4)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n)
-  (operation encryption-test (added-strand serv 2) (enc a n (ltk b s))
-    (0 4))
-  (traces
-    ((recv a) (send n) (recv m) (send (cat a b (enc m (ltk b s))))
-      (recv (enc a n (ltk b s))))
-    ((recv (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-      (send (enc a n (ltk b s)))))
-  (label 15)
-  (parent 12)
-  (unrealized (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton woolam-msg1
-  (vars (n text) (a s b name))
-  (defstrand resp 5 (m (enc n (ltk a s))) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a) (s s) (b b))
-  (precedes ((0 3) (1 0)) ((1 1) (0 4)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n)
-  (operation encryption-test (displaced 2 0 resp 4)
-    (enc (enc n (ltk a s)) (ltk b s)) (1 0))
-  (traces
-    ((recv a) (send n) (recv (enc n (ltk a s)))
-      (send (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-      (recv (enc a n (ltk b s))))
-    ((recv (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-      (send (enc a n (ltk b s)))))
-  (label 16)
-  (parent 15)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton woolam-msg1
-  (vars (m mesg) (n n-0 text) (a s b a-0 name))
-  (defstrand resp 5 (m m) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a) (s s) (b b))
-  (defstrand resp 4 (m (enc n (ltk a s))) (n n-0) (a a-0) (s s) (b b))
-  (precedes ((0 1) (2 2)) ((1 1) (0 4)) ((2 3) (1 0)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n n-0)
-  (operation encryption-test (added-strand resp 4)
-    (enc (enc n (ltk a s)) (ltk b s)) (1 0))
-  (traces
-    ((recv a) (send n) (recv m) (send (cat a b (enc m (ltk b s))))
-      (recv (enc a n (ltk b s))))
-    ((recv (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-      (send (enc a n (ltk b s))))
-    ((recv a-0) (send n-0) (recv (enc n (ltk a s)))
-      (send (cat a-0 b (enc (enc n (ltk a s)) (ltk b s))))))
-  (label 17)
-  (parent 15)
-  (unrealized (2 2))
-  (comment "3 in cohort - 3 not yet seen"))
-
-(defskeleton woolam-msg1
-  (vars (n text) (a s b name))
-  (defstrand resp 5 (m (enc n (ltk a s))) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a) (s s) (b b))
-  (defstrand init 3 (n n) (a a) (s s))
-  (precedes ((0 1) (2 1)) ((0 3) (1 0)) ((1 1) (0 4)) ((2 2) (0 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n)
-  (operation encryption-test (added-strand init 3) (enc n (ltk a s))
-    (0 2))
-  (traces
-    ((recv a) (send n) (recv (enc n (ltk a s)))
-      (send (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-      (recv (enc a n (ltk b s))))
-    ((recv (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-      (send (enc a n (ltk b s))))
-    ((send a) (recv n) (send (enc n (ltk a s)))))
-  (label 18)
-  (parent 16)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (s s) (b b) (n n) (m (enc n (ltk a s))))))
-  (origs (n (0 1))))
-
-(defskeleton woolam-msg1
-  (vars (n n-0 text) (a s b a-0 name))
-  (defstrand resp 5 (m (enc n (ltk a s))) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a) (s s) (b b))
-  (defstrand resp 4 (m n) (n n-0) (a a-0) (s s) (b a))
-  (precedes ((0 1) (2 2)) ((0 3) (1 0)) ((1 1) (0 4)) ((2 3) (0 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n n-0)
-  (operation encryption-test (added-strand resp 4) (enc n (ltk a s))
-    (0 2))
-  (traces
-    ((recv a) (send n) (recv (enc n (ltk a s)))
-      (send (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-      (recv (enc a n (ltk b s))))
-    ((recv (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-      (send (enc a n (ltk b s))))
-    ((recv a-0) (send n-0) (recv n)
-      (send (cat a-0 a (enc n (ltk a s))))))
-  (label 19)
-  (parent 16)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (s s) (b b) (n n) (m (enc n (ltk a s))))))
-  (origs (n-0 (2 1)) (n (0 1))))
-
-(defskeleton woolam-msg1
-  (vars (m mesg) (n n-0 text) (a s b a-0 name))
-  (defstrand resp 5 (m m) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a) (s s) (b b))
-  (defstrand resp 4 (m (enc n (ltk a s))) (n n-0) (a a-0) (s s) (b b))
-  (defstrand init 3 (n n) (a a) (s s))
-  (precedes ((0 1) (3 1)) ((1 1) (0 4)) ((2 3) (1 0)) ((3 2) (2 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n n-0)
-  (operation encryption-test (added-strand init 3) (enc n (ltk a s))
-    (2 2))
-  (traces
-    ((recv a) (send n) (recv m) (send (cat a b (enc m (ltk b s))))
-      (recv (enc a n (ltk b s))))
-    ((recv (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-      (send (enc a n (ltk b s))))
-    ((recv a-0) (send n-0) (recv (enc n (ltk a s)))
-      (send (cat a-0 b (enc (enc n (ltk a s)) (ltk b s)))))
-    ((send a) (recv n) (send (enc n (ltk a s)))))
-  (label 20)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (s s) (b b) (n n) (m m))))
-  (origs (n-0 (2 1)) (n (0 1))))
-
-(defskeleton woolam-msg1
-  (vars (n n-0 text) (s b a name))
-  (defstrand resp 5 (m n) (n n) (a b) (s s) (b b))
-  (defstrand serv 2 (n n) (a b) (s s) (b b))
-  (defstrand resp 4 (m (enc n (ltk b s))) (n n-0) (a a) (s s) (b b))
-  (precedes ((0 3) (2 2)) ((1 1) (0 4)) ((2 3) (1 0)))
-  (non-orig (ltk b s))
-  (uniq-orig n n-0)
-  (operation encryption-test (displaced 3 0 resp 4) (enc n (ltk a-0 s))
-    (2 2))
-  (traces
-    ((recv b) (send n) (recv n) (send (cat b b (enc n (ltk b s))))
-      (recv (enc b n (ltk b s))))
-    ((recv (cat b b (enc (enc n (ltk b s)) (ltk b s))))
-      (send (enc b n (ltk b s))))
-    ((recv a) (send n-0) (recv (enc n (ltk b s)))
-      (send (cat a b (enc (enc n (ltk b s)) (ltk b s))))))
-  (label 21)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a b) (s s) (b b) (n n) (m n))))
-  (origs (n (0 1)) (n-0 (2 1))))
-
-(defskeleton woolam-msg1
-  (vars (m mesg) (n n-0 n-1 text) (a s b a-0 a-1 name))
-  (defstrand resp 5 (m m) (n n) (a a) (s s) (b b))
-  (defstrand serv 2 (n n) (a a) (s s) (b b))
-  (defstrand resp 4 (m (enc n (ltk a s))) (n n-0) (a a-0) (s s) (b b))
-  (defstrand resp 4 (m n) (n n-1) (a a-1) (s s) (b a))
-  (precedes ((0 1) (3 2)) ((1 1) (0 4)) ((2 3) (1 0)) ((3 3) (2 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n n-0 n-1)
-  (operation encryption-test (added-strand resp 4) (enc n (ltk a s))
-    (2 2))
-  (traces
-    ((recv a) (send n) (recv m) (send (cat a b (enc m (ltk b s))))
-      (recv (enc a n (ltk b s))))
-    ((recv (cat a b (enc (enc n (ltk a s)) (ltk b s))))
-      (send (enc a n (ltk b s))))
-    ((recv a-0) (send n-0) (recv (enc n (ltk a s)))
-      (send (cat a-0 b (enc (enc n (ltk a s)) (ltk b s)))))
-    ((recv a-1) (send n-1) (recv n)
-      (send (cat a-1 a (enc n (ltk a s))))))
-  (label 22)
-  (parent 17)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (s s) (b b) (n n) (m m))))
-  (origs (n-1 (3 1)) (n-0 (2 1)) (n (0 1))))
 
 (comment "Nothing left to do")
diff --git a/tst/wrap_decrypt.lsp b/tst/wrap_decrypt.lsp
new file mode 100644
--- /dev/null
+++ b/tst/wrap_decrypt.lsp
@@ -0,0 +1,57 @@
+(herald wrap-decrypt
+   (bound 10)
+;  (limit 1)
+)
+
+(defprotocol wrap-decrypt basic
+  (defrole make
+    (vars (k skey))
+    (trace
+     (init (cat k "init"))
+     (send (hash k)))
+    (uniq-gen k)
+)
+  (defrole set-wrap
+    (vars (k skey) (cur mesg))
+    (trace
+     (tran (cat k cur) (cat k "wrap")))
+    (neq (cur "wrap"))
+)
+  (defrole set-decrypt
+    (vars (k skey) (cur mesg))
+    (trace
+     (tran (cat k cur) (cat k "decrypt")))
+    (neq (cur "decrypt"))
+)
+  (defrole wrap
+    (vars (k0 k1 skey) (cur mesg))
+    (trace
+     (recv (hash k0))
+     (recv (hash k1))
+     (obsv (cat k0 cur))
+     (obsv (cat k1 "wrap"))
+     (send (enc k0 k1))))
+  (defrole decrypt
+    (vars (x mesg) (k skey))
+    (trace
+     (recv (enc x k))
+     (recv (hash k))
+     (obsv (cat k "decrypt"))
+     (send x))))
+
+(defskeleton wrap-decrypt
+  (vars (k kp skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k kp))
+  (defstrand make 2 (k kp))
+  (defstrand set-decrypt 1 (k kp) (cur "wrap"))
+  (defstrand set-wrap 1 (k kp) (cur "init"))
+  (defstrand wrap 5 (k0 k) (k1 kp) (cur "init"))
+  (defstrand make 2 (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2)) ((4 0) (5 3)) 
+	    ((4 0) (3 0)) ((5 4) (1 0)) ((6 0) (5 2)) ((6 1) (5 0))))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (pen-non-orig k))
diff --git a/tst/wrap_decrypt.tst b/tst/wrap_decrypt.tst
new file mode 100644
--- /dev/null
+++ b/tst/wrap_decrypt.tst
@@ -0,0 +1,2103 @@
+(herald wrap-decrypt (bound 10))
+
+(comment "CPSA 3.2.2")
+(comment "All input read from wrap_decrypt.lsp")
+(comment "Strand count bounded at 10")
+
+(defprotocol wrap-decrypt basic
+  (defrole make
+    (vars (k skey))
+    (trace (init (cat k "init")) (send (hash k)))
+    (uniq-gen k))
+  (defrole set-wrap
+    (vars (k skey) (cur mesg))
+    (trace (tran (cat k cur) (cat k "wrap")))
+    (neq (cur "wrap")))
+  (defrole set-decrypt
+    (vars (k skey) (cur mesg))
+    (trace (tran (cat k cur) (cat k "decrypt")))
+    (neq (cur "decrypt")))
+  (defrole wrap
+    (vars (k0 k1 skey) (cur mesg))
+    (trace (recv (hash k0)) (recv (hash k1)) (obsv (cat k0 cur))
+      (obsv (cat k1 "wrap")) (send (enc k0 k1))))
+  (defrole decrypt
+    (vars (x mesg) (k skey))
+    (trace (recv (enc x k)) (recv (hash k)) (obsv (cat k "decrypt"))
+      (send x))))
+
+(defskeleton wrap-decrypt
+  (vars (k kp skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k kp))
+  (defstrand make 2 (k kp))
+  (defstrand set-decrypt 1 (cur "wrap") (k kp))
+  (defstrand set-wrap 1 (cur "init") (k kp))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 kp))
+  (defstrand make 2 (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2))
+    ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0)) ((6 0) (5 2))
+    ((6 1) (5 0)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k kp)
+  (traces ((recv k) (send k))
+    ((recv (enc k kp)) (recv (hash kp)) (obsv (cat kp "decrypt"))
+      (send k)) ((init (cat kp "init")) (send (hash kp)))
+    ((tran (cat kp "wrap") (cat kp "decrypt")))
+    ((tran (cat kp "init") (cat kp "wrap")))
+    ((recv (hash k)) (recv (hash kp)) (obsv (cat k "init"))
+      (obsv (cat kp "wrap")) (send (enc k kp)))
+    ((init (cat k "init")) (send (hash k))))
+  (label 0)
+  (unrealized (1 2) (3 0) (4 0) (5 2) (5 3))
+  (preskeleton)
+  (comment "Not a skeleton"))
+
+(defskeleton wrap-decrypt
+  (vars (k kp skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k kp))
+  (defstrand make 2 (k kp))
+  (defstrand set-decrypt 1 (cur "wrap") (k kp))
+  (defstrand set-wrap 1 (cur "init") (k kp))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 kp))
+  (defstrand make 2 (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2))
+    ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0)) ((6 1) (5 0)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k kp)
+  (traces ((recv k) (send k))
+    ((recv (enc k kp)) (recv (hash kp)) (obsv (cat kp "decrypt"))
+      (send k)) ((init (cat kp "init")) (send (hash kp)))
+    ((tran (cat kp "wrap") (cat kp "decrypt")))
+    ((tran (cat kp "init") (cat kp "wrap")))
+    ((recv (hash k)) (recv (hash kp)) (obsv (cat k "init"))
+      (obsv (cat kp "wrap")) (send (enc k kp)))
+    ((init (cat k "init")) (send (hash k))))
+  (label 1)
+  (parent 0)
+  (unrealized (1 2) (3 0) (4 0) (5 2) (5 3))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (kp skey))
+  (deflistener kp)
+  (defstrand decrypt 4 (x kp) (k kp))
+  (defstrand make 2 (k kp))
+  (defstrand set-decrypt 1 (cur "wrap") (k kp))
+  (defstrand set-wrap 1 (cur "init") (k kp))
+  (defstrand wrap 5 (cur "init") (k0 kp) (k1 kp))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 0)) ((3 0) (1 2))
+    ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen kp)
+  (operation collapsed 6 2)
+  (traces ((recv kp) (send kp))
+    ((recv (enc kp kp)) (recv (hash kp)) (obsv (cat kp "decrypt"))
+      (send kp)) ((init (cat kp "init")) (send (hash kp)))
+    ((tran (cat kp "wrap") (cat kp "decrypt")))
+    ((tran (cat kp "init") (cat kp "wrap")))
+    ((recv (hash kp)) (recv (hash kp)) (obsv (cat kp "init"))
+      (obsv (cat kp "wrap")) (send (enc kp kp))))
+  (label 2)
+  (parent 1)
+  (unrealized (1 2) (3 0) (4 0) (5 2) (5 3))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (kp k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k kp))
+  (defstrand make 2 (k kp))
+  (defstrand set-decrypt 1 (cur "wrap") (k kp))
+  (defstrand set-wrap 1 (cur "init") (k kp))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 kp))
+  (defstrand make 2 (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2))
+    ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0)) ((6 0) (5 2))
+    ((6 1) (5 0)))
+  (leadsto ((6 0) (5 2)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen kp k)
+  (operation state-passing-test (displaced 7 6 make 1) (cat k "init")
+    (5 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k kp)) (recv (hash kp)) (obsv (cat kp "decrypt"))
+      (send k)) ((init (cat kp "init")) (send (hash kp)))
+    ((tran (cat kp "wrap") (cat kp "decrypt")))
+    ((tran (cat kp "init") (cat kp "wrap")))
+    ((recv (hash k)) (recv (hash kp)) (obsv (cat k "init"))
+      (obsv (cat kp "wrap")) (send (enc k kp)))
+    ((init (cat k "init")) (send (hash k))))
+  (label 3)
+  (parent 1)
+  (unrealized (1 2) (3 0) (4 0) (5 3))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0)))
+  (leadsto ((2 0) (5 2)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 6 2 make 1) (cat k "init")
+    (5 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k))))
+  (label 4)
+  (parent 2)
+  (unrealized (1 2) (3 0) (4 0) (5 3))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2))
+    ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0)) ((6 0) (5 2))
+    ((6 1) (5 0)))
+  (leadsto ((4 0) (5 3)) ((6 0) (5 2)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 7 4 set-wrap 1)
+    (cat k-0 "wrap") (5 3))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k))))
+  (label 5)
+  (parent 3)
+  (unrealized (1 2) (3 0) (4 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (7 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (5 3)))
+  (leadsto ((6 0) (5 2)) ((7 0) (5 3)))
+  (neq (cur "wrap") ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-wrap 1)
+    (cat k-0 "wrap") (5 3))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 cur) (cat k-0 "wrap"))))
+  (label 6)
+  (parent 3)
+  (unrealized (1 2) (3 0) (4 0) (7 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0)))
+  (leadsto ((2 0) (5 2)) ((4 0) (5 3)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 6 4 set-wrap 1)
+    (cat k "wrap") (5 3))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k))))
+  (label 7)
+  (parent 4)
+  (unrealized (1 2) (3 0) (4 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (6 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 4) (1 0)) ((6 0) (5 3)))
+  (leadsto ((2 0) (5 2)) ((6 0) (5 3)))
+  (neq (cur "wrap") ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-wrap 1) (cat k "wrap")
+    (5 3))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k cur) (cat k "wrap"))))
+  (label 8)
+  (parent 4)
+  (unrealized (1 2) (3 0) (4 0) (6 0))
+  (origs)
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2))
+    ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0)) ((6 0) (5 2))
+    ((6 1) (5 0)))
+  (leadsto ((2 0) (4 0)) ((4 0) (5 3)) ((6 0) (5 2)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 7 2 make 1) (cat k-0 "init")
+    (4 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k))))
+  (label 9)
+  (parent 5)
+  (unrealized (1 2) (3 0))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (7 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (5 3)))
+  (leadsto ((2 0) (7 0)) ((6 0) (5 2)) ((7 0) (5 3)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 8 2 make 1) (cat k-0 "init")
+    (7 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "init") (cat k-0 "wrap"))))
+  (label 10)
+  (parent 6)
+  (unrealized (1 2) (3 0) (4 0))
+  (comment "empty cohort"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (7 0))
+    ((4 0) (3 0)) ((5 4) (1 0)) ((6 0) (5 2)) ((6 1) (5 0))
+    ((7 0) (5 3)))
+  (leadsto ((3 0) (7 0)) ((6 0) (5 2)) ((7 0) (5 3)))
+  (neq ("wrap" "decrypt") ("decrypt" "wrap") ("init" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 8 3 set-decrypt 1)
+    (cat k-0 "decrypt") (7 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap"))))
+  (label 11)
+  (parent 6)
+  (unrealized (1 2) (3 0) (4 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (8 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (5 3)) ((8 0) (7 0)))
+  (leadsto ((6 0) (5 2)) ((7 0) (5 3)) ((8 0) (7 0)))
+  (neq (cur "decrypt") ("decrypt" "wrap") ("init" "wrap")
+    ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k-0 "decrypt") (7 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 cur) (cat k-0 "decrypt"))))
+  (label 12)
+  (parent 6)
+  (unrealized (1 2) (3 0) (4 0) (8 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 2) (4 0))
+    ((5 4) (1 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (5 3)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 6 2 make 1) (cat k "init")
+    (4 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k))))
+  (label 13)
+  (parent 7)
+  (unrealized (1 2) (3 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (6 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 2) (6 0)) ((5 4) (1 0)) ((6 0) (5 3)))
+  (leadsto ((2 0) (5 2)) ((2 0) (6 0)) ((6 0) (5 3)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 7 2 make 1) (cat k "init")
+    (6 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "init") (cat k "wrap"))))
+  (label 14)
+  (parent 8)
+  (unrealized (1 2) (3 0) (4 0))
+  (origs)
+  (comment "empty cohort"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (6 0)) ((4 0) (3 0)) ((5 4) (1 0)) ((6 0) (5 3)))
+  (leadsto ((2 0) (5 2)) ((3 0) (6 0)) ((6 0) (5 3)))
+  (neq ("wrap" "decrypt") ("decrypt" "wrap") ("init" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 7 3 set-decrypt 1)
+    (cat k "decrypt") (6 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap"))))
+  (label 15)
+  (parent 8)
+  (unrealized (1 2) (3 0) (4 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (7 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 4) (1 0)) ((6 0) (5 3)) ((7 0) (6 0)))
+  (leadsto ((2 0) (5 2)) ((6 0) (5 3)) ((7 0) (6 0)))
+  (neq (cur "decrypt") ("decrypt" "wrap") ("init" "wrap")
+    ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k "decrypt") (6 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k cur) (cat k "decrypt"))))
+  (label 16)
+  (parent 8)
+  (unrealized (1 2) (3 0) (4 0) (7 0))
+  (comment "3 in cohort - 3 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2))
+    ((4 0) (3 0)) ((4 0) (5 3)) ((5 3) (3 0)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)))
+  (leadsto ((2 0) (4 0)) ((4 0) (3 0)) ((4 0) (5 3)) ((6 0) (5 2)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 7 4 set-wrap 1)
+    (cat k-0 "wrap") (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k))))
+  (label 17)
+  (parent 9)
+  (unrealized (1 2))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (7 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (3 0)))
+  (leadsto ((2 0) (4 0)) ((4 0) (5 3)) ((6 0) (5 2)) ((7 0) (3 0)))
+  (neq (cur "wrap") ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-wrap 1)
+    (cat k-0 "wrap") (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 cur) (cat k-0 "wrap"))))
+  (label 18)
+  (parent 9)
+  (unrealized (1 2) (7 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (7 0))
+    ((4 0) (3 0)) ((5 4) (1 0)) ((6 0) (5 2)) ((6 1) (5 0))
+    ((7 0) (5 3)))
+  (leadsto ((2 0) (4 0)) ((3 0) (7 0)) ((6 0) (5 2)) ((7 0) (5 3)))
+  (neq ("wrap" "decrypt") ("decrypt" "wrap") ("init" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 8 2 make 1) (cat k-0 "init")
+    (4 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap"))))
+  (label 19)
+  (parent 11)
+  (unrealized (1 2) (3 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur "init") (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (8 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (5 3)) ((8 0) (7 0)))
+  (leadsto ((2 0) (8 0)) ((6 0) (5 2)) ((7 0) (5 3)) ((8 0) (7 0)))
+  (neq ("init" "decrypt") ("decrypt" "wrap") ("init" "wrap")
+    ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 9 2 make 1) (cat k-0 "init")
+    (8 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 "init") (cat k-0 "decrypt"))))
+  (label 20)
+  (parent 12)
+  (unrealized (1 2) (3 0) (4 0))
+  (comment "empty cohort"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2))
+    ((4 0) (3 0)) ((4 0) (8 0)) ((5 4) (1 0)) ((6 0) (5 2))
+    ((6 1) (5 0)) ((7 0) (5 3)) ((8 0) (7 0)))
+  (leadsto ((4 0) (8 0)) ((6 0) (5 2)) ((7 0) (5 3)) ((8 0) (7 0)))
+  (neq ("init" "wrap") ("wrap" "decrypt") ("decrypt" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 9 4 set-wrap 1)
+    (cat k-0 "wrap") (8 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt"))))
+  (label 21)
+  (parent 12)
+  (unrealized (1 2) (3 0) (4 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 2) (4 0))
+    ((5 3) (3 0)) ((5 4) (1 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (3 0)) ((4 0) (5 3)))
+  (neq ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 6 4 set-wrap 1)
+    (cat k "wrap") (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k))))
+  (label 23)
+  (parent 13)
+  (unrealized (1 2))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (6 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 2) (4 0)) ((5 4) (1 0)) ((6 0) (3 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (5 3)) ((6 0) (3 0)))
+  (neq (cur "wrap") ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-wrap 1) (cat k "wrap")
+    (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k cur) (cat k "wrap"))))
+  (label 24)
+  (parent 13)
+  (unrealized (1 2) (6 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (6 0)) ((4 0) (3 0)) ((5 2) (4 0)) ((5 4) (1 0))
+    ((6 0) (5 3)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((3 0) (6 0)) ((6 0) (5 3)))
+  (neq ("wrap" "decrypt") ("decrypt" "wrap") ("init" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 7 2 make 1) (cat k "init")
+    (4 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap"))))
+  (label 25)
+  (parent 15)
+  (unrealized (1 2) (3 0))
+  (origs)
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "init") (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (7 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 2) (7 0)) ((5 4) (1 0)) ((6 0) (5 3)) ((7 0) (6 0)))
+  (leadsto ((2 0) (5 2)) ((2 0) (7 0)) ((6 0) (5 3)) ((7 0) (6 0)))
+  (neq ("init" "decrypt") ("decrypt" "wrap") ("init" "wrap")
+    ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 8 2 make 1) (cat k "init")
+    (7 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "init") (cat k "decrypt"))))
+  (label 26)
+  (parent 16)
+  (unrealized (1 2) (3 0) (4 0))
+  (comment "empty cohort"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (7 0)) ((5 4) (1 0))
+    ((6 0) (5 3)) ((7 0) (6 0)))
+  (leadsto ((2 0) (5 2)) ((4 0) (7 0)) ((6 0) (5 3)) ((7 0) (6 0)))
+  (neq ("init" "wrap") ("wrap" "decrypt") ("decrypt" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 8 4 set-wrap 1)
+    (cat k "wrap") (7 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt"))))
+  (label 27)
+  (parent 16)
+  (unrealized (1 2) (3 0) (4 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (8 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 4) (1 0)) ((6 0) (5 3)) ((7 0) (6 0)) ((8 0) (7 0)))
+  (leadsto ((2 0) (5 2)) ((6 0) (5 3)) ((7 0) (6 0)) ((8 0) (7 0)))
+  (neq (cur "wrap") ("wrap" "decrypt") ("decrypt" "wrap")
+    ("init" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-wrap 1) (cat k "wrap")
+    (7 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k cur) (cat k "wrap"))))
+  (label 28)
+  (parent 16)
+  (unrealized (1 2) (3 0) (4 0) (8 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2))
+    ((4 0) (3 0)) ((4 0) (5 3)) ((5 3) (3 0)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)))
+  (leadsto ((2 0) (4 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((6 0) (5 2)))
+  (neq ("wrap" "decrypt") ("init" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 7 3 set-decrypt 1)
+    (cat k-0 "decrypt") (1 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k))))
+  (label 29)
+  (parent 17)
+  (unrealized)
+  (shape)
+  (maps ((0 1 2 3 4 5 6) ((k k) (kp k-0))))
+  (origs))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (7 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 3) (3 0))
+    ((5 4) (1 0)) ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (1 2)))
+  (leadsto ((2 0) (4 0)) ((4 0) (3 0)) ((4 0) (5 3)) ((6 0) (5 2))
+    ((7 0) (1 2)))
+  (neq (cur "decrypt") ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k-0 "decrypt") (1 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 cur) (cat k-0 "decrypt"))))
+  (label 30)
+  (parent 17)
+  (unrealized (7 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (8 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (3 0)) ((8 0) (7 0)))
+  (leadsto ((2 0) (4 0)) ((4 0) (5 3)) ((6 0) (5 2)) ((7 0) (3 0))
+    ((8 0) (7 0)))
+  (neq (cur "decrypt") ("decrypt" "wrap") ("init" "wrap")
+    ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k-0 "decrypt") (7 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 cur) (cat k-0 "decrypt"))))
+  (label 31)
+  (parent 18)
+  (unrealized (1 2) (8 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (7 0))
+    ((4 0) (3 0)) ((5 4) (1 0)) ((6 0) (5 2)) ((6 1) (5 0))
+    ((7 0) (5 3)))
+  (leadsto ((2 0) (4 0)) ((3 0) (7 0)) ((4 0) (3 0)) ((6 0) (5 2))
+    ((7 0) (5 3)))
+  (neq ("init" "wrap") ("wrap" "decrypt") ("decrypt" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 8 4 set-wrap 1)
+    (cat k-0 "wrap") (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap"))))
+  (label 32)
+  (parent 19)
+  (unrealized (1 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-wrap 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (8 0)) ((2 1) (5 1))
+    ((3 0) (7 0)) ((4 0) (3 0)) ((5 4) (1 0)) ((6 0) (5 2))
+    ((6 1) (5 0)) ((7 0) (5 3)) ((8 0) (3 0)))
+  (leadsto ((2 0) (4 0)) ((3 0) (7 0)) ((6 0) (5 2)) ((7 0) (5 3))
+    ((8 0) (3 0)))
+  (neq (cur "wrap") ("wrap" "decrypt") ("decrypt" "wrap")
+    ("init" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-wrap 1)
+    (cat k-0 "wrap") (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 cur) (cat k-0 "wrap"))))
+  (label 33)
+  (parent 19)
+  (unrealized (1 2) (8 0))
+  (comment "empty cohort"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2))
+    ((4 0) (3 0)) ((4 0) (8 0)) ((5 4) (1 0)) ((6 0) (5 2))
+    ((6 1) (5 0)) ((7 0) (5 3)) ((8 0) (7 0)))
+  (leadsto ((2 0) (4 0)) ((4 0) (8 0)) ((6 0) (5 2)) ((7 0) (5 3))
+    ((8 0) (7 0)))
+  (neq ("init" "wrap") ("wrap" "decrypt") ("decrypt" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 9 2 make 1) (cat k-0 "init")
+    (4 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt"))))
+  (label 34)
+  (parent 21)
+  (unrealized (1 2) (3 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 2) (4 0))
+    ((5 3) (3 0)) ((5 4) (1 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((3 0) (1 2)) ((4 0) (3 0))
+    ((4 0) (5 3)))
+  (neq ("wrap" "decrypt") ("init" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 6 3 set-decrypt 1)
+    (cat k "decrypt") (1 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k))))
+  (label 35)
+  (parent 23)
+  (unrealized)
+  (shape)
+  (maps ((0 1 2 3 4 5 2) ((k k) (kp k))))
+  (origs))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-decrypt 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (6 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 2) (4 0)) ((5 3) (3 0)) ((5 4) (1 0)) ((6 0) (1 2)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((6 0) (1 2)))
+  (neq (cur "decrypt") ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k "decrypt") (1 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k cur) (cat k "decrypt"))))
+  (label 36)
+  (parent 23)
+  (unrealized (6 0))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (7 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 2) (4 0)) ((5 4) (1 0)) ((6 0) (3 0)) ((7 0) (6 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (5 3)) ((6 0) (3 0))
+    ((7 0) (6 0)))
+  (neq (cur "decrypt") ("decrypt" "wrap") ("init" "wrap")
+    ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k "decrypt") (6 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k cur) (cat k "decrypt"))))
+  (label 37)
+  (parent 24)
+  (unrealized (1 2) (7 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (6 0)) ((4 0) (3 0)) ((5 2) (4 0)) ((5 4) (1 0))
+    ((6 0) (5 3)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((3 0) (6 0)) ((4 0) (3 0))
+    ((6 0) (5 3)))
+  (neq ("init" "wrap") ("wrap" "decrypt") ("decrypt" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 7 4 set-wrap 1)
+    (cat k "wrap") (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap"))))
+  (label 38)
+  (parent 25)
+  (unrealized (1 2))
+  (origs)
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-wrap 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (7 0))
+    ((2 1) (5 0)) ((3 0) (6 0)) ((4 0) (3 0)) ((5 2) (4 0))
+    ((5 4) (1 0)) ((6 0) (5 3)) ((7 0) (3 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((3 0) (6 0)) ((6 0) (5 3))
+    ((7 0) (3 0)))
+  (neq (cur "wrap") ("wrap" "decrypt") ("decrypt" "wrap")
+    ("init" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-wrap 1) (cat k "wrap")
+    (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k cur) (cat k "wrap"))))
+  (label 39)
+  (parent 25)
+  (unrealized (1 2) (7 0))
+  (comment "empty cohort"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (7 0)) ((5 2) (4 0))
+    ((5 4) (1 0)) ((6 0) (5 3)) ((7 0) (6 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (7 0)) ((6 0) (5 3))
+    ((7 0) (6 0)))
+  (neq ("init" "wrap") ("wrap" "decrypt") ("decrypt" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 8 2 make 1) (cat k "init")
+    (4 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt"))))
+  (label 40)
+  (parent 27)
+  (unrealized (1 2) (3 0))
+  (comment "2 in cohort - 2 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (8 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 2) (8 0)) ((5 4) (1 0)) ((6 0) (5 3)) ((7 0) (6 0))
+    ((8 0) (7 0)))
+  (leadsto ((2 0) (5 2)) ((2 0) (8 0)) ((6 0) (5 3)) ((7 0) (6 0))
+    ((8 0) (7 0)))
+  (neq ("init" "wrap") ("wrap" "decrypt") ("decrypt" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 9 2 make 1) (cat k "init")
+    (8 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap"))))
+  (label 41)
+  (parent 28)
+  (unrealized (1 2) (3 0) (4 0))
+  (comment "empty cohort"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (8 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 3) (3 0))
+    ((5 4) (1 0)) ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (1 2))
+    ((8 0) (7 0)))
+  (leadsto ((2 0) (4 0)) ((4 0) (3 0)) ((4 0) (5 3)) ((6 0) (5 2))
+    ((7 0) (1 2)) ((8 0) (7 0)))
+  (neq (cur "wrap") ("wrap" "decrypt") ("init" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-wrap 1)
+    (cat k-0 "wrap") (7 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 cur) (cat k-0 "wrap"))))
+  (label 42)
+  (parent 30)
+  (unrealized (8 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2))
+    ((4 0) (5 3)) ((4 0) (8 0)) ((5 3) (8 0)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (3 0)) ((8 0) (7 0)))
+  (leadsto ((2 0) (4 0)) ((4 0) (5 3)) ((4 0) (8 0)) ((6 0) (5 2))
+    ((7 0) (3 0)) ((8 0) (7 0)))
+  (neq ("init" "wrap") ("wrap" "decrypt") ("decrypt" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 9 4 set-wrap 1)
+    (cat k-0 "wrap") (8 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt"))))
+  (label 43)
+  (parent 31)
+  (unrealized (1 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (8 0)) ((2 1) (5 1))
+    ((3 0) (7 0)) ((4 0) (3 0)) ((5 4) (1 0)) ((6 0) (5 2))
+    ((6 1) (5 0)) ((7 0) (5 3)) ((8 0) (1 2)))
+  (leadsto ((2 0) (4 0)) ((3 0) (7 0)) ((4 0) (3 0)) ((6 0) (5 2))
+    ((7 0) (5 3)) ((8 0) (1 2)))
+  (neq (cur "decrypt") ("init" "wrap") ("wrap" "decrypt")
+    ("decrypt" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k-0 "decrypt") (1 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 cur) (cat k-0 "decrypt"))))
+  (label 45)
+  (parent 32)
+  (unrealized (8 0))
+  (comment "empty cohort"))
+
+(defskeleton wrap-decrypt
+  (vars (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 1) (5 1)) ((3 0) (1 2))
+    ((4 0) (8 0)) ((5 3) (3 0)) ((5 4) (1 0)) ((6 0) (5 2))
+    ((6 1) (5 0)) ((7 0) (3 0)) ((7 0) (5 3)) ((8 0) (7 0)))
+  (leadsto ((2 0) (4 0)) ((4 0) (8 0)) ((6 0) (5 2)) ((7 0) (3 0))
+    ((7 0) (5 3)) ((8 0) (7 0)))
+  (neq ("decrypt" "wrap") ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (displaced 9 7 set-wrap 1)
+    (cat k-0 "wrap") (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt"))))
+  (label 46)
+  (parent 34)
+  (unrealized (1 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (7 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 2) (4 0)) ((5 3) (3 0)) ((5 4) (1 0)) ((6 0) (1 2))
+    ((7 0) (6 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((6 0) (1 2)) ((7 0) (6 0)))
+  (neq (cur "wrap") ("wrap" "decrypt") ("init" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-wrap 1) (cat k "wrap")
+    (6 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k cur) (cat k "wrap"))))
+  (label 48)
+  (parent 36)
+  (unrealized (7 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (1 2)) ((4 0) (5 3)) ((4 0) (7 0)) ((5 2) (4 0))
+    ((5 3) (7 0)) ((5 4) (1 0)) ((6 0) (3 0)) ((7 0) (6 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (5 3)) ((4 0) (7 0))
+    ((6 0) (3 0)) ((7 0) (6 0)))
+  (neq ("init" "wrap") ("wrap" "decrypt") ("decrypt" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 8 4 set-wrap 1)
+    (cat k "wrap") (7 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt"))))
+  (label 49)
+  (parent 37)
+  (unrealized (1 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (8 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 2) (4 0)) ((5 4) (1 0)) ((6 0) (3 0)) ((7 0) (6 0))
+    ((8 0) (7 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (5 3)) ((6 0) (3 0))
+    ((7 0) (6 0)) ((8 0) (7 0)))
+  (neq (cur "wrap") ("wrap" "decrypt") ("decrypt" "wrap")
+    ("init" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-wrap 1) (cat k "wrap")
+    (7 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k cur) (cat k "wrap"))))
+  (label 50)
+  (parent 37)
+  (unrealized (1 2) (8 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (7 0))
+    ((2 1) (5 0)) ((3 0) (6 0)) ((4 0) (3 0)) ((5 2) (4 0))
+    ((5 4) (1 0)) ((6 0) (5 3)) ((7 0) (1 2)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((3 0) (6 0)) ((4 0) (3 0))
+    ((6 0) (5 3)) ((7 0) (1 2)))
+  (neq (cur "decrypt") ("init" "wrap") ("wrap" "decrypt")
+    ("decrypt" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k "decrypt") (1 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k cur) (cat k "decrypt"))))
+  (label 51)
+  (parent 38)
+  (unrealized (7 0))
+  (comment "empty cohort"))
+
+(defskeleton wrap-decrypt
+  (vars (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 1) (5 0))
+    ((3 0) (1 2)) ((4 0) (7 0)) ((5 2) (4 0)) ((5 3) (3 0))
+    ((5 4) (1 0)) ((6 0) (3 0)) ((6 0) (5 3)) ((7 0) (6 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (7 0)) ((6 0) (3 0))
+    ((6 0) (5 3)) ((7 0) (6 0)))
+  (neq ("decrypt" "wrap") ("init" "wrap") ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (displaced 8 6 set-wrap 1)
+    (cat k "wrap") (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt"))))
+  (label 52)
+  (parent 40)
+  (unrealized (1 2))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (8 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (7 0))
+    ((5 2) (4 0)) ((5 4) (1 0)) ((6 0) (5 3)) ((7 0) (6 0))
+    ((8 0) (3 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (7 0)) ((6 0) (5 3))
+    ((7 0) (6 0)) ((8 0) (3 0)))
+  (neq (cur "wrap") ("init" "wrap") ("wrap" "decrypt")
+    ("decrypt" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-wrap 1) (cat k "wrap")
+    (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k cur) (cat k "wrap"))))
+  (label 53)
+  (parent 40)
+  (unrealized (1 2) (8 0))
+  (comment "1 in cohort - 1 not yet seen"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (8 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 2) (4 0)) ((5 3) (3 0)) ((5 4) (1 0)) ((6 0) (1 2))
+    ((7 0) (6 0)) ((8 0) (7 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((6 0) (1 2)) ((7 0) (6 0)) ((8 0) (7 0)))
+  (neq (cur "decrypt") ("decrypt" "wrap") ("wrap" "decrypt")
+    ("init" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k "decrypt") (7 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k cur) (cat k "decrypt"))))
+  (label 57)
+  (parent 48)
+  (unrealized (8 0))
+  (comment "empty cohort"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-decrypt 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (8 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (5 3)) ((4 0) (7 0))
+    ((5 2) (4 0)) ((5 3) (7 0)) ((5 4) (1 0)) ((6 0) (3 0))
+    ((7 0) (6 0)) ((8 0) (1 2)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (5 3)) ((4 0) (7 0))
+    ((6 0) (3 0)) ((7 0) (6 0)) ((8 0) (1 2)))
+  (neq (cur "decrypt") ("init" "wrap") ("wrap" "decrypt")
+    ("decrypt" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k "decrypt") (1 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k cur) (cat k "decrypt"))))
+  (label 58)
+  (parent 49)
+  (unrealized (8 0))
+  (comment "empty cohort"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-decrypt 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (8 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (7 0)) ((5 2) (4 0))
+    ((5 3) (3 0)) ((5 4) (1 0)) ((6 0) (3 0)) ((6 0) (5 3))
+    ((7 0) (6 0)) ((8 0) (1 2)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (7 0)) ((6 0) (3 0))
+    ((6 0) (5 3)) ((7 0) (6 0)) ((8 0) (1 2)))
+  (neq (cur "decrypt") ("decrypt" "wrap") ("init" "wrap")
+    ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k "decrypt") (1 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k cur) (cat k "decrypt"))))
+  (label 60)
+  (parent 52)
+  (unrealized (8 0))
+  (comment "empty cohort"))
+
+(comment "Strand bound exceeded--aborting run")
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (9 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (5 3)) ((8 0) (7 0))
+    ((9 0) (8 0)))
+  (leadsto ((6 0) (5 2)) ((7 0) (5 3)) ((8 0) (7 0)) ((9 0) (8 0)))
+  (neq (cur "wrap") ("wrap" "decrypt") ("decrypt" "wrap")
+    ("init" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-wrap 1)
+    (cat k-0 "wrap") (8 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 cur) (cat k-0 "wrap"))))
+  (label 22)
+  (parent 12)
+  (unrealized (1 2) (3 0) (4 0) (9 0))
+  (comment "aborted"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (9 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (3 0)) ((8 0) (7 0))
+    ((9 0) (8 0)))
+  (leadsto ((2 0) (4 0)) ((4 0) (5 3)) ((6 0) (5 2)) ((7 0) (3 0))
+    ((8 0) (7 0)) ((9 0) (8 0)))
+  (neq (cur "wrap") ("wrap" "decrypt") ("decrypt" "wrap")
+    ("init" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-wrap 1)
+    (cat k-0 "wrap") (8 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 cur) (cat k-0 "wrap"))))
+  (label 44)
+  (parent 31)
+  (unrealized (1 2) (9 0))
+  (comment "aborted"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (9 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (8 0)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (5 3)) ((8 0) (7 0))
+    ((9 0) (3 0)))
+  (leadsto ((2 0) (4 0)) ((4 0) (8 0)) ((6 0) (5 2)) ((7 0) (5 3))
+    ((8 0) (7 0)) ((9 0) (3 0)))
+  (neq (cur "wrap") ("init" "wrap") ("wrap" "decrypt")
+    ("decrypt" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-wrap 1)
+    (cat k-0 "wrap") (3 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 cur) (cat k-0 "wrap"))))
+  (label 47)
+  (parent 34)
+  (unrealized (1 2) (9 0))
+  (comment "aborted"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (9 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3)) ((5 3) (3 0))
+    ((5 4) (1 0)) ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (1 2))
+    ((8 0) (7 0)) ((9 0) (8 0)))
+  (leadsto ((2 0) (4 0)) ((4 0) (3 0)) ((4 0) (5 3)) ((6 0) (5 2))
+    ((7 0) (1 2)) ((8 0) (7 0)) ((9 0) (8 0)))
+  (neq (cur "decrypt") ("decrypt" "wrap") ("wrap" "decrypt")
+    ("init" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k-0 "decrypt") (8 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 cur) (cat k-0 "decrypt"))))
+  (label 54)
+  (parent 42)
+  (unrealized (9 0))
+  (comment "aborted"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-decrypt 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (9 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (5 3)) ((4 0) (8 0)) ((5 3) (8 0))
+    ((5 4) (1 0)) ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (3 0))
+    ((8 0) (7 0)) ((9 0) (1 2)))
+  (leadsto ((2 0) (4 0)) ((4 0) (5 3)) ((4 0) (8 0)) ((6 0) (5 2))
+    ((7 0) (3 0)) ((8 0) (7 0)) ((9 0) (1 2)))
+  (neq (cur "decrypt") ("init" "wrap") ("wrap" "decrypt")
+    ("decrypt" "wrap"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k-0 "decrypt") (1 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 cur) (cat k-0 "decrypt"))))
+  (label 55)
+  (parent 43)
+  (unrealized (9 0))
+  (comment "aborted"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k k-0 skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k-0))
+  (defstrand make 2 (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-wrap 1 (cur "init") (k k-0))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k-0))
+  (defstrand make 2 (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k-0))
+  (defstrand set-decrypt 1 (cur "wrap") (k k-0))
+  (defstrand set-decrypt 1 (cur cur) (k k-0))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (9 0)) ((2 1) (5 1))
+    ((3 0) (1 2)) ((4 0) (8 0)) ((5 3) (3 0)) ((5 4) (1 0))
+    ((6 0) (5 2)) ((6 1) (5 0)) ((7 0) (3 0)) ((7 0) (5 3))
+    ((8 0) (7 0)) ((9 0) (1 2)))
+  (leadsto ((2 0) (4 0)) ((4 0) (8 0)) ((6 0) (5 2)) ((7 0) (3 0))
+    ((7 0) (5 3)) ((8 0) (7 0)) ((9 0) (1 2)))
+  (neq (cur "decrypt") ("decrypt" "wrap") ("init" "wrap")
+    ("wrap" "decrypt"))
+  (uniq-gen k k-0)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k-0 "decrypt") (1 2))
+  (traces ((recv k) (send k))
+    ((recv (enc k k-0)) (recv (hash k-0)) (obsv (cat k-0 "decrypt"))
+      (send k)) ((init (cat k-0 "init")) (send (hash k-0)))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 "init") (cat k-0 "wrap")))
+    ((recv (hash k)) (recv (hash k-0)) (obsv (cat k "init"))
+      (obsv (cat k-0 "wrap")) (send (enc k k-0)))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k-0 "decrypt") (cat k-0 "wrap")))
+    ((tran (cat k-0 "wrap") (cat k-0 "decrypt")))
+    ((tran (cat k-0 cur) (cat k-0 "decrypt"))))
+  (label 56)
+  (parent 46)
+  (unrealized (9 0))
+  (comment "aborted"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (9 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (3 0)) ((4 0) (5 3))
+    ((5 2) (4 0)) ((5 4) (1 0)) ((6 0) (3 0)) ((7 0) (6 0))
+    ((8 0) (7 0)) ((9 0) (8 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (5 3)) ((6 0) (3 0))
+    ((7 0) (6 0)) ((8 0) (7 0)) ((9 0) (8 0)))
+  (neq (cur "decrypt") ("decrypt" "wrap") ("wrap" "decrypt")
+    ("init" "wrap"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k "decrypt") (8 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k cur) (cat k "decrypt"))))
+  (label 59)
+  (parent 50)
+  (unrealized (1 2) (9 0))
+  (comment "aborted"))
+
+(defskeleton wrap-decrypt
+  (vars (cur mesg) (k skey))
+  (deflistener k)
+  (defstrand decrypt 4 (x k) (k k))
+  (defstrand make 2 (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "init") (k k))
+  (defstrand wrap 5 (cur "init") (k0 k) (k1 k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur "wrap") (k k))
+  (defstrand set-wrap 1 (cur "decrypt") (k k))
+  (defstrand set-decrypt 1 (cur cur) (k k))
+  (precedes ((1 3) (0 0)) ((2 0) (4 0)) ((2 0) (5 2)) ((2 0) (9 0))
+    ((2 1) (5 0)) ((3 0) (1 2)) ((4 0) (7 0)) ((5 2) (4 0))
+    ((5 3) (3 0)) ((5 4) (1 0)) ((6 0) (5 3)) ((7 0) (6 0))
+    ((8 0) (3 0)) ((9 0) (8 0)))
+  (leadsto ((2 0) (4 0)) ((2 0) (5 2)) ((4 0) (7 0)) ((6 0) (5 3))
+    ((7 0) (6 0)) ((8 0) (3 0)) ((9 0) (8 0)))
+  (neq (cur "decrypt") ("decrypt" "wrap") ("init" "wrap")
+    ("wrap" "decrypt"))
+  (uniq-gen k)
+  (operation state-passing-test (added-strand set-decrypt 1)
+    (cat k "decrypt") (8 0))
+  (traces ((recv k) (send k))
+    ((recv (enc k k)) (recv (hash k)) (obsv (cat k "decrypt")) (send k))
+    ((init (cat k "init")) (send (hash k)))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "init") (cat k "wrap")))
+    ((recv (hash k)) (recv (hash k)) (obsv (cat k "init"))
+      (obsv (cat k "wrap")) (send (enc k k)))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k "wrap") (cat k "decrypt")))
+    ((tran (cat k "decrypt") (cat k "wrap")))
+    ((tran (cat k cur) (cat k "decrypt"))))
+  (label 61)
+  (parent 53)
+  (unrealized (1 2) (9 0))
+  (comment "aborted"))
diff --git a/tst/yahalom-6.3.6.scm b/tst/yahalom-6.3.6.scm
deleted file mode 100644
--- a/tst/yahalom-6.3.6.scm
+++ /dev/null
@@ -1,53 +0,0 @@
-(herald "Yahalom Protocol"
-  (comment "A Survey of Authentication Protocol Literature:"
-	   "Version 1.0, John Clark and Jeremy Jacob,"
-	   "Yahalom Protocol, Section 6.3.6, Page 49")
-  (url "http://www.eecs.umich.edu/acal/swerve/docs/49-1.pdf")
-  (bound 15))
-
-(defprotocol yahalom basic
-  (defrole init
-    (vars (a b s name) (n-a n-b text) (k skey) (blob mesg))
-    (trace
-     (send (cat a n-a))
-     (recv (cat (enc b k n-a n-b (ltk a s)) blob))
-     (send (cat blob (enc n-b k)))))
-  (defrole resp
-    (vars (a b s name) (n-a n-b text) (k skey))
-    (trace
-     (recv (cat a n-a))
-     (send (cat b (enc a n-a n-b (ltk b s))))
-     (recv (cat (enc a k (ltk b s)) (enc n-b k)))))
-  (defrole serv
-    (vars (a b s name) (n-a n-b text) (k skey))
-    (trace
-     (recv (cat b (enc a n-a n-b (ltk b s))))
-     (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    (uniq-orig k))
-  (comment "Yahalom protocol, Section 6.3.6, Page 49")
-  (url "http://www.eecs.umich.edu/acal/swerve/docs/49-1.pdf"))
-
-(defskeleton yahalom
-  (vars (a b s name) (n-a n-b text))
-  (defstrand init 3 (a a) (b b) (s s) (n-a n-a) (n-b n-b))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b))
-
-(defskeleton yahalom
-  (vars (a b s name) (n-a n-b text) (k skey))
-  (defstrand resp 3 (a a) (b b) (s s) (n-a n-a) (n-b n-b) (k k))
-  (deflistener k)
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b))
-
-(defskeleton yahalom
-  (vars (a b s name) (n-a n-b text))
-  (defstrand resp 3 (a a) (b b) (s s) (n-a n-a) (n-b n-b))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b))
-
-(defskeleton yahalom
-  (vars (a b s name) (n-a n-b text))
-  (defstrand serv 2 (a a) (b b) (s s) (n-a n-a) (n-b n-b))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b))
diff --git a/tst/yahalom-6.3.6.tst b/tst/yahalom-6.3.6.tst
deleted file mode 100644
--- a/tst/yahalom-6.3.6.tst
+++ /dev/null
@@ -1,765 +0,0 @@
-(herald "Yahalom Protocol"
-  (comment "A Survey of Authentication Protocol Literature:"
-    "Version 1.0, John Clark and Jeremy Jacob,"
-    "Yahalom Protocol, Section 6.3.6, Page 49")
-  (url "http://www.eecs.umich.edu/acal/swerve/docs/49-1.pdf")
-  (bound 15))
-
-(comment "CPSA 2.5.4")
-(comment "All input read from yahalom-6.3.6.scm")
-(comment "Strand count bounded at 15")
-
-(defprotocol yahalom basic
-  (defrole init
-    (vars (a b s name) (n-a n-b text) (k skey) (blob mesg))
-    (trace (send (cat a n-a))
-      (recv (cat (enc b k n-a n-b (ltk a s)) blob))
-      (send (cat blob (enc n-b k)))))
-  (defrole resp
-    (vars (a b s name) (n-a n-b text) (k skey))
-    (trace (recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k)))))
-  (defrole serv
-    (vars (a b s name) (n-a n-b text) (k skey))
-    (trace (recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    (uniq-orig k))
-  (comment "Yahalom protocol, Section 6.3.6, Page 49")
-  (url "http://www.eecs.umich.edu/acal/swerve/docs/49-1.pdf"))
-
-(defskeleton yahalom
-  (vars (blob mesg) (n-a n-b text) (a b s name) (k skey))
-  (defstrand init 3 (blob blob) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b)
-  (traces
-    ((send (cat a n-a)) (recv (cat (enc b k n-a n-b (ltk a s)) blob))
-      (send (cat blob (enc n-b k)))))
-  (label 0)
-  (unrealized (0 1))
-  (origs (n-a (0 0)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton yahalom
-  (vars (blob mesg) (n-a n-b text) (a b s name) (k skey))
-  (defstrand init 3 (blob blob) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (precedes ((0 0) (1 0)) ((1 1) (0 1)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (added-strand serv 2)
-    (enc b k n-a n-b (ltk a s)) (0 1))
-  (traces
-    ((send (cat a n-a)) (recv (cat (enc b k n-a n-b (ltk a s)) blob))
-      (send (cat blob (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s))))))
-  (label 1)
-  (parent 0)
-  (unrealized (1 0))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton yahalom
-  (vars (blob mesg) (n-a n-b text) (a b s name) (k skey))
-  (defstrand init 3 (blob blob) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand resp 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s))
-  (precedes ((0 0) (2 0)) ((1 1) (0 1)) ((2 1) (1 0)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (added-strand resp 2)
-    (enc a n-a n-b (ltk b s)) (1 0))
-  (traces
-    ((send (cat a n-a)) (recv (cat (enc b k n-a n-b (ltk a s)) blob))
-      (send (cat blob (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))))
-  (label 2)
-  (parent 1)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (s s) (n-a n-a) (n-b n-b) (k k) (blob blob))))
-  (origs (k (1 1)) (n-a (0 0)) (n-b (2 1))))
-
-(comment "Nothing left to do")
-
-(defprotocol yahalom basic
-  (defrole init
-    (vars (a b s name) (n-a n-b text) (k skey) (blob mesg))
-    (trace (send (cat a n-a))
-      (recv (cat (enc b k n-a n-b (ltk a s)) blob))
-      (send (cat blob (enc n-b k)))))
-  (defrole resp
-    (vars (a b s name) (n-a n-b text) (k skey))
-    (trace (recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k)))))
-  (defrole serv
-    (vars (a b s name) (n-a n-b text) (k skey))
-    (trace (recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    (uniq-orig k))
-  (comment "Yahalom protocol, Section 6.3.6, Page 49")
-  (url "http://www.eecs.umich.edu/acal/swerve/docs/49-1.pdf"))
-
-(defskeleton yahalom
-  (vars (n-a n-b text) (a b s name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (deflistener k)
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b)
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k)))) ((recv k) (send k)))
-  (label 3)
-  (unrealized (0 2))
-  (origs (n-b (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton yahalom
-  (vars (n-a n-b n-a-0 n-b-0 text) (a b s name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (deflistener k)
-  (defstrand serv 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s) (k k))
-  (precedes ((2 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (added-strand serv 2) (enc a k (ltk b s))
-    (0 2))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k)))) ((recv k) (send k))
-    ((recv (cat b (enc a n-a-0 n-b-0 (ltk b s))))
-      (send (cat (enc b k n-a-0 n-b-0 (ltk a s)) (enc a k (ltk b s))))))
-  (label 4)
-  (parent 3)
-  (unrealized (0 2) (1 0) (2 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton yahalom
-  (vars (n-a n-b text) (a b s name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (deflistener k)
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (precedes ((0 1) (2 0)) ((2 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (displaced 3 0 resp 2)
-    (enc a n-a-0 n-b-0 (ltk b s)) (2 0))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k)))) ((recv k) (send k))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s))))))
-  (label 5)
-  (parent 4)
-  (unrealized (0 2) (1 0))
-  (comment "empty cohort"))
-
-(defskeleton yahalom
-  (vars (n-a n-b n-a-0 n-b-0 text) (a b s name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (deflistener k)
-  (defstrand serv 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s) (k k))
-  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s))
-  (precedes ((2 1) (0 2)) ((2 1) (1 0)) ((3 1) (2 0)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (added-strand resp 2)
-    (enc a n-a-0 n-b-0 (ltk b s)) (2 0))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k)))) ((recv k) (send k))
-    ((recv (cat b (enc a n-a-0 n-b-0 (ltk b s))))
-      (send (cat (enc b k n-a-0 n-b-0 (ltk a s)) (enc a k (ltk b s)))))
-    ((recv (cat a n-a-0)) (send (cat b (enc a n-a-0 n-b-0 (ltk b s))))))
-  (label 6)
-  (parent 4)
-  (unrealized (0 2) (1 0))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
-
-(defprotocol yahalom basic
-  (defrole init
-    (vars (a b s name) (n-a n-b text) (k skey) (blob mesg))
-    (trace (send (cat a n-a))
-      (recv (cat (enc b k n-a n-b (ltk a s)) blob))
-      (send (cat blob (enc n-b k)))))
-  (defrole resp
-    (vars (a b s name) (n-a n-b text) (k skey))
-    (trace (recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k)))))
-  (defrole serv
-    (vars (a b s name) (n-a n-b text) (k skey))
-    (trace (recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    (uniq-orig k))
-  (comment "Yahalom protocol, Section 6.3.6, Page 49")
-  (url "http://www.eecs.umich.edu/acal/swerve/docs/49-1.pdf"))
-
-(defskeleton yahalom
-  (vars (n-a n-b text) (a b s name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b)
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k)))))
-  (label 7)
-  (unrealized (0 2))
-  (origs (n-b (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton yahalom
-  (vars (n-a n-b n-a-0 n-b-0 text) (a b s name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s) (k k))
-  (precedes ((1 1) (0 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (added-strand serv 2) (enc a k (ltk b s))
-    (0 2))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a-0 n-b-0 (ltk b s))))
-      (send (cat (enc b k n-a-0 n-b-0 (ltk a s)) (enc a k (ltk b s))))))
-  (label 8)
-  (parent 7)
-  (unrealized (0 2) (1 0))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton yahalom
-  (vars (n-a n-b text) (a b s name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (0 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (displaced 2 0 resp 2)
-    (enc a n-a-0 n-b-0 (ltk b s)) (1 0))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s))))))
-  (label 9)
-  (parent 8)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton yahalom
-  (vars (n-a n-b n-a-0 n-b-0 text) (a b s name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s) (k k))
-  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s))
-  (precedes ((1 1) (0 2)) ((2 1) (1 0)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (added-strand resp 2)
-    (enc a n-a-0 n-b-0 (ltk b s)) (1 0))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a-0 n-b-0 (ltk b s))))
-      (send (cat (enc b k n-a-0 n-b-0 (ltk a s)) (enc a k (ltk b s)))))
-    ((recv (cat a n-a-0)) (send (cat b (enc a n-a-0 n-b-0 (ltk b s))))))
-  (label 10)
-  (parent 8)
-  (unrealized (0 2))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton yahalom
-  (vars (blob mesg) (n-a n-b n-a-0 text) (a b s a-0 b-0 s-0 name)
-    (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand init 3 (blob blob) (n-a n-a-0) (n-b n-b) (a a-0) (b b-0)
-    (s s-0) (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (2 1)) ((2 2) (0 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (added-strand init 3) (enc n-b k) (0 2))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    ((send (cat a-0 n-a-0))
-      (recv (cat (enc b-0 k n-a-0 n-b (ltk a-0 s-0)) blob))
-      (send (cat blob (enc n-b k)))))
-  (label 11)
-  (parent 9)
-  (unrealized (2 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton yahalom
-  (vars (n-a n-b text) (a b s name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (deflistener k)
-  (precedes ((0 1) (1 0)) ((1 1) (2 0)) ((2 1) (0 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (added-listener k) (enc n-b k) (0 2))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    ((recv k) (send k)))
-  (label 12)
-  (parent 9)
-  (unrealized (0 2) (2 0))
-  (comment "empty cohort"))
-
-(defskeleton yahalom
-  (vars (blob mesg) (n-a n-b n-a-0 n-b-0 n-a-1 text)
-    (a b s a-0 b-0 s-0 name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s) (k k))
-  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s))
-  (defstrand init 3 (blob blob) (n-a n-a-1) (n-b n-b) (a a-0) (b b-0)
-    (s s-0) (k k))
-  (precedes ((0 1) (3 1)) ((1 1) (3 1)) ((2 1) (1 0)) ((3 2) (0 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (added-strand init 3) (enc n-b k) (0 2))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a-0 n-b-0 (ltk b s))))
-      (send (cat (enc b k n-a-0 n-b-0 (ltk a s)) (enc a k (ltk b s)))))
-    ((recv (cat a n-a-0)) (send (cat b (enc a n-a-0 n-b-0 (ltk b s)))))
-    ((send (cat a-0 n-a-1))
-      (recv (cat (enc b-0 k n-a-1 n-b (ltk a-0 s-0)) blob))
-      (send (cat blob (enc n-b k)))))
-  (label 13)
-  (parent 10)
-  (unrealized (3 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton yahalom
-  (vars (n-a n-b n-a-0 n-b-0 text) (a b s name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s) (k k))
-  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s))
-  (deflistener k)
-  (precedes ((1 1) (3 0)) ((2 1) (1 0)) ((3 1) (0 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (added-listener k) (enc n-b k) (0 2))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a-0 n-b-0 (ltk b s))))
-      (send (cat (enc b k n-a-0 n-b-0 (ltk a s)) (enc a k (ltk b s)))))
-    ((recv (cat a n-a-0)) (send (cat b (enc a n-a-0 n-b-0 (ltk b s)))))
-    ((recv k) (send k)))
-  (label 14)
-  (parent 10)
-  (unrealized (0 2) (3 0))
-  (comment "empty cohort"))
-
-(defskeleton yahalom
-  (vars (blob mesg) (n-a n-b text) (a b s name) (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand init 3 (blob blob) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (2 1)) ((2 0) (0 0)) ((2 2) (0 2)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation nonce-test (contracted (a-0 a) (b-0 b) (s-0 s) (n-a-0 n-a))
-    n-b (2 1) (enc a n-a n-b (ltk b s)) (enc b k n-a n-b (ltk a s)))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    ((send (cat a n-a)) (recv (cat (enc b k n-a n-b (ltk a s)) blob))
-      (send (cat blob (enc n-b k)))))
-  (label 15)
-  (parent 11)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (s s) (n-a n-a) (n-b n-b) (k k))))
-  (origs (k (1 1)) (n-a (2 0)) (n-b (0 1))))
-
-(defskeleton yahalom
-  (vars (blob blob-0 mesg) (n-a n-b n-a-0 text) (a b s a-0 b-0 s-0 name)
-    (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand init 3 (blob blob) (n-a n-a-0) (n-b n-b) (a a-0) (b b-0)
-    (s s-0) (k k))
-  (defstrand init 3 (blob blob-0) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k))
-  (precedes ((0 1) (1 0)) ((1 1) (3 1)) ((2 2) (0 2)) ((3 0) (0 0))
-    ((3 2) (2 1)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation nonce-test (added-strand init 3) n-b (2 1)
-    (enc a n-a n-b (ltk b s)) (enc b k n-a n-b (ltk a s)))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    ((send (cat a-0 n-a-0))
-      (recv (cat (enc b-0 k n-a-0 n-b (ltk a-0 s-0)) blob))
-      (send (cat blob (enc n-b k))))
-    ((send (cat a n-a)) (recv (cat (enc b k n-a n-b (ltk a s)) blob-0))
-      (send (cat blob-0 (enc n-b k)))))
-  (label 16)
-  (parent 11)
-  (unrealized (2 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton yahalom
-  (vars (blob mesg) (n-a n-b n-a-0 n-b-0 n-a-1 text)
-    (a b s a-0 b-0 s-0 name) (k k-0 skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s) (k k))
-  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s))
-  (defstrand init 3 (blob blob) (n-a n-a-1) (n-b n-b) (a a-0) (b b-0)
-    (s s-0) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k-0))
-  (precedes ((0 1) (4 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((3 2) (0 2))
-    ((4 1) (3 1)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k k-0)
-  (operation nonce-test (added-strand serv 2) n-b (3 1)
-    (enc a n-a n-b (ltk b s)))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a-0 n-b-0 (ltk b s))))
-      (send (cat (enc b k n-a-0 n-b-0 (ltk a s)) (enc a k (ltk b s)))))
-    ((recv (cat a n-a-0)) (send (cat b (enc a n-a-0 n-b-0 (ltk b s)))))
-    ((send (cat a-0 n-a-1))
-      (recv (cat (enc b-0 k n-a-1 n-b (ltk a-0 s-0)) blob))
-      (send (cat blob (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k-0 n-a n-b (ltk a s)) (enc a k-0 (ltk b s))))))
-  (label 17)
-  (parent 13)
-  (unrealized (3 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton yahalom
-  (vars (blob blob-0 mesg) (n-a n-b n-a-0 text) (a b s a-0 b-0 s-0 name)
-    (k k-0 skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand init 3 (blob blob) (n-a n-a-0) (n-b n-b) (a a-0) (b b-0)
-    (s s-0) (k k))
-  (defstrand init 3 (blob blob-0) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k-0))
-  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((1 1) (3 1)) ((2 2) (0 2))
-    ((3 0) (0 0)) ((3 2) (2 1)) ((4 1) (2 1)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k k-0)
-  (operation nonce-test (added-strand serv 2) n-b (2 1) (enc n-b k)
-    (enc a n-a n-b (ltk b s)) (enc b k n-a n-b (ltk a s)))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    ((send (cat a-0 n-a-0))
-      (recv (cat (enc b-0 k n-a-0 n-b (ltk a-0 s-0)) blob))
-      (send (cat blob (enc n-b k))))
-    ((send (cat a n-a)) (recv (cat (enc b k n-a n-b (ltk a s)) blob-0))
-      (send (cat blob-0 (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k-0 n-a n-b (ltk a s)) (enc a k-0 (ltk b s))))))
-  (label 18)
-  (parent 16)
-  (unrealized (2 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton yahalom
-  (vars (blob blob-0 mesg) (n-a n-b n-a-0 text) (a b s a-0 b-0 s-0 name)
-    (k skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand init 3 (blob blob) (n-a n-a-0) (n-b n-b) (a a-0) (b b-0)
-    (s s-0) (k k))
-  (defstrand init 3 (blob blob-0) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k))
-  (deflistener k)
-  (precedes ((0 1) (1 0)) ((1 1) (3 1)) ((1 1) (4 0)) ((2 2) (0 2))
-    ((3 0) (0 0)) ((3 2) (2 1)) ((4 1) (2 1)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation nonce-test (added-listener k) n-b (2 1) (enc n-b k)
-    (enc a n-a n-b (ltk b s)) (enc b k n-a n-b (ltk a s)))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    ((send (cat a-0 n-a-0))
-      (recv (cat (enc b-0 k n-a-0 n-b (ltk a-0 s-0)) blob))
-      (send (cat blob (enc n-b k))))
-    ((send (cat a n-a)) (recv (cat (enc b k n-a n-b (ltk a s)) blob-0))
-      (send (cat blob-0 (enc n-b k)))) ((recv k) (send k)))
-  (label 19)
-  (parent 16)
-  (unrealized (4 0))
-  (comment "empty cohort"))
-
-(defskeleton yahalom
-  (vars (blob blob-0 mesg) (n-a n-b n-a-0 n-b-0 n-a-1 text)
-    (a b s a-0 b-0 s-0 name) (k k-0 skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s) (k k))
-  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s))
-  (defstrand init 3 (blob blob) (n-a n-a-1) (n-b n-b) (a a-0) (b b-0)
-    (s s-0) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k-0))
-  (defstrand init 3 (blob blob-0) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k-0))
-  (precedes ((0 1) (4 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((3 2) (0 2))
-    ((4 1) (5 1)) ((5 0) (0 0)) ((5 2) (3 1)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k k-0)
-  (operation nonce-test (added-strand init 3) n-b (3 1)
-    (enc a n-a n-b (ltk b s)) (enc b k-0 n-a n-b (ltk a s)))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a-0 n-b-0 (ltk b s))))
-      (send (cat (enc b k n-a-0 n-b-0 (ltk a s)) (enc a k (ltk b s)))))
-    ((recv (cat a n-a-0)) (send (cat b (enc a n-a-0 n-b-0 (ltk b s)))))
-    ((send (cat a-0 n-a-1))
-      (recv (cat (enc b-0 k n-a-1 n-b (ltk a-0 s-0)) blob))
-      (send (cat blob (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k-0 n-a n-b (ltk a s)) (enc a k-0 (ltk b s)))))
-    ((send (cat a n-a))
-      (recv (cat (enc b k-0 n-a n-b (ltk a s)) blob-0))
-      (send (cat blob-0 (enc n-b k-0)))))
-  (label 20)
-  (parent 17)
-  (unrealized (3 1))
-  (comment "2 in cohort - 2 not yet seen"))
-
-(defskeleton yahalom
-  (vars (blob blob-0 mesg) (n-a n-b n-a-0 text) (a b s a-0 b-0 s-0 name)
-    (k k-0 skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand init 3 (blob blob) (n-a n-a-0) (n-b n-b) (a a-0) (b b-0)
-    (s s-0) (k k))
-  (defstrand init 3 (blob blob-0) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k-0))
-  (deflistener k)
-  (precedes ((0 1) (1 0)) ((0 1) (4 0)) ((1 1) (3 1)) ((1 1) (5 0))
-    ((2 2) (0 2)) ((3 0) (0 0)) ((3 2) (2 1)) ((4 1) (2 1))
-    ((5 1) (2 1)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k k-0)
-  (operation nonce-test (added-listener k) n-b (2 1) (enc n-b k)
-    (enc a n-a n-b (ltk b s)) (enc b k n-a n-b (ltk a s))
-    (enc b k-0 n-a n-b (ltk a s)))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    ((send (cat a-0 n-a-0))
-      (recv (cat (enc b-0 k n-a-0 n-b (ltk a-0 s-0)) blob))
-      (send (cat blob (enc n-b k))))
-    ((send (cat a n-a)) (recv (cat (enc b k n-a n-b (ltk a s)) blob-0))
-      (send (cat blob-0 (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k-0 n-a n-b (ltk a s)) (enc a k-0 (ltk b s)))))
-    ((recv k) (send k)))
-  (label 21)
-  (parent 18)
-  (unrealized (5 0))
-  (comment "empty cohort"))
-
-(defskeleton yahalom
-  (vars (blob blob-0 mesg) (n-a n-b n-a-0 n-b-0 n-a-1 text)
-    (a b s a-0 b-0 s-0 name) (k k-0 k-1 skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s) (k k))
-  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s))
-  (defstrand init 3 (blob blob) (n-a n-a-1) (n-b n-b) (a a-0) (b b-0)
-    (s s-0) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k-0))
-  (defstrand init 3 (blob blob-0) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k-0))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k-1))
-  (precedes ((0 1) (4 0)) ((0 1) (6 0)) ((1 1) (3 1)) ((2 1) (1 0))
-    ((3 2) (0 2)) ((4 1) (5 1)) ((5 0) (0 0)) ((5 2) (3 1))
-    ((6 1) (3 1)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k k-0 k-1)
-  (operation nonce-test (added-strand serv 2) n-b (3 1) (enc n-b k-0)
-    (enc a n-a n-b (ltk b s)) (enc b k-0 n-a n-b (ltk a s)))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a-0 n-b-0 (ltk b s))))
-      (send (cat (enc b k n-a-0 n-b-0 (ltk a s)) (enc a k (ltk b s)))))
-    ((recv (cat a n-a-0)) (send (cat b (enc a n-a-0 n-b-0 (ltk b s)))))
-    ((send (cat a-0 n-a-1))
-      (recv (cat (enc b-0 k n-a-1 n-b (ltk a-0 s-0)) blob))
-      (send (cat blob (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k-0 n-a n-b (ltk a s)) (enc a k-0 (ltk b s)))))
-    ((send (cat a n-a))
-      (recv (cat (enc b k-0 n-a n-b (ltk a s)) blob-0))
-      (send (cat blob-0 (enc n-b k-0))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k-1 n-a n-b (ltk a s)) (enc a k-1 (ltk b s))))))
-  (label 22)
-  (parent 20)
-  (unrealized (3 1))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton yahalom
-  (vars (blob blob-0 mesg) (n-a n-b n-a-0 n-b-0 n-a-1 text)
-    (a b s a-0 b-0 s-0 name) (k k-0 skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s) (k k))
-  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s))
-  (defstrand init 3 (blob blob) (n-a n-a-1) (n-b n-b) (a a-0) (b b-0)
-    (s s-0) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k-0))
-  (defstrand init 3 (blob blob-0) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k-0))
-  (deflistener k-0)
-  (precedes ((0 1) (4 0)) ((1 1) (3 1)) ((2 1) (1 0)) ((3 2) (0 2))
-    ((4 1) (5 1)) ((4 1) (6 0)) ((5 0) (0 0)) ((5 2) (3 1))
-    ((6 1) (3 1)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k k-0)
-  (operation nonce-test (added-listener k-0) n-b (3 1) (enc n-b k-0)
-    (enc a n-a n-b (ltk b s)) (enc b k-0 n-a n-b (ltk a s)))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a-0 n-b-0 (ltk b s))))
-      (send (cat (enc b k n-a-0 n-b-0 (ltk a s)) (enc a k (ltk b s)))))
-    ((recv (cat a n-a-0)) (send (cat b (enc a n-a-0 n-b-0 (ltk b s)))))
-    ((send (cat a-0 n-a-1))
-      (recv (cat (enc b-0 k n-a-1 n-b (ltk a-0 s-0)) blob))
-      (send (cat blob (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k-0 n-a n-b (ltk a s)) (enc a k-0 (ltk b s)))))
-    ((send (cat a n-a))
-      (recv (cat (enc b k-0 n-a n-b (ltk a s)) blob-0))
-      (send (cat blob-0 (enc n-b k-0)))) ((recv k-0) (send k-0)))
-  (label 23)
-  (parent 20)
-  (unrealized (3 1) (6 0))
-  (comment "empty cohort"))
-
-(defskeleton yahalom
-  (vars (blob blob-0 mesg) (n-a n-b n-a-0 n-b-0 n-a-1 text)
-    (a b s a-0 b-0 s-0 name) (k k-0 k-1 skey))
-  (defstrand resp 3 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand serv 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s) (k k))
-  (defstrand resp 2 (n-a n-a-0) (n-b n-b-0) (a a) (b b) (s s))
-  (defstrand init 3 (blob blob) (n-a n-a-1) (n-b n-b) (a a-0) (b b-0)
-    (s s-0) (k k))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k-0))
-  (defstrand init 3 (blob blob-0) (n-a n-a) (n-b n-b) (a a) (b b) (s s)
-    (k k-0))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k-1))
-  (deflistener k-0)
-  (precedes ((0 1) (4 0)) ((0 1) (6 0)) ((1 1) (3 1)) ((2 1) (1 0))
-    ((3 2) (0 2)) ((4 1) (5 1)) ((4 1) (7 0)) ((5 0) (0 0))
-    ((5 2) (3 1)) ((6 1) (3 1)) ((7 1) (3 1)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k k-0 k-1)
-  (operation nonce-test (added-listener k-0) n-b (3 1) (enc n-b k-0)
-    (enc a n-a n-b (ltk b s)) (enc b k-0 n-a n-b (ltk a s))
-    (enc b k-1 n-a n-b (ltk a s)))
-  (traces
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k))))
-    ((recv (cat b (enc a n-a-0 n-b-0 (ltk b s))))
-      (send (cat (enc b k n-a-0 n-b-0 (ltk a s)) (enc a k (ltk b s)))))
-    ((recv (cat a n-a-0)) (send (cat b (enc a n-a-0 n-b-0 (ltk b s)))))
-    ((send (cat a-0 n-a-1))
-      (recv (cat (enc b-0 k n-a-1 n-b (ltk a-0 s-0)) blob))
-      (send (cat blob (enc n-b k))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k-0 n-a n-b (ltk a s)) (enc a k-0 (ltk b s)))))
-    ((send (cat a n-a))
-      (recv (cat (enc b k-0 n-a n-b (ltk a s)) blob-0))
-      (send (cat blob-0 (enc n-b k-0))))
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k-1 n-a n-b (ltk a s)) (enc a k-1 (ltk b s)))))
-    ((recv k-0) (send k-0)))
-  (label 24)
-  (parent 22)
-  (unrealized (3 1) (7 0))
-  (comment "empty cohort"))
-
-(comment "Nothing left to do")
-
-(defprotocol yahalom basic
-  (defrole init
-    (vars (a b s name) (n-a n-b text) (k skey) (blob mesg))
-    (trace (send (cat a n-a))
-      (recv (cat (enc b k n-a n-b (ltk a s)) blob))
-      (send (cat blob (enc n-b k)))))
-  (defrole resp
-    (vars (a b s name) (n-a n-b text) (k skey))
-    (trace (recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))
-      (recv (cat (enc a k (ltk b s)) (enc n-b k)))))
-  (defrole serv
-    (vars (a b s name) (n-a n-b text) (k skey))
-    (trace (recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    (uniq-orig k))
-  (comment "Yahalom protocol, Section 6.3.6, Page 49")
-  (url "http://www.eecs.umich.edu/acal/swerve/docs/49-1.pdf"))
-
-(defskeleton yahalom
-  (vars (n-a n-b text) (a b s name) (k skey))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (traces
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s))))))
-  (label 25)
-  (unrealized (0 0))
-  (origs (k (0 1)))
-  (comment "1 in cohort - 1 not yet seen"))
-
-(defskeleton yahalom
-  (vars (n-a n-b text) (a b s name) (k skey))
-  (defstrand serv 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s) (k k))
-  (defstrand resp 2 (n-a n-a) (n-b n-b) (a a) (b b) (s s))
-  (precedes ((1 1) (0 0)))
-  (non-orig (ltk a s) (ltk b s))
-  (uniq-orig n-a n-b k)
-  (operation encryption-test (added-strand resp 2)
-    (enc a n-a n-b (ltk b s)) (0 0))
-  (traces
-    ((recv (cat b (enc a n-a n-b (ltk b s))))
-      (send (cat (enc b k n-a n-b (ltk a s)) (enc a k (ltk b s)))))
-    ((recv (cat a n-a)) (send (cat b (enc a n-a n-b (ltk b s))))))
-  (label 26)
-  (parent 25)
-  (unrealized)
-  (shape)
-  (maps ((0) ((a a) (b b) (s s) (n-a n-a) (n-b n-b) (k k))))
-  (origs (k (0 1)) (n-b (1 1))))
-
-(comment "Nothing left to do")
diff --git a/tst/yahalom.scm b/tst/yahalom.scm
--- a/tst/yahalom.scm
+++ b/tst/yahalom.scm
@@ -1,6 +1,8 @@
-(herald "Yahalom Protocol Without Forwarding" (bound 15))
+(herald "Yahalom Protocol with Forwarding Removed"
+	(algebra diffie-hellman)
+   (bound 12))
 
-(defprotocol yahalom basic
+(defprotocol yahalom diffie-hellman
   (defrole init
     (vars (a b c name) (n-a n-b text) (k skey))
     (trace (send (cat a n-a))
diff --git a/tst/yahalom.tst b/tst/yahalom.tst
--- a/tst/yahalom.tst
+++ b/tst/yahalom.tst
@@ -1,10 +1,10 @@
-(herald "Yahalom Protocol Without Forwarding" (bound 15))
+(herald "Yahalom Protocol with Forwarding Removed"
+  (algebra diffie-hellman) (bound 12))
 
-(comment "CPSA 2.5.4")
+(comment "CPSA 3.2.2")
 (comment "All input read from yahalom.scm")
-(comment "Strand count bounded at 15")
 
-(defprotocol yahalom basic
+(defprotocol yahalom diffie-hellman
   (defrole init
     (vars (a b c name) (n-a n-b text) (k skey))
     (trace (send (cat a n-a)) (recv (enc b k n-a n-b (ltk a c)))
@@ -1592,7 +1592,7 @@
 
 (comment "Nothing left to do")
 
-(defprotocol yahalom basic
+(defprotocol yahalom diffie-hellman
   (defrole init
     (vars (a b c name) (n-a n-b text) (k skey))
     (trace (send (cat a n-a)) (recv (enc b k n-a n-b (ltk a c)))
